Checkmk
to checkmk.com

1. Einleitung

Checkmk ist sehr modular aufgebaut und kann an vielen Stellen mit Python-Programmierkenntnissen erweitert werden. Unter anderem ist es möglich, Checkmk um folgende Elemente ausbauen:

  • Eigene Checks und Agentenplugins inklusive Eingabemasken für die Konfigurationsumgebung

  • Eigene Plugins für Checkmk Inventory

  • Erweiterungen für die GUI (Ansichten, Dashboards, Spalten, Icons, etc.)

  • Definitionen von Graphen oder Perf-O-Metern

  • Alarmierungs- und Alert Handler-Skripte (auch in Shell oder anderen Skriptsprachen)

All diese Erweiterungen werden durch Ablage von zusätzlichen Dateien unterhalb des Verzeichnisses ~/local innerhalb der Checkmk-Instanz realisiert. Um diese Erweiterungen sinnvoll zu verwalten, innerhalb von verteilten Umgebungen auszurollen und auch mit anderen Anwendern auszutauschen, stellt Checkmk ein eigenes Paketformat bereit: das Checkmk Erweiterungspaket — kurz MKP.

Ein MKP sammelt eine beliebige Menge von Erweiterungen — z.B. einen Satz Check-Plugins inklusive zugehöriger Handbuchseiten, der Konfigurationsumgebung für Schwellwerte und zugehörigen Metrikdefinitionen. Es kann darüber hinaus Einstellungen für die Verteilung via Agentenbäckerei enthalten. Das MKP hat einen Namen, eine Versionsnummer und kann mit einer einfachen Aktion installiert oder auch wieder entfernt werden.

1.1. Die Checkmk Exchange

Auf der Checkmk Exchange können Plugin-Programmierer Pakete für die andere Checkmk-Nutzer bereitstellen und untereinander austauschen. Von dort können Sie kostenlos Erweiterungen herunterladen und verwenden. Bitte beachten Sie bei Paketen von der Exchange, dass diese durch andere Benutzern freiwillig und ohne jede Garantie bereitgestellt werden.

Unsauber programmierte Plugins können zu erhöhter Last und erhöhtem Arbeitsspeicherbedarf führen. Zudem ist es möglich, dass MKPs für ältere Versionen von CMK entwickelt wurden und so keine vollständige Kompatibilität vorhanden ist (von Version 1.6.0 auf 2.0.0 wechselte Checkmk von Python 2 auf Python 3). In Extremfällen droht Datenverlust. Wir empfehlen daher vor dem produktiven Einsatz fremder MKPs die Installation in einer Testinstanz.

1.2. Werkzeuge für MKPs

Zur Verwaltung von MKPs gibt es zwei Werkzeuge:

  • Den Kommandozeilenbefehl mkp

  • Den Setup-Menüeintrag Extension Packages (nur CEE Checkmk Enterprise Editions)

Beide Verwaltungswerkzeuge stellen wir Ihnen nun näher vor. Sie sind miteinander kompatibel, so dass Sie mal den Kommandozeilenbefehl und mal Extension Packages verwenden können, ohne dass dabei etwas „durcheinandergerät“.

2. Erweiterungspakete über das Setup-Menü verwalten

CEE Die Möglichkeit MKPs über die GUI zu verwalten gibt es ausschließlich in den Enterprise Editions von Checkmk. Im Setup-Menü steigen Sie in die Verwaltung der MKPs über Setup > Maintenance > Extension packages ein. Hier können Sie MKPs installieren, ändern oder neu erstellen:

mkp manager sidebar

2.1. Installation eines MKPs

Ein MKP, das Sie z.B. von der Exchange heruntergeladen haben, können Sie mit dem Knopf Upload Package in Checkmk hochladen und installieren. Dazu benötigen Sie die Datei auf dem Rechner, auf dem auch Ihr Webbrowser läuft. Die Dateiendung des Pakets muss .mkp sein.

mkp manager upload

Bei der Installation werden die Dateien in einer Ordnerhierarchie unterhalb von ~/local/ installiert. Außerdem wird eine Paketbeschreibungsdatei in ~/var/check_mk/packages/ abgelegt. Nach dem Hochladen erscheint das Paket dann in der Liste der installierten MKPs:

mkp manager list

Nun benötigen Sie nur noch ein Activate Changes und alle Funktionen aus dem Paket sind im System verankert und stehen Ihnen bereit.

2.2. Pakete deinstallieren

Über die entsprechenden Symbole in der Liste der Pakete, können Sie installierte Pakete wieder icon delete löschen. Beim Löschen wird das Paket mitsamt den installierten Dateien gelöscht und somit die Erweiterung komplett entfernt – also das Gegenteil der Installation.

2.3. MKPs in verteilten Umgebungen

