Schon seit längerer Zeit hatte ich eine Idee im Hinterkopf, einen speziellen Nagios-Check zu schreiben, der das Ergebnis eines anderen Checks invertiert, d.h. meldet der Check “OK”, ist das Ergebnis “Critical” und umgekehrt. “Unknown” und “Warning” bleiben erhalten.
Dieser Check war zum Beispiel dafür gedacht, dass ein Router sich, wenn eine Standleitung ausfällt, über eine alternative Verbindung einwählt. Diese soll aber, wenn sie nutzungsabhängige Kosten verursacht, nicht ständig aufgebaut sein. Es ist also ein Ping-Check nötig, der dann alarmiert, wenn die Verbindung aufgebaut ist. Ein anderes Beispiel ist, dass man auf einem SSH-fähigen Cisco-Router sicherstellen möchte, dass telnet deaktiviert ist.
Jetzt habe ich festgestellt, dass ich nicht der einzige mit dieser Idee war, und sie offenbar schon vor einiger Zeit in dem “negate“-Check umgesetzt wurde. Dieser macht genau das oben beschriebene, und kann zusätzlich noch im Ergebnis die Zeichenketten “OK” und “WARNING” entsprechend ersetzen.
Hier ein Konfigurationsbeispiel. Man nimmt die ursprüngliche Konfiguration, um Telnet zu checken:
define command{ command_name check_telnet command_line /usr/lib/nagios/plugins/check_tcp -H '$HOSTADDRESS$' -p 23 }
Vor die command_line stellt man dann das negate-Plugin:
define command { command_name check_telnet_disabled command_line /usr/lib/nagios/plugins/negate /usr/lib/nagios/plugins/check_tcp -H '$HOSTADDRESS$' -p 23 }
Und fertig ist ein Check-Command, das Alarm gibt, sobald Telnet aktiviert ist.