Einbindung in Icinga / Nagios
Das Plugin check_snmptraps.pl
Mit dem neuen Plugin, kann nach bestimmten Traps in der DB gesucht und alarmiert werden! Auch die Ausgabe der Message von einem Trap ist möglich.
Vorrausetzung:
Installation des Perl-Moduls DBI
Installation:
Kopiert das Plugin Euer libexec-Verzeichnis von Icinga oder Nagios. Damit sich das Plugin nun noch Eure DB verbinden kann, müsst Ihr noch folgende Parameter im Plugin anpassen:
my $dbHost = "localhost"; my $dbName = "snmptt"; my $dbUser = "root"; my $dbPass = ""; my $dbTable = "snmptt";
Das wars!
Aufruf des Plugins:
-H (--hostname)
Host der in der DB auf Traps geprüft werden soll
-C (--category)
Kategory vom SNMP-Trap (optional)
-O (--oid)
OID vom SNMP-Trap (optional)
-w (--warning)
Prüft nur nach warning Traps in der Datenbank
-c (--critical)
Prüft nur nach critical Traps in der Datenbank
-u (--unknown)
Prüft nur nach unknown Traps in der Datenbank
(Default ist die Option -w, -c und -u gesetzt)
-r (--read)
Prüft auch Trap in der Datenbank, die als gelesen markiert sind
-m (--message)
Gibt die Message des letzten warning, critical und unknown Traps in der DB aus
Diese Option benötigt die Option -w, -c oder -u
-t (--timeout)
Zeit in Sekunden, bevor das Plugin abbricht(default=15)
-V (--version)
Plugin version
-h (--help)
Diese Hilfe
Ein Aufruf des Plugins kann folgendermaßen aussehen:
./check_snmptraps.pl -H srv_tes_02 -m -c
Ausgabe:
CRITICAL - 1 critical Trap: This was only a test message for NagTrap|'critical trap='1;;;;
oder
./check_snmptraps.pl -H srv_tes_02 -m -c -O '.1.3.6.1.4.1.10418.2.1.3.0.27'
Ausgabe:
CRITICAL - 1 critical Trap: This was only a test message for NagTrap|'critical trap='1;;;;
usw. Derzeit ist es noch nicht Möglich Schwellwerte mit zu übergeben!
Das Plugin check_snmp_traps
Zum auslesen der in der Datenbank gespeicherten Traps ist das Plugin check_snmp_traps zuständig. check_snmp_traps wird bei den anderen Plugins im Verzeichnis libexec abgelegt.
Das Plugin ist ein Bash Script. In den ersten Zeilen muss daher der zu verwendende DB User mit Passwort eingetragen werden.
#!/bin/bash #set -xv # # Script zum prüfen der SNMPTT Datenbank. # # #set -xv MYSQL=/usr/bin/mysql MYSQL_USER=snmptt MYSQL_DB=snmptt MYSQL_PASS=snmptt ....
Danach kann das Plugin als Benutzer icinga oder nagios gestestet werden.
check_snmp_traps -H <ip-adresse oder hostname>
Ob der Hostname oder die IP Adresse angegeben werden muss, ist davon abhängig wie das Feld „hostname“ in der Datenbank gefüllt wird. Dies ist abhängig von den Einstellungen in der snmptt.ini.
Icinga / Nagios Service Extinfo
Die Icinga / Nagios Service Extinfo sollte so aussehen:
define serviceextinfo {
host_name < NAGIOS HOST >
service_description SNMP Alerting
notes SNMP Alerts
notes_url http://<servername>/nagios/nagtrap/index.php?hostname=$HOSTADDRESS$
}
Für Icinga:
define serviceextinfo {
host_name < ICINGA HOST >
service_description SNMP Alerting
notes SNMP Alerts
notes_url http://<servername>/icinga/nagtrap/index.php?hostname=$HOSTADDRESS$
}
Einbindung in Icinga Classic UI
Hinweis:
Sollte der Icinga vom Standardpfad (/usr/local/icinga) abweichen, so muss dieser angepasste werden!
Um einen Link im Icinga anzulegen, muss folgende Datei editiert werden:
/usr/local/icinga/share/menu.html
Hier nun folgende Zeilen einfügen:
<h2>AddOn's</h2> <ul> <li class="menuli_style1"><a href="/icinga/nagtrap/index.php" target="main">NagTrap</a></li> </ul>
Vorher:
<h2>Configuration</h2>
<ul>
<li class="menuli_style1"><a href="/icinga/cgi-bin/config.cgi" target="main">View Config</a></li>
</ul>
</div>
</body>
</html>
Nachher:
<h2>Configuration</h2>
<ul>
<li class="menuli_style1"><a href="/icinga/cgi-bin/config.cgi" target="main">View Config</a></li>
</ul>
<h2>AddOn's</h2>
<ul>
<li class="menuli_style1"><a href="/icinga/nagtrap/index.php" target="main">NagTrap</a></li>
</ul>
</div>
</body>
</html>
Einbindung in Nagios
Hinweis:
Sollte der Nagios vom Standardpfad (/usr/local/nagios) abweichen, so muss dieser angepasste werden!
Um einen Link im Nagios z.B. in dem Bereich System anzulegen, muss folgende Datei editiert werden:
/usr/local/nagios/share/side.php
Hier nun folgende Zeile einfügen:
<li><a href="/nagios/nagtrap/index.php" target="<?php echo $link_target;?>">NagTrap</a></li>
Vorher:
<div class="navsection"> <div class="navsectiontitle">System</div> <div class="navsectionlinks"> <ul class="navsectionlinks"> <li><a href="<?php echo $cfg["cgi_base_url"];?>/extinfo.cgi?type=3" target="<?php echo $link_target;?>">Comments</a></li> <li><a href="<?php echo $cfg["cgi_base_url"];?>/extinfo.cgi?type=6" target="<?php echo $link_target;?>">Downtime</a></li> <li><a href="<?php echo $cfg["cgi_base_url"];?>/extinfo.cgi?type=0" target="<?php echo $link_target;?>">Process Info</a></li> <li><a href="<?php echo $cfg["cgi_base_url"];?>/extinfo.cgi?type=4" target="<?php echo $link_target;?>">Performance Info</a></li> <li><a href="<?php echo $cfg["cgi_base_url"];?>/extinfo.cgi?type=7" target="<?php echo $link_target;?>">Scheduling Queue</a></li> <li><a href="<?php echo $cfg["cgi_base_url"];?>/config.cgi" target="<?php echo $link_target;?>">Configuration</a></li> </ul> </div> </div>
Nachher:
<div class="navsection"> <div class="navsectiontitle">System</div> <div class="navsectionlinks"> <ul class="navsectionlinks"> <li><a href="<?php echo $cfg["cgi_base_url"];?>/extinfo.cgi?type=3" target="<?php echo $link_target;?>">Comments</a></li> <li><a href="<?php echo $cfg["cgi_base_url"];?>/extinfo.cgi?type=6" target="<?php echo $link_target;?>">Downtime</a></li> <li><a href="<?php echo $cfg["cgi_base_url"];?>/extinfo.cgi?type=0" target="<?php echo $link_target;?>">Process Info</a></li> <li><a href="<?php echo $cfg["cgi_base_url"];?>/extinfo.cgi?type=4" target="<?php echo $link_target;?>">Performance Info</a></li> <li><a href="<?php echo $cfg["cgi_base_url"];?>/extinfo.cgi?type=7" target="<?php echo $link_target;?>">Scheduling Queue</a></li> <li><a href="<?php echo $cfg["cgi_base_url"];?>/config.cgi" target="<?php echo $link_target;?>">Configuration</a></li> <li><a href="/nagios/nagtrap/index.php" target="<?php echo $link_target;?>">NagTrap</a></li> </ul> </div> </div>