1. Einleitung
Wir setzen an dieser Stelle voraus, dass Sie sich schon mit den Grundlagen von Datenquellenprogrammen und Spezialagenten auseinandergesetzt haben und die prinzipiellen Mechanismen verstehen. Spezialagenten erweitern ein Datenquellenprogramm um die einfache Konfigurierbarkeit. Dafür werden Regeln im Setup genutzt. Die Konfigurierbarkeit kann hierbei sowohl Umfang und Art der eingeholten Daten betreffen als auch deren Vorverarbeitung, bevor diese als Agentenausgabe in die weitere Verarbeitungskette übergeben werden.
Jeder Spezialagent ist ein selbstständig lauffähiges Programm ohne Abhängigkeiten zu Programmierschnittstellen von Checkmk. Wie bei Datenquellenprogrammen erfolgt auch bei Spezialagenten der Aufruf im üblichen Check-Intervall (standardmäßig ist dies meist eine Minute). Ein Prozess wird durch den Spezialagenten gestartet und eine Agentenausgabe auf der Standardausgabe übergeben. Danach beendet sich der Spezialagent. Dies erlaubt es Ihnen, Spezialagenten in beliebigen Programmiersprachen zu implementieren. Allerdings bedeuten kurz laufende Prozesse, dass Just-in-time-kompilierte Sprachen wie Java eher weniger geeignet sind als kompilierte Sprachen oder schnell startende interpretierte Sprachen.
Die Konfiguration der gestarteten Prozesse erfolgt über Kommandozeilenparameter beim Aufruf des Spezialagenten. Hierfür bestimmen Sie, in welcher Weise GUI-Elemente wie Texteingabefelder oder Checkboxen auf bestimmte Parameter abgebildet werden.
Die Code-Beispiele dieses Artikels finden Sie in unserem GitHub-Repository und den fertig gebauten Open-Meteo-Spezialagenten zudem als MKP in der Checkmk-Exchange.
2. Einen „minimalen“ Spezialagenten erstellen
![]() |
Auch im Zusammenhang mit der Entwicklung von Spezialagenten müssen Sie darauf achten, jeweils den Instanzbenutzer für die Dateierstellung zu verwenden. Sind Eigentümer oder Berechtigungen nicht korrekt gesetzt, kann es zu Problemen und Inkompatibilitäten kommen. |
Im Gegensatz zum Datenquellenprogramm kann ein Spezialagent nicht an einer beliebigen Stelle im Dateisystem liegen.
Er hat seinen Platz in der Verzeichnishierarchie von Checkmk.
Zudem muss der Dateiname mit agent_
beginnen.
Des weiteren müssen Spezialagenten immer der Checkmk-Instanz bekannt gemacht werden.
Ein minimaler, lauffähiger Spezialagent benötigt also wenigstens drei Dateien: den Spezialagenten, die Regelkonfiguration und die Aufrufkonfiguration.
2.1. Vorbereitung der Umgebung
Vorbereitend sollten Sie daher drei Dateiverzeichnisse anlegen, die sich alle unterhalb von ~/local/lib/python3/cmk_addons/plugins/<plug-in_family>
befinden.
Das im Beispiel gezeigte vierte ist optional, er wird gegebenenfalls für einen agentenbasierten Check verwendet.
OMD[mysite]:~$ mkdir -p local/lib/python3/cmk_addons/plugins/hellospecial/libexec
OMD[mysite]:~$ mkdir -p local/lib/python3/cmk_addons/plugins/hellospecial/rulesets
OMD[mysite]:~$ mkdir -p local/lib/python3/cmk_addons/plugins/hellospecial/server_side_calls
OMD[mysite]:~$ mkdir -p local/lib/python3/cmk_addons/plugins/hellospecial/agent_based
2.2. Der Spezialagent
Was wäre für einen minimalen Spezialagenten besser geeignet als ein lokaler Check, der einen „Hallo Welt!“ Dienst bereitstellt? Das gelingt bereits einem simplen Shell-Skript, welches zwei Zeilen Ausgabe erzeugt:
#!/bin/bash
echo '<<<local>>>'
echo '0 "Hello special" - This static service is always OK'
![]() |
Dieses Skript darf keine Dateiendung haben. |
Nicht vergessen: Die Datei muss ausführbar gemacht werden:
OMD[mysite]:~$ chmod 755 local/lib/python3/cmk_addons/plugins/hellospecial/libexec/agent_hellospecial
Damit vergeben Sie die notwendigen Berechtigungen:
für den Eigentümer der Datei (Lesen, Schreiben, Ausführen)
für die mit einer Datei verknüpfte Gruppe (Lesen, Ausführen)
für andere Benutzer (Lesen, Ausführen).
2.3. Die Regelkonfiguration
Erstellt wird jetzt das absolute Minimum:
Titel und Kategorie werden gesetzt.
Das GUI-Formular zur Konfiguration bleibt leer.
#!/usr/bin/env python3
# Shebang needed only for editors
from cmk.rulesets.v1.form_specs import Dictionary
from cmk.rulesets.v1.rule_specs import SpecialAgent, Topic, Help, Title
def _formspec():
return Dictionary(
title=Title("Hello special!"),
help_text=Help("This rule is to demonstrate the minimum special agent."),
elements={}
)
rule_spec_hellospecial = SpecialAgent(
topic=Topic.GENERAL,
name="hellospecial",
title=Title("Hello special!"),
parameter_form=_formspec
)
Der name
verweist auf den Namen des Spezialagenten, der das Präfix agent_
bekommt.
Der so konfigurierte Agent wird in Other integrations verfügbar sein.
Sein Konfigurationsformular enthält dank der leeren elements={}
aber keine Einträge.
2.4. Die Aufrufkonfiguration
Diese Konfiguration führt den auszuführenden Spezialagenten mit den Einstellungen zusammen, die aus GUI und Standardeinstellungen bezogen werden.
Aus diesen Einstellungen werden nun Aufrufparameter.
Der name
verweist auch hier wieder auf den Namen des Spezialagenten, der das Präfix agent_
bekommt.
#!/usr/bin/env python3
# Shebang needed only for editors
from cmk.server_side_calls.v1 import noop_parser, SpecialAgentConfig, SpecialAgentCommand
def _agent_arguments(params, host_config):
yield SpecialAgentCommand(command_arguments=[])
special_agent_hellospecial = SpecialAgentConfig(
name="hellospecial",
parameter_parser=noop_parser,
commands_function=_agent_arguments
)
Damit sind die grundlegenden Voraussetzungen für den Spezialagenten vorhanden. Sie können diese selbstverständlich jederzeit mit weiteren Angaben erweitern.
2.5. Der erste Test
Sind die Dateien angelegt, starten Sie den Webserver der Instanz neu:
OMD[mysite]:~$ omd restart apache
Wenn Sie jetzt Setup > Agents > Other integrations öffnen, sollten Sie in der Rubrik Custom integrations den neuen Eintrag Hello special! sehen.
Fehlt dieser, prüfen Sie zuerst, ob Sie alle Dateien am dafür vorgesehenen Ort abgelegt haben. Falls Sie nach weiteren möglichen Fehlerquellen suchen, können Sie dies in den kommerziellen Editionen bequem über die Verwaltung von Checkmk-Erweiterungspaketen machen. Alternativ haben wir Ihnen im Kapitel Fehler beheben die wichtigsten Fehlerquellen und mögliche Lösungsansätze aufgelistet.
3. Ein komplexeres Beispiel: Ein vollständiger Wetter-Service
Ein Check, der nie seinen Zustand ändert, ist – nun ja – ziemlich vorhersagbar. Wir wagen also den Schritt hin zu einem „echten“ Spezialagenten, der eine Web- oder REST-API abfragt und als Antwort ein Objekt als JSON- oder XML-Struktur erhält. Das sind typische Datenformate auch beim Zugriff auf die APIs von Netzwerkgeräten wie SAN-Devices.
Damit Sie für diese Übung keine spezifische Hardware benötigen, greifen wir auf die freie API von Open-Meteo.com zu.
Unser Ziel ist es, einen kompletten Spezialagenten zu schreiben, der mit Längen- und Breitengrad konfiguriert wird.
Um das Beispiel einfach zu halten, übernimmt der Spezialagent auch direkt die Interpretation der Daten.
So soll der Spezialagent bei Temperaturen unter 5 Grad Celsius den Zustand WARN und bei unter 0 Grad den Zustand CRIT annehmen.
Unseren Check nennen wir abgekürzt ometemp
, den Spezialagenten entsprechend agent_ometemp
und so weiter.
![]() |
Open-Meteo erlaubt die kostenlose Nutzung für nicht-kommerzielle Zwecke und behält sich vor, bei zu vielen Anfragen IP-Adressen zu blocken. Die minütliche Abfrage der API ist dabei noch im tolerierten Rahmen. Dennoch sollten Sie den Dienst nicht überstrapazieren und Spezialagentenregeln, die diesen Dienst nutzen, nach erfolgreichen Tests wieder löschen. Achten Sie besonders darauf, dass zum Test angelegte Regeln für die Zuordnung des Spezialagenten nur für einen Host greifen und nicht für Dutzende oder Hunderte! |
3.1. Vorbereitung der Umgebung
Wie im vorherigen Beispiel legen Sie als erstes die benötigten Dateiverzeichnisse an - diesmal mit der Benennung ometemp
anstelle von hellospecial
.
3.2. Der Spezialagent
Jetzt, wo echte Daten verarbeitet werden sollen, müssen Sie sich zudem einige Gedanken machen, beispielsweise zur Programmiersprache und der Vorverarbeitung.
Unser Beispiel fragt eine öffentliche API ab und erhält JSON-Daten.
Das könnte man in der Shell mit einem curl
-Kommando erledigen.
Da aber Checkmk ein gut ausgestattetes Python mitbringt, liegt es nahe, dieses zu verwenden.
Die nächste Entscheidung betrifft die Aufarbeitung der Daten. Sie können beispielsweise JSON-Daten einfach in die Agentenausgabe durchreichen oder aber im Spezialagenten bereits in ein Tabellenformat konvertieren. In der Praxis entscheiden Sie dies meist abhängig von Ihrer Arbeitsumgebung: Wie arbeitsteilig ist Ihre Check-Entwicklung gestaltet? Vereinfachen aufbereitete Daten die Entwicklung des zugehörigen agentenbasierten Check-Plugins? Oder machen sie diese sogar überflüssig? Letzteres ist dann der Fall, wenn Daten so aufbereitet werden können, dass sie mit einem vorhandenen Check-Plugin geparst werden können.
Unser Beispiel reicht die JSON-Antwort einfach durch.
Das Parsen findet dann im agentenbasierten Check-Plugin statt.
Die Übergabe von Längen- und Breitengrad erfolgt durch die Kommandozeilenargumente --latitude
und --longitude
.
Um Kommandozeilenargumente besser einlesen zu können, verwenden wir die Bibliothek argparse
.
Da Open-Meteo den Längen- und Breitengrad in die URL kodiert unterstützt, genügt eine URL mit Platzhaltern.
Probieren Sie diese URL mit Ihrem aktuellen Längen- und Breitengrad ruhig einmal im Browser aus.
#!/usr/bin/env python3
# Shebang needed this time to find the interpreter!
import requests
import argparse
url = "https://api.open-meteo.com/v1/forecast?latitude={lat:.4f}&longitude={long:.4f}¤t=temperature_2m"
parser = argparse.ArgumentParser("agent_ometemp")
parser.add_argument(
"--latitude",
help="Specify the latitude in degrees (decimal notation).",
type=float,
default=0.0)
parser.add_argument(
"--longitude",
help="Specify the longitude in degrees (decimal notation).",
type=float,
default=0.0)
args = parser.parse_args()
# print(url.format(lat=args.latitude, long=args.longitude))
response = requests.get(url.format(lat=args.latitude, long=args.longitude))
print('<<<ometemp:sep(0)>>>')
print(response.json())
![]() |
Zur Erinnerung: Dieses Skript darf keine Dateiendung haben. |
Die Agentensektion ometemp
enthält schlussendlich nur das empfangene JSON-Objekt.
Testen Sie den Spezialagenten, indem Sie ihn auf der Kommandozeile aufrufen.
OMD[mysite]:~$ ~/local/lib/python3/cmk_addons/plugins/ometemp/libexec/agent_ometemp --latitude 48.1305 --longitude 11.5953
Ihre Ausgabe auf der Kommandozeile sollte nun in etwa so aussehen:
<<<ometemp:sep(0)>>>
{'latitude': 48.14, 'longitude': 11.6, 'generationtime_ms': 0.01728534698486328, 'utc_offset_seconds': 0, 'timezone': 'GMT', 'timezone_abbreviation': 'GMT', 'elevation': 536.0, 'current_units': {'time': 'iso8601', 'interval': 'seconds', 'temperature_2m': '°C'}, 'current': {'time': '2025-01-09T12:45', 'interval': 900, 'temperature_2m': 9.8}}
3.3. Die Regelkonfiguration
Als nächstes folgt nun die Regelkonfiguration für den Agenten. Diese Regel wird, wenn sie fertig ist, in Setup > Agents > Other integrations in der Gruppierung Environmental angezeigt.
![]() |
Die Überschriften für die Gruppierung in Setup > Agents > Other integrations werden dynamisch sichtbar gemacht. D.h. Sie sehen die Gruppierung Environmental erst ab dem Zeitpunkt, wenn der erste darin einsortierte Spezialagent vorhanden ist. Eine – nicht abschließende – Übersicht nutzbarer Gruppierungen finden Sie unter Dateien und Verzeichnisse am Ende dieses Artikels. |
#!/usr/bin/env python3
# Shebang needed only for editors
from cmk.rulesets.v1.form_specs import Dictionary, DictElement, Float
from cmk.rulesets.v1.rule_specs import SpecialAgent, Topic, Help, Title
def _formspec():
return Dictionary(
title=Title("Open-Meteo temperature"),
help_text=Help("This rule is used to showcase a special agent with configuration."),
elements={
"latitude": DictElement(
required=True,
parameter_form=Float(
title=Title("Latitude in degrees (decimal notation)"),
),
),
"longitude": DictElement(
required=True,
parameter_form=Float(
title=Title("Longitude in degrees (decimal notation)"),
),
),
}
)
rule_spec_ometemp = SpecialAgent(
topic=Topic.ENVIRONMENTAL,
name="ometemp",
title=Title("Open-Meteo temperature"),
parameter_form=_formspec
)
Damit haben Sie auch diesen Spezialagenten geschaffen. Nun starten Sie den Webserver der Instanz neu:
OMD[mysite]:~$ omd restart apache
Auf Basis dieses Spezialagenten könnten Sie jetzt bereits eine Regel anlegen Add rule: Open-Meteo temperature. Viel macht diese Regel allerdings noch nicht. Sie enthält aktuell nur die beiden Felder für die Eingabe von Längen- und Breitengrad.
Erweiterung: Passwörter verwenden
In vielen Fällen sind Benutzername und Passwort oder ein API-Schlüssel zum Zugriff auf Daten notwendig.
Für die Verwaltung von Passwörtern stehen eigene formspec
-Elemente zur Verfügung.
Diese erlauben es, entweder Passwörter ad hoc zu definieren, oder auf den Passwortspeicher zuzugreifen.
Dazu können Sie in diesem Beispiel folgende Erweiterung des oben erstellten Skripts nutzen.
Erweitern Sie die erste Zeile um die zusätzlichen Variablen und fügen Sie die neuen Programmabschnitte ein:
from cmk.rulesets.v1.form_specs import Dictionary, DictElement, Float, String, Password, migrate_to_password
def _formspec():
return Dictionary(
# ...
elements={
# ...
"user": DictElement(
required=True,
parameter_form=String(
title=Title("User ID for login"),
prefill=DefaultValue("monitoring"),
),
),
"password": DictElement(
required=True,
parameter_form=Password(
title=Title("Password for this user"),
migrate=migrate_to_password,
),
),
}
)
Vergessen Sie nicht, nach der Erweiterung den Webserver der Instanz erneut zu starten.
Da beim Beispiel mit Open-Meteo kein Passwort erforderlich ist, zeigen wir hier zwar den prinzipiellen Umgang mit Passwörtern, übernehmen diese aber nicht in den API-Aufruf.
3.4. Die Aufrufkonfiguration
Als nächstes erweitern wir den neuen Spezialagenten so, dass er nicht nur den Längen- und Breitengrad enthält, sondern diesen auch weiterverarbeitet. Unser Ziel ist ja letztlich eine Auswertung der aktuellen Temperaturwerte für unseren Standort. Die folgende Konfiguration führt daher den auszuführenden Spezialagenten mit den aus der GUI – also aus unserem bislang bestehenden Regelteil – und aus den Standards bezogenen Einstellungen zusammen.
Die Werte für Längen- und Breitengrad, die Sie in der Regel angeben können, werden nun in das params
benannte Dictionary übertragen.
Gleichzeitig enthält das Objekt host_config
alle Host-spezifischen Einstellungen, die hier genutzt werden sollen.
So haben Sie zum Beispiel mit host_config.primary_ip_config.address
den Zugriff auf die primäre IP-Adresse, host_config.name
enthält den Host-Namen.
Beachten Sie bei der Übergabe an den Spezialagenten, dass der Aufruf über eine Shell erfolgt.
Die Liste der Aufrufparameter darf daher nur Strings enthalten.
Aus den Einstellungen werden hierbei Aufrufparameter, die in der Liste command_arguments
landen.
#!/usr/bin/env python3
# Shebang needed only for editors
from cmk.server_side_calls.v1 import noop_parser, SpecialAgentConfig, SpecialAgentCommand
def _agent_arguments(params, host_config):
args = [ "--latitude", str(params['latitude']), "--longitude", str(params['longitude']) ]
yield SpecialAgentCommand(command_arguments=args)
special_agent_ometemp = SpecialAgentConfig(
name="ometemp",
parameter_parser=noop_parser,
commands_function=_agent_arguments
)
Passwörter verwenden
![]() |
Das hier gezeigte Beispiel übergibt Passwörter im Klartext als Kommandozeilenargumente.
Ohne weitere Maßnahmen sind diese Passwörter beispielsweise aus der Prozesstabelle auslesbar.
Sie können die Angriffsfläche minimieren, indem Sie den Eintrag in der Prozesstabelle gleich beim Programmstart ändern.
Unter Python geht dies zum Beispiel mit dem Modul |
Da Passwörter als Objekt gespeichert werden, erfolgt der Zugriff über die Funktion unsafe()
dieses Objektes:
def _agent_arguments(params, host_config):
args = [
"--latitude", str(params['latitude']),
"--longitude", str(params['longitude']),
"--user", params['user'],
"--password", params['password'].unsafe()
]
yield SpecialAgentCommand(command_arguments=args)
3.5. Das Check-Plugin
Der Vollständigkeit halber zeigen wir hier noch das agentenbasierte Check-Plugin. Die Entwicklung dieser Plugins beschreibt der Artikel zu agentenbasierte Check-Plugins ausführlich.
Ein Unterschied zum dort erwähnten Beispiel ist hier die Übergabe der JSON-Rückgabe der REST-API:
Das Check-Plugin erhält die Agentensektion immer als zweidimensionale Liste („Liste von Listen“) von Strings.
Wir verwenden zuerst die itertools
, um aus dieser zweidimensionalen Liste eine eindimensionale zu machen.
Anschließend konkatenieren wir dieses resultierende Array mit Leerzeichen.
Dies konvertiert die gesamte Agentensektion in einen einzigen String.
Schließlich stellen wir sicher, dass einfache Anführungszeichen durch doppelte ersetzt werden, um mit json.loads()
den String direkt als Objekt laden zu können.
#!/usr/bin/env python3
from cmk.agent_based.v2 import AgentSection, CheckPlugin, Service, Result, State, Metric, check_levels
import itertools
import json
def parse_ometemp(string_table):
flatlist = list(itertools.chain.from_iterable(string_table))
parsed = json.loads(" ".join(flatlist).replace("'", "\""))
return parsed
def discover_ometemp(section):
yield Service()
def check_ometemp(section):
t = section['current']['temperature_2m']
if t < 0.0:
yield Result(state=State.CRIT, summary="Brrrrrr!")
elif t < 5.0:
yield Result(state=State.WARN, summary="It's getting cold...")
else:
yield Result(state=State.OK, summary="Nice here.")
return
agent_section_ometemp = AgentSection(
name = "ometemp",
parse_function = parse_ometemp,
)
check_plugin_ometemp = CheckPlugin(
name = "ometemp",
service_name = "Open Meteo temperature (2m)",
discovery_function = discover_ometemp,
check_function = check_ometemp,
)
Die in diesem Artikel beschriebenen Skripte für Spezialagent, Regelkonfiguration und Aufrufkonfiguration in Kombination mit diesem Check-Plugin sollten Ihnen nun einen funktionierenden Service in Checkmk liefern:

