Inhaltsverzeichnis

Mac passiv überwachen 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.

Voraussetzungen

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.

Installation

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

Konfiguration

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=...
...

Skript-Wrapper

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

Inventory beim Boot

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