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 die Checkmk HW/SW-Inventur
Erweiterungen für die GUI (Ansichten, Dashboards, Spalten, Icons, etc.)
Definitionen von Graphen oder Perf-O-Metern
Benachrichtigungs- 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 andere Checkmk-Benutzer bereitstellen und untereinander austauschen. Von dort können Sie kostenlos Erweiterungen herunterladen und verwenden. 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
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
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:

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.

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:

Nun benötigen Sie nur noch eine Aktivierung der Änderungen 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 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 Replicate extensions aktivieren.
Danach werden bei der Synchronisation auch die MKPs und alle anderen Änderungen unterhalb des Verzeichnisses ~/local
übertragen.

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.
3. MKPs für Entwickler
Wenn Sie selbst Plugins für Checkmk programmieren oder modifizieren, beachten Sie die Artikel zu den vorhandenen Programmierschnittstellen und der Dateisystemstruktur, der Integration in die Agentenbäckerei sowie die Richtlinien für Check-Plugins.
3.1. Pakete auflösen
Das Auflösen eines Paketes 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 agentenbasierte 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:

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

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 der Verteilung über die Exchange dazu, ä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 als MKP-Datei herunterladen.
Bei Änderungen an paketierten Dateien muss das Paket nicht neu erstellt werden.
Klicken Sie auf , 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 Checkmk-Server 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: http://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
:
{'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