Wir haben in den letzten Monaten viele Komponenten von icinga intensiver benutzt und sind besonders von der API begeistert.

Damit ist es unter anderem einfach möglich, einen hochverfügbaren Cluster aus mehreren icinga-Servern zu betreiben, dessen Konfiguration zur Laufzeit geändert werden kann.

Beim Ausfall eines Cluster-Knotens migrieren die Checks auf andere Knoten des Clusters und – nach Recovery des ausgefallenen Knotens – auch wieder zurück.

Die API wird sowohl intern für die Cluster-Kommunikation verwendet, als auch, um dynamische Konfigurationsänderungen vorzunehmen, die sofort im Cluster sichtbar sind. Auch ist es darüber einfach möglich, den Zustand des icinga-Systems abzufragen, was wir früher gerne mit Livestatus gemacht haben. Die API steht auch bei normalen icinga-Instanzen zu Verfügung, nicht nur in einem HA-Cluster.

Die Dokumentation ist sehr umfangreich, deswegen veröffentlichen wir hier einige kurze Beispiele, die die Mächtigkeit der API demonstrieren.

Einen neuen Host anlegen:

curl -k -s -u icinga:icinga -H 'Accept: application/json' -X PUT 'https://localhost:5665/v1/objects/hosts/8.8.8.8' -d '{ "attrs": { "address": "8.8.8.8", "check_command": "hostalive" } }'

Die konfigurierten Hosts auslesen:

curl -k -s -u icinga:icinga 'https://localhost:5665/v1/objects/hosts' | python -m json.tool

Einen neuen Service mit Parametern anlegen:

curl -k -s -u icinga:icinga -H 'Accept: application/json' -X PUT 'https://localhost:5665/v1/objects/services/8.8.8.8!ping' -d '{ "templates": [ "generic-service" ], "attrs": { "check_command": "ping", "check_interval": 3,"retry_interval": 1 } }'

Den Cluster-Status auslesen:

curl -k -s -u icinga:icinga 'https://localhost:5665/v1/status/ApiListener'  | python -m json.tool


Diese Beispiele lassen sich sehr schön mit den JSON-Libraries der Lieblingsprogrammiersprache verwenden, so daß vollständig dynamische Konfiguration und Abfrage von icinga möglich ist.

Mit Werkzeugen zur automatisierten Systemkonfiguration wie z.B. Ansible oder Puppet lässt sich mit Hilfe der icinga-API die icinga-Konfiguration vollautomatisch erledigen. Gerade wenn es darum geht, einen Monitoring-Cluster zu konfigurieren, ist die Kombination aus Ansible bzw. Puppet und der icinga-API sehr mächtig.

Die Icinga API