06 September 2013

Monitoring des Puppet-Agent mit Hilfe eines NRPE-Plugins

Beim Einsatz von Puppet und einer Monitoring-Infrastruktur macht es Sinn, regelmäßig zu prüfen, ob der Puppet-Agent auf allen Clients erfolgreich lief. Dies ist auf den jeweiligen Clients mit einem NRPE-Skript einfach möglich.

Puppet ermöglicht die zentrale Konfiguration auch sehr komplexer Infrastrukturen und erfreut sich einer steigenden Beliebtheit. Ebenso ist das Überwachen der Funktionalität der eigenen Infrastruktur mit Hife von Icinga üblich. So unterstützen wir mehrere Kunden beim Einsatz genau dieser kombinierten Lösung.

Da liegt es auf der Hand, die Funktionalität und den erfolgreichen Lauf von Puppet mit Hilfe des Monitoring zu überwachen. Da der Puppet-Agent auf den Clients läuft, liegt es nahe, die Überwachung dort mit Hilfe von eines NRPE-Plugins anzusetzen. Der Puppet-Anget schreibt verschiedene Status-Informationen in die Datei /var/lib/puppet/state/last_run_summary.yaml, die sich einfach prüfen lässt. Allerdings muss dabei berücksichtigt werden, dass die Yaml-Datei auch geschrieben wird, wenn der Lauf erfolglos war – es muss also auch der Inhalt der Datei geprüft werden, um zu prüfen, ob der Lauf erfolgreich war und ob der Lauf in den letzten X Minuten erfolgte und nicht schon Tage her ist.

Dazu gibt es bereits einige Tests, die aber nicht unseren Ansprüchen genügten. Nur den Zeitstempel der Datei zu prüfen reicht nicht, da wie erwähnt die Datei auch dann geschrieben wird, wenn der Puppet-Katalog nicht erfolgreich runtergeladen wird. Ein anderes Skript baut auf einer reinen Validitätsprüfung der Yaml-Struktur auf, und prüft nicht, ob Puppet eventuell einfach geraume Zeit gar nicht lief. Ein anderes Skript komplett in Bash geschrieben prüft zwar sowohl den Zeitstempel in der Datei als auch so weit möglich weitere Einträge in der Yaml-Datei, ist aber aufgrund der beschränkten Möglichkeiten von Bash nur unübersichtlich erweiterbar und kann keine echte Syntaxprüfung der Yaml-Datei vornehmen.

Vor diesem Hintergrund haben wir ein eigenes Skript entwickelt, dass von den oben genannten Lösungen inspiriert wurde, aber sowohl den Zeitstempel ausliest wie auch die Validität der Yaml-Status-Datei prüft. Es lässt sich auf der Kommandozeile testen:

# Default run
$ sudo /usr/local/lib/nagios/plugins/check_puppetagent -w 3600 -c 9000
OK: Puppet was last run 13 minutes and 21 seconds ago
 
# Last run too old
$ sudo /usr/local/lib/nagios/plugins/check_puppetagent -w 30 -c 90
CRIT: Puppet was last run 14 minutes and 30 seconds ago

Das Script steht unter der MIT-Lizenz und wurde unter Debian und Ubuntu unter Python 2.7 getestet. Es ist auch auf Monitoringexchange.org verfügbar. Für die Zukunft wäre es möglich, das Skript noch andere Inhalte der Datei auswerten zu lassen und z.B. bei einem Failcount in der Datei die Zahl der Fehler direkt an das Monitoring zurückgeben zu lassen.

 

Dieser Artikel wurde ursprünglich geschrieben von Roland Wolters.

Kategorien: HowTos
Tags: Monitoring Puppet

SH

über den Autor

Sascha Heuer


Beitrag teilen: