Archives For Plugins

Ich bin in letzter Zeit vermehrt über Plugins gestolpert, die fehlerbehaftet waren und somit ganz interessante Situationen hervorrufen könnten oder teilweise auch getan haben. Diese will ich nun aufzeigen und anhand der Nagios Plug-in Development Guidelines zeigen wie es richtig geht.

Fall 1: Das “immer OK”-Plugin
Zur Überwachung des Logins auf eine wichtige Webanwendung kommt ein selbst geschriebenes Plugin zum Einsatz. Nachdem ich bei einer Migration immer alle Plugins in der Shell teste, fällt mir auf das Plugin gibt “Critical: …” aus. Erster Gedanke ist natürlich: “Ok, ich komm von einer anderen IP-Adresse, liegt es daran?” Also flink ins Webinterface des Altsystems geschaut und siehe an, dort ist alles grün und zwar seit über zwei Jahren. Allerdings wenn ich mir die Ausgabe anschaue steht da auch “Critical: …”!
Der Fall ist schnell gelöst, im Quelltext steht am Ende ein für die Ausgabe verantwortliches IF-Konstrukt, aber in keinem der Zweige gibt es ein exit, also ist der Rückgabewert des Plugins der des letzten Kommandos. Nun ja, echo schlägt wohl nie fehl und darum ist der Rückgabewert 0, was Nagios als OK interpretiert.
Als Lösung importierte ich die Datei utils.sh aus den Nagios-Plugins und füge ein exit STATE_OK bzw. STATE_CRITICAL ein.

Fall 2: Das “Warum UNKNOWN?”-Plugin
Dieser Fall schlägt in die gleiche Kerbe wie der vorherige. Diesmal wurde das Plugin in vollstem Vertrauen aus dem Internet besorgt, der Status war aber plötzlich UNKNOWN und ohne eine Ausgabe im Webinterface.
Hier reicht für die Lösung des Falls einmal Ausführen in der Kommandozeile. Das Plugin stirbt einen grausamen Tod, wenn es keine Verbindung aufbauen kann und gibt seinen Todesschrei auf STDERR aus.
Die Lösung ist wieder genauso simpel. utils.pm importiert, die "Todesschrei" durch print "Critical: Todesschrei" and exit $ERRORS{'OK'} ersetzt.

Fall 3: Die “Kein Graph”-Plugins
Wenn ein Plugin keine Performance-Daten liefert, ist recht schnell geklärt warum kein Graph gezeichnet wird. Sobald da aber was hinter der Pipe steht beim Ausführen auf der Kommandozeile oder gar im Webinterface als Performance-Daten angezeigt wird, erwartet man einfach eine graphische Aufbereitung.
Im Falle 3a war ganz offensichtlich, dass diese Ausgabe nicht für Nagios gedacht ist und ein Blick auf die ausführliche Hilfe offenbart einen Parameter zum Umschalten des Formats. Wäre dann noch Fall 3b und 3c hier kann ich den Fehler nicht auf den ersten Blick erfassen, also Guidelines auf. Mit dem Vergleich wird der jeweilige Fehler offensichtlich. In dem einen Fall ist das Label nicht einfache Hochkommas eingefasst obwohl es ein Leerzeichen enthält, im andere sind die verschiedenen Werte statt durch Leerzeichen durch Semikolon getrennt und somit werden die Werte als Warning- und Critical-Wert des ersten interpretiert.
Da es sich um Bash bzw. Perl handelt ist, ist dies natürlich auch schnell gefixt.

Fall 4: Das “4 von 5″-Plugin
Fünf identische Systeme, bei vieren laufen alle Plugins sauber, beim fünften bleibt eines permanent auf unknown. Mögliche Fehlerursache laut des Verantwortlichen ist die neuere Firmware und damit fehlende OID in SNMP.
Zwar halte ich dies für möglich, da man Hardwareherstellern nach einer Weile alles zutraut, doch überzeuge ich mich lieber selbst. Und siehe da ein snmpwalk liefert auf alle Systemen die OID nicht, gut nun bin ich verwirrt. Also snmpwalk mit Angabe der OID und siehe da plötzlich bekomme ich bei beiden getesten Systemen eine Antwort. In vollster Verwirrung und Unglaube führe ich das Plugin nochmal aus und bekomme diesmal auch eine Antwort. Da ich nur an 0 und 1 in der IT glaube und 0,5 nicht gelten lasse, probiere ich das Plugin noch öfter. Nachdem sich ein lustiger Blinkereffekt zeigt, setze ich den Timeout auf zehn Sekunden statt dem Default von einer Sekunde. Und somit ist auch dieses Rätsel gelöst, das neue System lässt die gleichen Abfragen zu, ist allerdings nur mit größerer Latenz zu erreichen.
Zwar meckere ich warum der Standard-Timeout so niedrig ist und der Timeout nicht in der Ausgabe erscheint, aber sonst kann man nicht meckern denn einen sauberen Timeout-Mechanismus zu implementieren gehört auch zu den Guidelines.

Noch viele andere interessante Dinge sind in den Guidelines geregelt, beispielsweise wie die Warning- und Critical-Bereichsangaben zu interpretieren sind, welche Optionen vorhanden sein sollten oder wie verbose denn verbose sein sollte. Darum meine Bitte: Lieber Entwickler, lest euch die Guidelines durch bevor ihr Plugins entwickelt! Das schont nicht nur meine Nerven und die der Kollegen, sondern sorgt auch für Kompatibilität zu Graphing-Lösungen wie PNP4Nagios und Ingraph oder interessanten Komponenten wie Check-multi, die diese Standards brauchen und recht wenig Spielraum haben um diese zu interpretieren.

64.thumbnail Nagios Plug in Development Guidelines oder warum tut mein Plugin nicht wie es soll?

Autor: Dirk Götz

Dirk ist Red Hat Spezialist und arbeitet bei NETWAYS im Bereich Consulting für Icinga, Nagios, Puppet und andere Systems Management Lösungen. Früher war er bei einem Träger der gesetzlichen Rentenversicherung als Senior Administrator beschäftigt und auch für die Ausbildung der Azubis verantwortlich.

Mit der Idee zu einem überaus nützlichen Plugin trat kürzlich unser Kunde Perdata an uns heran. Das Plugin für Icinga und Nagios sollte Performancedaten zur Anzahl der gegenwärtig offenen Host- und Service-Probleme liefern und bei Überschreiten einer bestimmten Anzahl von Problemen auch entsprechende Benachrichtigungen auslösen können. Das Ziel dahinter ist klar: erstens kann man sich so historisch schön darstellen, wie sich die eigenen “Probleme” entwickelt haben. Und zweitens erhält man eine Benachrichtigung, wenn neue Probleme im alltäglichen Grundrauschen untergehen und sich zu lange keiner darum kümmert.

Die Performancedaten wurden aufgeschlüsselt in offene Probleme, solche die acknowledged wurden sowie Downtimes. Die “konfigurierbare Anzahl” wurde zugunsten einer Mindestdauer verworfen, das Plugin ändert seinen eigenen Zustand also nach dem Zustand des “schlimmsten” Problems, um das sich nach entsprechend verstrichener Zeit noch keiner kümmert.

Der Aufruf ist relativ simpel, und das Plugin “erklärt” sich im Grunde selbst:

Options:
check_open_problems.pl -H <db_host> -U <db_user> -P <db_pass> -...

-H|--host
Database Host, default is 'localhost'

-U|--user
Database user, default is 'icinga'

-P|--pass
Database password, default is 'icinga'

-B|--blacklist
Blacklisted service names, comma-separated. Default: 'Open problems'

-M|--min-duration
Ignore problems lasting less than min-duration seconds. Default: 0

Beachtung verdient der Blacklist-Parameter. Er sollte dem Namen entsprechen, der als Service-Bezeichner für dieses Plugin vergeben wurde. Nur so hat das Plugin eine Chance, seinen eigenen Zustand ignorieren zu können. In der ersten Zeile zeigt die Ausgabe den aktuellen Zustand und eine Zusammenfassung der zugehörigen Stati an:

[CRITICAL] Hosts: 8x DOWN, 1x UNREACHABLE – Services: 6x acknowledged
Anschließend werden im "long-output" die neuesten Host-Probleme angezeigt, davon aber immer nur die letzten 5:

Host problems: gmx-www (19.08. 20:48), google-www (19.08. 20:48),
 web_de-www (19.08. 20:48), yahoo-www (19.08. 20:48), ...

Darunter stehen dann zudem noch die neuesten Service-Probleme samt gekürztem Output. Das fertige Plugin ist wie üblich auf Monitoring Exchange verfügbar und steht unter git.netways.org in der aktuellsten Version zum Download bereit. Viel Freude mit dem Plugin - und an Perdata nochmals ein herzliches Dankeschön für die gute Idee und das Sponsern der Entwicklung!

33.thumbnail check open problems   Alles bunt und doch im Griff

Autor: Thomas Gelf

Der gebürtige Südtiroler Tom arbeitet als Consultant für Systems Management bei NETWAYS und ist in der Regel immer auf Achse: Entweder vor Ort bei Kunden, als Trainer in unseren Schulungen oder privat beim Skifahren in seiner Heimatstadt Bozen. Neben Icinga und Nagios beschäftigt sich Tom vor allem mit Puppet.

(this is a cross-post with my private blog, you will find there the English version of this post)

oder: Frameworking falsch gemacht

