Checkmk
Unsere KI-RichtlinieKI

1. Einleitung

In den anderen Artikeln zur Programmierung von Erweiterungen haben Sie bereits gelernt, wie Sie schon mit kleinen Python-Kenntnissen Erweiterungen entwickeln können. Und sicher haben Sie selbst auch schon Erweiterungen als MKP aus der Checkmk Exchange heruntergeladen und installiert. In diesem Artikel erfahren Sie nun alles Notwendige, um Erweiterungspakete für Checkmk anzupassen oder aus selbst entwickelten Erweiterungen zu erstellen.

1.1. Die Arbeitsumgebung

Verwenden Sie zur Erstellung und Anpassung von MKPs eine Instanz zum Testen und kopieren Sie die MKPs für die Verteilung auf die produktiv genutzte Instanz. Dies wird Ihnen vor allem zwei potentielle Probleme ersparen, die entstehen, wenn geänderte Dateien nicht rechtzeitig zu MKPs gepackt werden:

  • Beim Checkmk-Update werden lokal geänderte Dateien durch den letzten Stand des MKPs überschrieben (dem Autor dieses Satzes ist genau dies passiert).

  • Im verteilten Monitoring mit zentralem Setup wundern Sie sich, weil sich Plugins auf Remote-Instanzen anders verhalten als auf der Zentralinstanz, denn die Remote-Instanzen erhalten weiterhin den zuletzt gepackten Stand.

Zudem ist das Risiko, versehentlich etwas bereits Vorhandenes zu überschreiben, weit geringer, wenn eine Instanz primär zum Testen eigener Entwicklungen eingesetzt wird und keine produktiv genutzten Erweiterungen aus anderer Quelle nutzt.

1.2. Werkzeuge für MKPs

Zur Verwaltung von MKPs gibt es zwei Werkzeuge:

  • Den Befehl mkp

  • In den kommerziellen Editionen haben Sie zusätzlich den Setup-Menüeintrag Maintenance > Extension Packages

Beide Wege sind kompatibel, und mit der einen Methode vorgenommene Änderungen sind sofort in der anderen Methode sichtbar. Aber: auf der Befehlszeile stehen zusätzliche Optionen zur Verfügung, die künftig weiter ausgebaut werden. Daneben ist der Einsatz in Skripten möglich.

Für die Entwicklungsarbeit raten wir daher zur Verwendung der Befehlszeile.

2. Der Workflow

In diesem Kapitel zeigen wir Ihnen an der Reihenfolge aus auflösen, anpassen, neu zusammenstellen und paketieren, wie Sie bei der Modifikation eines vorhandenen Paketes vorgehen. Unser Beispiel verwendet das in der Checkmk Exchange verfügbare Beispiel-MKP Hello world!. Wollen Sie stattdessen ein eigenes MKP aus selbst erstellten Dateien bauen, überspringen Sie einfach die ersten Schritte und gehen direkt zur Suche nach unpaketierten Dateien.

2.1. Ein MKP auflösen

Damit ein Paket aufgelöst werden kann, muss dieses zunächst den Zustand Enabled (active on this site) haben. Dies überprüfen Sie mit dem folgenden Befehl:

OMD[mysite]:~$ mkp list
Name        Version Title        Author             Req. Version Until Version Files State
----------- ------- ------------ ------------------ ------------ ------------- ----- -----------------------------
hello_world 0.2.5   Hello world! Mattias Schlenker  2.3.0b1      2.5.99        8     Enabled (active on this site)
Befehl(e) in die Zwischenablage kopieren
Befehl(e) erfolgreich in die Zwischenablage kopiert!
Schreibzugriff auf die Zwischenablage wurde verweigert!

Ist das Paket nicht aktiv, aktivieren Sie es:

OMD[mysite]:~$ mkp enable hello_world
Befehl(e) in die Zwischenablage kopieren
Befehl(e) erfolgreich in die Zwischenablage kopiert!
Schreibzugriff auf die Zwischenablage wurde verweigert!

