Auch Macintosh-Geräte lassen sich mit einigen Handgriffen an ein Nagios-/Icinga-Monitoringsystem anbinden. Dank der durch Freiwillige liebevoll gepflegten MacPorts können speziell für Mac OS X angepasste Pakete der OpenSource-Software NSCA (und deren Abhängigkeiten) installiert werden.
Eine für das Release passende Version der MacPorts muss installiert werden - hierüber gibt es eine sehr ausführliche Dokumentation auf der MacPorts-Präsenz: http://guide.macports.org/#installing.macports Die Installation ist recht unkompliziert - es muss lediglich das richtige DMG-Paket heruntergeladen und durch einen Doppelklick installiert werden.
NSCA benötigt libmcrypt, sofern eine Verschlüsselung verwendet werden soll (empfohlen). Ferner empfiehlt es sich die Nagios-Plugins zu installieren, um Checks durchzuführen. Die Installation erfolgt mithilfe des Port-Tools:
# sudo port install libmcrypt # sudo port install nagios-plugins # sudo port install nsca
Damit man send_nsca verwenden kann, wird die mitgelieferte Beispiel-Konfigurationsdatei kopiert und angepasst - insbesondere die Passwort- und Verschlüsselungsangaben müssen angepasst werden. Die Parameter müssen die gleichen wie im NSCA-Server sein:
# sudo mv /opt/local/etc/nsca/send_nsca.cfg.sample /opt/local/etc/nsca/send_nsca.cfg # sudo vim /opt/local/etc/send_nsca.cfg ... password=... encryption_method=... ...
Um nachher Ereignisse an Nagios/Icinga zu senden, kann man im Prinzip das Skript submit_check_result aus der Icinga-Dokumentation adaptieren und anpassen (da die Pfade für Mac OS X nicht stimmen):
#!/bin/sh # Arguments: # $1 = host_name (Short name of host that the service is # associated with) # $2 = svc_description (Description of the service) # $3 = state_string (A string representing the status of # the given service - "OK", "WARNING", "CRITICAL" # or "UNKNOWN") # $4 = plugin_output (A text string that should be used # as the plugin output for the service checks) # # Convert the state string to the corresponding return code return_code=-1 case "$3" in OK) return_code=0 ;; WARNING) return_code=1 ;; CRITICAL) return_code=2 ;; UNKNOWN) return_code=-1 ;; esac # pipe the service check info into the send_nsca program, which # in turn transmits the data to the nsca daemon on the central # monitoring server /usr/bin/printf "%s\t%s\t%s\t%s\n" "$1" "$2" "$return_code" "$4" | /opt/local/sbin/send_nsca -H central_server -c /opt/local/etc/nsca/send_nsca.cfg
Man kann sich natürlich auch einfach ein kleines Skript basteln, welches beispielsweise direkt nach dem Boot einen Check durchführt und diesen passiv an Nagios/Icinga weitergibt. Mit dem folgenden Skript überprüfe ich den freien Speicherplatz meines Macs und gebe das Ergebnis an Nagios/Icinga weiter:
#!/bin/sh WARNING=20 CRITICAL=10 HOSTNAME="mymac" NAGIOS="192.168....." SEND_NSCA="/opt/local/sbin/send_nsca" SEND_NSCA_CONF="/opt/local/etc/nsca/send_nsca.cfg" NAGIOS_PLUGINS="/opt/local/libexec/nagios" #*** CHECK DISK*** RESULT="$($NAGIOS_PLUGINS/check_disk -c $CRITICAL -w WARNING -p /)" /usr/bin/printf "%s\t%s\t%s\t%s\n" "$HOSTNAME" "FS: /" "$?" "$RESULT" | "$SEND_NSCA" -H "$NAGIOS" -c "$SEND_NSCA_CONF"
Getestet wurde das Ganze unter Mac OS X Lion - sollte auch auf anderen Versionen so funktionieren, sofern die Nagios-Plugins und NSCA über die MacPorts installiert wurden. Das Skript verwendet einige Variablen, die an die eigenen Bedürftnisse angepasst werden können:
Die Ausführung des Skripts kann beispielsweise mit einem Cronjob gesteuert werden - für den Start nach dem (Re)boot steht der Alias @reboot zur Verfügung.
Alternativ kann man sich auch einen Cronjob für root bauen, der alle 2 Stunden dieses Skript ausführt:
# sudo crontab -e * */2 * * * /opt/icinga_inventory.sh