4. Fehler beheben
Auch bei der Entwicklung eigener Spezialagenten kann es (leider) zu Fehlern und Problemen kommen. Deren Ursachen zu lokalisieren ist dann ebenso wichtig wie die eigentliche Behebung.
4.1. Warnhinweise in der Service-Übersicht des Hosts
Wenn der Service Check_MK nach der Aktivierung des Spezialagenten plötzlich seinen Zustand auf WARN oder CRIT wechselt, sehen Sie sich die zugehörige Summary an.

Lässt die Summary auf einen Zusammenhang mit dem neuen Spezialagenten schließen, so prüfen Sie die Eigenschaften des Hosts. Für den Parameter Checkmk agent / API integrations muss der Wert Configured API integrations and Checkmk agent gewählt sein.

4.2. Die Regel ist verschwunden oder ein Warnhinweis ist sichtbar
Wenn Ihr Spezialagent nicht (mehr) in Checkmk unter Setup > Agents > Other integrations angezeigt wird, liegt möglicherweise ein Fehler in der
Regelkonfiguration (rulesets/special_agent.py
) vor.
Bei Nutzung einer der kommerziellen Editionen sehen Sie möglicherweise stattdessen einen roten Warnhinweis beim Versuch die Regel zu bearbeiten
oder eine neue zu erstellen.
Folgen Sie dem darin befindlichen Link zur Seite für den Absturzbericht.
Dort wird Ihnen die mögliche Problemursache anzeigt.
Lassen Sie sich dann die Fehlerbeschreibungen anzeigen:
OMD[mysite]:~$ tail -f var/log/web.log
Sie erhalten zum Beispiel eine Ausgabe wie diese:
2024-12-17 10:15:51,742 [40] [cmk.web 2669118] Error converting to legacy rulespec 'ometemp' : name 'migrate_to_password' is not defined
Überprüfen Sie die Syntax Ihrer Datei rulesets/special_agent.py
.
Kontrollieren Sie, ob Sie alle benötigten Bibliotheken berücksichtigt und alle Variablen importiert haben.
Schauen Sie nach, ob alle Einrückungen korrekt sind und überprüfen Sie die gesamte Syntax.
![]() |
War Ihre Regel vorher in Checkmk sichtbar und ist nun - nach einer Änderung an der Regelkonfiguration - plötzlich verschwunden, so bemerken Sie dies nur, wenn Sie bestehende Regeln anpassen oder neue Regeln erstellen wollen. Im Monitoring bestehender Services wird sich das Problem nicht auswirken. |
4.3. Fehlermeldung bei der Aktivierung von Änderungen
Möglicherweise gibt es auch ein Problem in der Aufrufkonfiguration oder am eigentlichen Spezialagenten. Dies wird zum Beispiel sichtbar, weil beim Activate changes ein gelber Warnhinweis angezeigt wird.
Überprüfen Sie dann die Datei server_side_calls/special_agent.py
entsprechend der Angaben aus der Fehlermeldung.
Behebt das den Fehler nicht, so können Sie wieder auf der Kommandozeile nach Fehlermeldungen suchen:
OMD[mysite]:~$ cmk -d localhost --debug | less
Sie bekommen - nach einem Augenblick Geduld - eine Ausgabe ähnlich der folgenden (gekürzte Fassung):
Traceback (most recent call last):
File "/omd/sites/devtest/bin/cmk", line 118, in <module>
exit_status = modes.call(mode_name, mode_args, opts, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/omd/sites/devtest/lib/python3/cmk/base/modes/__init__.py", line 70, in call
return handler(*handler_args)
^^^^^^^^^^^^^^^^^^^^^^
File "/omd/sites/devtest/lib/python3/cmk/base/modes/check_mk.py", line 562, in mode_dump_agent
for source in sources.make_sources(
^^^^^^^^^^^^^^^^^^^^^
File "/omd/sites/devtest/lib/python3/cmk/base/sources/_builder.py", line 407, in make_sources
return _Builder(
^^^^^^^^^
File "/omd/sites/devtest/lib/python3/cmk/base/sources/_builder.py", line 140, in __init__
self._initialize_agent_based()
File "/omd/sites/devtest/lib/python3/cmk/base/sources/_builder.py", line 198, in _initialize_agent_based
special_agents = tuple(make_special_agents())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/omd/sites/devtest/lib/python3/cmk/base/sources/_builder.py", line 187, in make_special_agents
for agent_data in special_agent.iter_special_agent_commands(agentname, params):
File "/omd/sites/devtest/lib/python3/cmk/base/server_side_calls/_special_agents.py", line 139, in iter_special_agent_commands
yield from self._iter_commands(special_agent, params)
File "/omd/sites/devtest/lib/python3/cmk/base/server_side_calls/_special_agents.py", line 115, in _iter_commands
for command in special_agent(processed.value, self.host_config):
File "/omd/sites/devtest/local/lib/python3/cmk_addons/plugins/ometemp/server_side_calls/special_agent.py", line 13, in _agent_arguments
"--user", params['bulla'],
~~~~~~^^^^^^^^^
KeyError: 'bulla'
Interessant sind nun vor allem die letzten Zeilen der Ausgabe:
In der Datei server_side_calls/special_agent.py
wird wohl versucht, auf ein Element des Dictionaries params
zuzugreifen, das nicht existiert.
4.4. Agentenausgabe überprüfen
Eine weitere Fehlerquelle kann es sein, dass Ihr Check-Plugin keine Daten ausgibt. Auch dies können Sie auf der Kommandozeile überprüfen:
OMD[mysite]:~$ cmk -d localhost --debug | less
Erhalten Sie hier statt eines Strings mit den aktuellen Messdaten eine Fehlermeldung, so nutzen Sie diese zur Korrektur.
5. Dateien und Verzeichnisse
5.1. Verzeichnisse
Pfad | Bedeutung |
---|---|
|
Basisverzeichnis zur Ablage von Plugin-Dateien. |
|
Ablageort für ausführbare Dateien. |
|
Ablageort für Regelsatzdateien. |
|
Ablageort für Dateien zur Aufrufkonfiguration. |
|
Ablageort für agentenbasierte Check-Plugins. |
|
Hier sind die mitgelieferten Spezialagenten installiert. |
|
Ablage der von Ihnen modifizierten Spezialagenten. |
|
Ablage von eigenen Programmen oder Skripten, die im Suchpfad sein sollen und ohne Pfadangabe direkt ausgeführt werden können. Ist ein Programm sowohl in |
5.2. Verfügbare Gruppierungen in Other integrations
Name | Bedeutung |
---|---|
|
Anwendungs-Monitoring |
|
Cloud-Monitoring |
|
Monitoring von Konfigurationsmanagementsystemen |
|
Monitoring von Datenbanken |
|
Alles, was nicht irgendwo anders reinpasst |
|
Monitoring von Umwelt und Umgebung |
|
Monitoring des Linux-Betriebssystems |
|
Netzwerk-Monitoring |
|
Monitoring von Middleware |
|
Monitoring von Benachrichtigungssystemen |
|
Betriebssystem-Monitoring allgemein |
|
Monitoring von Peripheriegeräten |
|
Monitoring der Stromversorgung |
|
Monitoring von Serverhardware |
|
Monitoring von Speichersystemen |
|
Synthetic Monitoring |
|
Monitoring von Virtualisierungsumgebungen |
|
Monitoring des Windows-Betriebssystems |