Bei einem verteilten Monitoring reicht es, wenn Sie die Pakete auf der Zentralinstanz installieren. Bei jeder Verbindung zu einer Remote-Instanz können Sie dann bestimmen, ob die Anpassungen an diese Instanz übertragen werden sollen. Sie müssen dazu lediglich die Option Extensions aktivieren. Danach werden bei der Synchronisation auch die MKPs und alle anderen Änderungen unterhalb des Verzeichnisses ~/local übertragen.

mkp distr wato

Ist die Übertragung nicht gewünscht, schalten Sie die Option für diese oder alle Instanzen einfach ab.

Wichtig: Die Anpassungen werden nur übertragen, wenn die Option Enable replication auf Push configuration to this site eingestellt ist.

2.4. Feature Packs installieren

Neben Plugins kennt Checkmk Feature-Packs. Diese Erweiterungen stellen neue Funktionalitäten bereit, welche eigentlich erst in der nächsten stabilen Version enthalten sind. Solche Funktionalitäten können zum Beispiel Erweiterungen bestehender Checks oder Spezialagenten sein. Sie sind in der jeweiligen Version direkt enthalten und müssen lediglich aktiviert — oder wieder deaktiviert werden.

Für Checkmk 2.0.0 sind derzeit keine Feature-Packs geplant.

OMD[mysite]:~$ mkp install ~/share/check_mk/optional_packages/azure_ad-1.0.mkp

3. MKPs für Entwickler

Wenn Sie selbst Plugins für Checkmk programmieren oder modifizieren, beachten Sie bitte die Artikel zu den vorhandenen Programmierschnittstellen und der Dateisystemstruktur, der Integration in die Agent-Bakery sowie die Richtlinien für Check-Plugins.

3.1. Pakete auflösen

Das icon release mkp Auflösen eines Paketes hingegen entlässt die paketierten Dateien unter ~/local/ sozusagen "in die Freiheit" und entfernt nur die Paketbeschreibung. Als Ergebnis sind die Dateien dann unpaketiert und die Erweiterungen weiterhin aktiv. Dies ist das Gegenteil des Erzeugens eines Pakets aus bisher unpaketierten Dateien.

In der Praxis werden Sie das Auflösen von Paketen am ehesten benötigen, wenn Sie eine Erweiterung anpassen und später mit Änderungen neu paketieren wollen. Zum Beispiel können Sie mit unserem "Hello world!" Beispiel, welches nichts sinnvolles tut, aber als Vorlage für das erste eigene Paket dienen kann, loslegen.

3.2. Pakete erstellen

Das Erstellen eines eigenen MKPs ist sehr einfach, wenn die Programmierarbeit abgeschlossen ist. Ausgangspunkt ist, dass Sie unter ~/local/ in den entsprechenden Verzeichnissen eigene Dateien angelegt haben. Für eigene Agenten basierte Check-Plugins ist das richtige Verzeichnis z.B. ~/local/lib/check_mk/base/plugins/agent_based. Diese Dateien gehören zunächst zu keinem Paket und werden daher unter Unpackaged files aufgelistet:

mkps unpackaged
Liste der Unpackaged files und der Knopf Create package

Über den Knopf icon new mkp Create package gelangen Sie zum Dialog zum Erstellen eines neuen Pakets:

mkps create

Neben den offensichtlichen Angaben ist es wichtig, dass Sie mindestens eine Datei auswählen, die eingepackt werden soll. Durch das Erstellen wird eine Paketbeschreibung unter ~/var/check_mk/packages/ angelegt, welche neben den allgemeinen Angaben auch die Liste der enthaltenen Dateien beinhaltet. Die maximal unterstützte Checkmk-Version ist natürlich ohne Glaskugel schwer vorherzusagen. Als Faustregel kann angenommen werden: Was für 2.0.0 ohne Verwendung alter APIs programmiert wurde, läuft auch mit 2.1.0. Daher dient die maximale Checkmk-Version vor allem bei Verteilung über die Exchange, ältere Pakete zu identifizieren, die intensivere Tests und möglicherweise Anpassungen benötigen.

Dieses Paket können Sie nun — z.B. um es auf ein anderes System zu übertragen oder auf die Exchange hochzuladen — in der Paketliste mit dem Symbol icon download als MKP-Datei herunterladen.

Bei Änderungen an paketierten Dateien muss das Paket nicht neu erstellt werden. Benutzen Sie den icon edit, um die Versionsnummer zu ändern, speichern Sie das geänderte Paket und laden Sie es gegebenenfalls neu herunter.

4. MKP auf der Kommandozeile

Alle oben genannten Aktionen können Sie auch auf der Kommandozeile ausführen. Dazu dient der Befehl mkp (der eigentlich eine Abkürzung für cmk -P ist):

OMD[mysite]:~$ mkp
Usage: check_mk [-v] -P|--package COMMAND [ARGS]