Ich bin diese Woche bei einem Kunden auf etwas interessantes gestoßen. Einige Plugins für Icinga verursachten enorme CPU Last, sobald ein paar Checks gleichzeitig gestartet sind waren beide CPUs der VM auf 80-90%.

Als ich mir die Plugins angeschaut habe fand ich seltsamen PHP Code, sah ungefähr so aus:

<?php
require_once('phplib/Framework.php');
if(!FRAMEWORK_LOADED) Framework::initialize();
CheckLicenseManager::run();

So auf den ersten Blick wirkt es ja nicht mal schlecht, da wird halt ein Framework geladen, dass die jeweiligen Klassen bereitstellt und dann wird die jeweilige Klasse “ausführt”. Das Framework selbst bestand aus mehreren PEAR Klassen und selbst geschriebenen Klassen die die jeweiligen Checks implementieren.

Das faszinierende an der Geschichte war jedoch dass das Plugin knapp 6 Sekunden dafür gebraucht hat die “–help” Ausgabe zu liefern, die eigentliche Funktion des Plugins ist in unter einer Sekunde fertig.

Ein strace des Skripts brachte dann das Problem recht schnell ans Tageslicht: das Framework tut nichts anderes als per PHP-Autoloadfunktion sämtliche PHP Dateien und Klassen im Verzeichnis zu laden, was ca. 90 Stück waren.

Ich erklärte dem Kunden das Problem, und dass ich wohl keine direkte Lösung anbieten könnte, außer eben die paar Plugins neu zu schreiben. Das machte ich dann auch und dem Server war wieder langweilig.

Ein paar Regeln für Icinga Plugins (die ich für mich gesetzt habe):

  • Keep it simple ™
  • Ordentlich kommentieren
  • eine verständliche –help Ausgabe mit Beispielen
  • bei komplexen Plugins: Verbose und Debug Funktionen für spätere Probleme und Tests
  • Möglichst in Perl oder Shell schreiben um weniger Abhängigkeitsprobleme zu haben
  • und last but not least:
    Wenn möglich veröffentlichen, denn dafür gibt’s monitoringexchange.org, denn irgendjemand kann es sicher auch gebrauchen!  icon wink Wie man ein Icinga Plugin nicht schreiben sollte
56.thumbnail Wie man ein Icinga Plugin nicht schreiben sollte

Autor: Markus Frosch

Markus arbeitet bei NETWAYS als Senior Consultant und unterstützt Kunden bei der Implementierung von Nagios, Icinga und anderen Open Source Systems Management Tools. Neben seiner beruflichen Tätigkeit ist Markus aktiver Mitarbeiter im Debian Projekt.

camera Weekly Snap: UNetbootin, Python Futures, AKCP sensors & Check Interfaces16 – 20 April got into the spring mood with ideas for data centers, live USB drives, and check plugin updates.

Starting with tips, Thilo recommended UNetbootin for no-fuss live USB drives, and Gunnar played with the “futures” feature in Python 3.2.

Georg got ready for warmer temperatures reviewing AKCP environment sensors for data centers, while Lennart announced version 1.2 of the check_interfaces plugin with two new features, ready for download on www.netways.org.

To end the week, Eva offered last minute tickets to our Open Source Data Center Conference that sold out just two days later. We look forward to seeing you for the kick off on Wednesday!

20.thumbnail Weekly Snap: UNetbootin, Python Futures, AKCP sensors & Check Interfaces

Autor: Amanda Mailer

Amanda unterstützt das NETWAYS Team im Bereich Marketing und da vor allem bei allen englischen Aktivitäten. Als Australierin mit einem deutschen Mann verheiratet, fällt ihr das auch besonders leicht. Neben NETWAYS arbeitet sie auch im Icinga Team mit.

camera Weekly Snap: Averting Java Plugins, Playing with HTML 5 & Hooks30 Jan – 3 Feb turned over a new month with expo reflections, an OSDC program, and a nifty Java idea for Icinga/Nagios plugins – all topped off with our 100th development blog post.

Bernd brought home a few impressions from his visit to the Cloud Expo Europe in London and Lennart found a way around writing Java plugins for Icinga / Nagios.

From the development team, Angsar toyed with the idea of programming games in HTML5 while Marius showed how to add hooks in Perl to make patching vendor code a little easier.

Pamela closed the Open Source Data Center conference Call for Papers, and announced the preliminary program of speakers. She also reminded early birds to get in before  15 February for special conference rates.

20.thumbnail Weekly Snap: Averting Java Plugins, Playing with HTML 5 & Hooks

Autor: Amanda Mailer

Amanda unterstützt das NETWAYS Team im Bereich Marketing und da vor allem bei allen englischen Aktivitäten. Als Australierin mit einem deutschen Mann verheiratet, fällt ihr das auch besonders leicht. Neben NETWAYS arbeitet sie auch im Icinga Team mit.

Page 1 of 51234...>>