Konfiguration und Beispiel für remote-Zugriff auf icinga-Instanzen

 

Wir haben einige Systeme mit icinga aufgesetzt und eine einfache Möglichkeit verwendet, remote auf Daten eines icinga-Systems zuzugreifen.

Mit icinga und Livestatus können z.B. remote Checkergebnisse ausgelesen oder auch Kommandos abgesetzt werden. Livestatus war auch schon für Icinga 1 und Nagios verfügbar, mit icinga ist es aber deutlich einfacher aufzusetzen und zu konfigurieren.

Dank des Debian-Backports-Projektes ist icinga unter Debian 7 (wheezy) verwendbar, wenn in der sources.list backports aktiviert wird:

deb http://http.debian.net/debian wheezy-backports main

Nach der Installation und Konfiguration von icinga kann livestatus aktiviert werden:

icinga-enable-feature livestatus

Die Konfiguration von livestatus wird in /etc/icinga/features-available/livestatus.conf erweitert, um Zugriff nicht nur per Unix-Socket, sonder auch per TCP zu erlauben:

object LivestatusListener "livestatus-tcp" {
  socket_type = "tcp"
  bind_host = "0.0.0.0"
  bind_port = "6666"
}

Neustart und Test:

service icinga restart
echo -e 'GET services\n' | netcat 0 6666

Ein Auszug aus einem kleinen Python-Skript, um remote zu prüfen, ob alle Services OK sind:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall("GET services\nColumns: host_alias description plugin_output last_check state\n\n")
     
services = s.makefile()
for service in services:
  (host_alias, description, output, last_check, state) = service.rstrip("\n").split(";")

Die Ausgabe sieht z.B. so aus, wenn ein Service nicht OK ist:

mailserver ping6 CRITICAL - Network Unreachable (2001:1234:1234:1234::1) (checked 28 seconds ago)
1 services not OK.

 

Icinga: livestatus über TCP