Im Falle, dass ein Paket mit Ihrer Checkmk-Version inkompatibel ist, sie das Paket aber dennoch aktivieren wollen – eben gerade um es auf die neuere Checkmk-Version anzupassen – verwenden Sie den zusätzlichen Parameter --force-install.

Das Auflösen geschieht dann mit dem folgenden Befehl:

OMD[mysite]:~$ mkp release hello_world
Befehl(e) in die Zwischenablage kopieren
Befehl(e) erfolgreich in die Zwischenablage kopiert!
Schreibzugriff auf die Zwischenablage wurde verweigert!

Im Setup der kommerziellen Editionen steht alternativ das Symbol eines Klemmbausteins (icon release mkp) zur Verfügung.

2.2. Modifikationen vornehmen

Nun passen Sie vorhandene Dateien an oder fügen neue hinzu. Falls Ihre Arbeit nicht auf einem vorhandenen MKP basiert, sondern sozusagen „von Null“ beginnt, werden Sie zunächst eine Verzeichnisstruktur anlegen und diese beispielsweise befüllen, wie es in den Artikeln zur Programmierung von agentenbasierten Check-Plugins, Spezialagenten oder SNMP-Plugins beschrieben ist.

2.3. Unpaketierte Dateien finden

Hat Ihre Entwicklungsarbeit einen Stand erreicht, mit dem Sie zufrieden sind, bereiten Sie das erneute Verpacken vor. Der erste Schritt hierfür ist, sich einen Überblick zu verschaffen, welche unpaketierten Dateien im Instanzverzeichnis liegen. Mit dieser Information können Sie entscheiden, ob Sie Dateien löschen oder frühere Experimente zuerst paketieren wollen.

Der hierfür verwendete Befehl ist mkp find:

OMD[mysite]:~$ mkp find
File                                                  Package Version Part                                         Mode
----------------------------------------------------- ------- ------- -------------------------------------------- ----------
hello_world/rulesets/ruleset_hello_world.py                           Additional Checkmk plug-ins by third parties -rw-------
hello_world/agent_based/hello_world.py                                Additional Checkmk plug-ins by third parties -rw-------
hello_world/rulesets/ruleset_hello_world_bakery.py                    Additional Checkmk plug-ins by third parties -rw-------
hello_world/graphing/helloworld_perfometer_graphing.py                Additional Checkmk plug-ins by third parties -rw-------
hello_world/checkman/hello_world                                      Additional Checkmk plug-ins by third parties -rw-------
windows/plugins/hello_world.cmd                                       Agents                                       -rwx------
plugins/hello_world                                                   Agents                                       -rwx------
python3/cmk/base/cee/plugins/bakery/hello_world.py                    Libraries                                    -rw-------
Befehl(e) in die Zwischenablage kopieren
Befehl(e) erfolgreich in die Zwischenablage kopiert!
Schreibzugriff auf die Zwischenablage wurde verweigert!

Die angezeigte Liste ist rein informativ. Bei den kommerziellen Editionen können Sie auf der Seite Extension packages den Knopf List unpackaged files verwenden. In der angezeigten Seite können Sie nicht mehr benötigte Dateien einfach löschen.

2.4. Die Paketkonfiguration erstellen

Mit dem Befehl mkp template erstellen Sie eine Vorlage für eine Paketkonfiguration. Als weiterer Parameter ist der Name des Pakets anzugeben. Da der Befehl auf die Standardausgabe schreibt, müssen Sie die Ausgabe entweder umleiten oder Sie kopieren Sie einfach aus dem Terminal:

OMD[mysite]:~$ mkp template hello_world > ~/tmp/hello_world.info
OMD[mysite]:~$ cat ~/tmp/hello_world.info
{'author': 'Add your name here',
 'description': 'Please add a description here',
 'download_url': 'https://example.com/hello_world/',
 'files': {'agents': ['plugins/hello_world', 'windows/plugins/hello_world.cmd'],
           'cmk_addons_plugins': ['hello_world/agent_based/hello_world.py',
                                  'hello_world/checkman/hello_world',
                                  'hello_world/graphing/helloworld_perfometer_graphing.py',
                                  'hello_world/rulesets/ruleset_hello_world.py',
                                  'hello_world/rulesets/ruleset_hello_world_bakery.py'],
           'lib': ['python3/cmk/base/cee/plugins/bakery/hello_world.py']},
 'name': 'hello_world',
 'title': 'Title of hello_world',
 'version': '1.0.0',
 'version.min_required': '2.5.0p4',
 'version.packaged': 'cmk-mkp-tool 3.0.0',
 'version.usable_until': None}
Befehl(e) in die Zwischenablage kopieren
Befehl(e) erfolgreich in die Zwischenablage kopiert!
Schreibzugriff auf die Zwischenablage wurde verweigert!

Wollen Sie stattdessen die Paketkonfiguration eines zuvor aufgelösten Paketes verwenden, extrahieren Sie diese einfach aus dem ursprünglichen Paket:

OMD[mysite]:~$ tar -Ox info -f ~/var/check_mk/packages_local/hello_world-0.2.5.mkp \
    > ~/tmp/hello_world.info
Befehl(e) in die Zwischenablage kopieren
Befehl(e) erfolgreich in die Zwischenablage kopiert!
Schreibzugriff auf die Zwischenablage wurde verweigert!

Passen Sie die Paketkonfiguration jetzt mit Ihrem Lieblingseditor an. Wie bei vielen anderen Konfigurationsdateien in Checkmk handelt es sich hier um eine Python-Datei. Achten Sie daher auf korrekte Python-Syntax.

Unter dem Schlüssel 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. Unter version.usable_until können Sie die höchste Checkmk-Version angeben, für die das Paket nutzbar ist. Wenn Sie ausschließlich die stabilen öffentlichen Plugin-APIs nutzen, wird Ihr Paket die ganze Spanne von 2.3.0 bis 3.0.99 abdecken. Die verwendete Versionsnummer (Schlüssel version) muss den Konventionen des Semantic Versioning entsprechen. Inkrementieren Sie bei kleinen Änderungen wie Bugfixes nur die letzte Stelle.

Wenn Sie eine kommerzielle Edition verwenden, finden Sie auf der Seite Setup > Maintenance > Extension packages den Knopf Create package. Dieser Knopf führt Sie zu einem Formular, in dem Sie alle in der Vorlage für die Paketkonfiguration enthaltenen Parameter eintragen können – ohne auf korrekte Python-Syntax achten zu müssen.

2.5. Das Paket erstellen

Ist das Bearbeiten der Konfigurationsdatei abgeschlossen, packen Sie mit mkp package gefolgt vom Namen der Konfigurationsdatei:

OMD[mysite]:~$ mkp package ~/tmp/hello_world.info
Befehl(e) in die Zwischenablage kopieren
Befehl(e) erfolgreich in die Zwischenablage kopiert!
Schreibzugriff auf die Zwischenablage wurde verweigert!

Bei diesem Vorgang wird nicht nur das MKP erzeugt, welches Sie dann in ~/var/check_mk/packages_local/ vorfinden oder im Paketmanagement der kommerziellen Editionen herunterladen können. Das Paket wird zusätzlich direkt aktiviert (hat also den Zustand Enabled (active on this site)), was exakt dem Verhalten vor dem Paketieren entspricht.

Beachten Sie, dass beim Packen auf einer produktiv genutzten Instanz bei aktiviertem zentralem Setup das neue Paket direkt an die Remote-Instanzen verteilt wird. Diese Tatsache sollte ein weiterer Anlass für die Nutzung dedizierter Testinstanzen sein.

3. Veröffentlichung in der Checkmk Exchange