Available commands are:
   create NAME      ...  Collect unpackaged files into new package NAME
   pack NAME        ...  Create package file from installed package
   release NAME     ...  Drop installed package NAME, release packaged files
   find             ...  Find and display unpackaged files
   list             ...  List all installed packages
   list NAME        ...  List files of installed package
   list PACK.mkp    ...  List files of uninstalled package file
   show NAME        ...  Show information about installed package
   show PACK.mkp    ...  Show information about uninstalled package file
   install PACK.mkp ...  Install or update package from file PACK.mkp
   remove NAME      ...  Uninstall package NAME

   -v  enables verbose output

Package files are located in /omd/sites/mysite/var/check_mk/packages/.

4.1. Installation eines MKPs

Die Installation eines Pakets geschieht mit mkp install. Dazu müssen Sie die MKP-Datei natürlich zunächst auf den Monitoringserver bringen (z.B. mit scp). Anschließend geht die Installation mit einem Befehl:

OMD[mysite]:~$ mkp install /tmp/mypackage-1.0.mkp

Die Liste der installierten Pakete rufen Sie mit mkp list ab:

OMD[mysite]:~$ mkp list
mypackage

Details über ein einzelnes Paket erfahren Sie mit mkp show:

OMD[mysite]:~$ mkp show myPackage
Package file:                  /omd/sites/mysite/var/check_mk/packages/myPackage
Name:                          myPackage
Version:                       1.0
Packaged on Checkmk Version:   2.0.0p23
Required Checkmk Version:      2.0.0
Valid until Checkmk version:   2.1.999
Title:                         My own check plugin
Author:                        myName
Download-URL:                  www.example.com
Files:                         checkman(1) checks(1)
Description:
  This package contains a cool check plugin

4.2. Pakete deinstallieren oder auflösen

Die Deinstallation eines Pakets geschieht mit mkp remove. Dieser Befehl löscht sowohl die Paketbeschreibung, als auch alle enthaltenen Dateien!

OMD[mysite]:~$ mkp remove mypackage

Und auflösen können Sie ein Paket mit mkp release. Dabei bleiben die Erweiterungsdateien erhalten und nur die Paketbeschreibung wird gelöscht:

OMD[mysite]:~$ mkp release mypackage

4.3. Pakete erstellen

Die Vorgehensweise zum Erstellen von MKPs auf der Kommandozeile ist analog zum Setup-Menü. Zunächst erstellen Sie Ihre Erweiterungen in den passenden Verzeichnissen unterhalb von ~/local/. Alle unpaketierten Dateien listen Sie dann mit mkp find auf:

OMD[mysite]:~$ mkp find
/omd/sites/mysite/local/lib/check_mk/base/plugins/agent_based/mycheck
/omd/sites/mysite/local/lib/check_mk/base/plugins/agent_based/mycheck_manpage

Jetzt erzeugen Sie mit dem Befehl mkp create eine Paketkonfiguration, welche (vorerst) all diese Dateien beinhaltet. Geben Sie dabei den gewünschten Namen des neuen Pakets an:

OMD[mysite]:~$ mkp create mypackage

Die Eigenschaften des Pakets editieren Sie nun mit einem Texteditor. Die Datei dazu liegt in var/check_mk/packages/mypackage:

var/check_mk/packages/mypackage
{'author': 'myName',
 'description': u'This package contains a check plugin',
 'download_url': 'http://www.example.com',
 'files': {'agent_based': [],
           'agents': [],
           'checkman': ['mycheck'],
           'checks': ['mycheck'],
           'doc': [],
           'inventory': [],
           'lib': [],
           'notifications': [],
           'pnp-templates': [],
           'web': []},
 'name': 'myPackage',
 'num_ files': 2,
 'title': 'My own check plugin',
 'version': '1.0',
 'version.min_required': '2.0.0',
 'version.packaged': '2.0.0p23'
 'version.usable_until': '2.1.999'}

Bearbeiten Sie diese Datei nach Ihren Wünschen. Achten Sie auf korrekte Python-Syntax. Unicode-Zeichenketten (Texte, die nicht-Ascii-Zeichen wie Umlaute enthalten) müssen mit einem kleinen vorangestellten u gekennzeichnet werden.

Unter dem Eintrag files können Sie Dateien entfernen, welche nicht paketiert werden sollen. Tragen Sie unter version.min_required die Mindestversion von Checkmk ein, die erforderlich ist, um das Paket zu verwenden.

Anschließend können Sie mit mkp pack eine MKP-Datei erzeugen:

OMD[mysite]:~$ mkp pack mypackage
OMD[mysite]:~$ ll *.mkp
-rw-rw-r-- 1 mysite mysite 495 Dez 22 13:36 mypackage-1.0.mkp
Auf dieser Seite