Falls Sie Ihr frisch erstelltes MKP teilen möchten, können Sie es in die Checkmk Exchange hochladen. Vor dem Upload sind einige Dinge zu berücksichtigen:

  • Seien Sie sich bewusst, dass Ihre Erweiterung unter GPL v2 lizenzierte Programmierschnittstellen nutzt und daher ebenfalls der Lizenz GPL v2 unterliegt.

  • Checkmk führt vor der Veröffentlichung eine Prüfung auf von der Erweiterung ausgehende Gefahren durch. Pakete, die außerhalb eines Instanzverzeichnisses lesen oder schreiben oder nicht von Checkmk bereitgestellte APIs verwenden, werden zurückgewiesen.

  • Weisen Sie bei der Erweiterung vorhandener (eventuell verwaister) Pakete auf Konflikte wegen Verwendung derselben Ordnerstruktur hin. Anwendern sollte bewusst werden, dass sie das ursprüngliche Paket vor der Installation Ihrer Version deaktivieren müssen.

4. Das MKP-Paketformat

Wollen Sie lediglich einen Blick in ein MKP werfen oder einzelne Dateien extrahieren, ohne das ganze Paket zu installieren, ist Kenntnis vom Paketformat hilfreich. Der Blick in ein Paket ist recht simpel, weil das MKP-Format lediglich eine .tar.gz-Datei ist, die wiederum .tar-Dateien und Manifest-Dateien enthält.

Die Untersuchung der heruntergeladenen Datei hello_world-0.2.5.mkp gibt die erste Stufe der Struktur preis:

user@host:~$ tar -tvf hello_world-0.2.5.mkp
-rw-r--r-- 0/0            1715 2025-03-07 16:19 info
-rw-r--r-- 0/0            1311 2025-03-07 16:19 info.json
-rw-r--r-- 0/0           10240 2025-03-07 16:19 agents.tar
-rw-r--r-- 0/0           20480 2025-03-07 16:19 cmk_addons_plugins.tar
-rw-r--r-- 0/0           10240 2025-03-07 16:19 lib.tar
Befehl(e) in die Zwischenablage kopieren
Befehl(e) erfolgreich in die Zwischenablage kopiert!
Schreibzugriff auf die Zwischenablage wurde verweigert!

Mit einer Pipeline über zwei tar-Befehle können Sie nun einen Blick in den Inhalt der cmk_addons_plugins.tar werfen:

user@host:~$ tar -Ox cmk_addons_plugins.tar -f hello_world-0.2.5.mkp | tar -tvf -
-rw------- mysite/mysite 3711 2025-03-07 10:59 hello_world/agent_based/hello_world.py
-rw------- mysite/mysite 1079 2025-03-07 10:59 hello_world/checkman/hello_world
-rw------- mysite/mysite 1179 2025-03-07 10:59 hello_world/graphing/helloworld_perfometer_graphing.py
-rw------- mysite/mysite 3373 2025-03-07 10:59 hello_world/rulesets/ruleset_hello_world.py
-rw------- mysite/mysite 2634 2025-03-07 10:59 hello_world/rulesets/ruleset_hello_world_bakery.py
Befehl(e) in die Zwischenablage kopieren
Befehl(e) erfolgreich in die Zwischenablage kopiert!
Schreibzugriff auf die Zwischenablage wurde verweigert!

Und was ist mit den beiden Manifest-Dateien info und info.json? Die Datei info und ihre im Python-Dictionary-Format enthaltenen Felder haben Sie weiter oben kennengelernt. Das JSON-Äquivalent info.json enthält exakt die gleichen Felder und Werte, wurde aber im JSON-Format serialisiert.

5. Befehlsreferenz

Befehle für die Verwaltung und für Updates finden Sie im Artikel zur Verwaltung von MKPs.

5.1. Entwicklung

Sub-Befehl Parameter Verwendungszweck

release

Name des Pakets

Löst ein aktives Paket auf.

find

keine

Listet alle zu keinem Paket gehörenden Dateien auf.

template

Name des neu zu erstellenden Pakets

Erstellt eine Manifest-Datei als Basis für ein neues Paket.

package

Pfad zur Manifest-Datei

Erstellt auf Basis des Inhalts einer Manifest-Datei ein MKP.


Letzte Änderung: Thu, 02 Jul 2026 11:15:52 GMT via Commit 87c942927
Auf dieser Seite