SNMP
SNMP-Zweig durchsuchen mit SNMPWalk:
snmpwalk -v1 -c public HostnameoderIP .system
SNMP-Server installieren
apt-get install snmpd snmp
die Datei /etc/snmpd.conf wie folgt konfigurieren:
- snmp.conf
...
#agentAddress udp:127.0.0.1:161
syslocation Serverraum
syscontact Sysadmin (argus@my.domain)
rocommunity public 127.0.0.1
rocommunity public 192.168.1.0/24
#hier kommt der benutzerdefinierte Befehl z.B
exec check_temperatur /usr/local/bin/Temperatur
...
anschließend musß der Dienst neu gestartet werden.
/etc/init.d/snmpd restart
Bei einer Debianinstallation muss aus der Datei /etc/default/snmpd der Eintrag SNMPDOPTS geändert werden.
Die IP 127.0.0.1 muss gelöscht werden, damit der Dienst auch auf der normalen IP hört. Ein Neustart des Dienstes ist danach erforderlich.
Die Rückgabe des Befehls kann über diverse SNMP-Tools anschließend z.B. so ausgelesen werden:
snmpwalk -v1 -c public meinserver .1.3.6.1.4.1.2021.8.1.101
Um z.B. die Temperatur über eine Webseite auszugeben muss man eine Webseite im cgi-bin-Verzeichnis erstellen und berechtigen:
- gettemp.cgi
#-----------------------------------
#!/usr/bin/perl.
#Temperatur auslesen
use strict;
use CGI::Carp qw(fatalsToBrowser);
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//DE">', "\n";
my $Output1 = qx(/usr/bin/snmpwalk -v1 -c public srv1 .1.3.6.1.4.1.2021.8.1.101| cut -f4 -d':');
print "<html><body><h1>Raumtemperaturen</h1><hr><table border=1> ";
print "<tr><td>Serverraum1</td><td>srv1</td><td> $Output1 ° C</td></tr>";
my $Output2 = qx(/usr/bin/snmpwalk -v1 -c public srv2 .1.3.6.1.4.1.2021.8.1.101| cut -f4 -d':');
print "<tr><td>Serverraum2</td><td>srv2</td><td> $Output2 ° C</td> </tr>";
my $Output3 = qx(/usr/bin/snmpwalk -v1 -c public srv3 .1.3.6.1.4.1.2021.8.1.101| cut -f4 -d':');
print "<tr><td>Serverraum3</td><td>srv3</td><td> $Output3 ° C </td></tr>";
my $Output4 = qx(/usr/bin/snmpwalk -v1 -c public srv4 .1.3.6.1.4.1.2021.8.1.101.0.0.2| cut -f4 -d':');
print "<tr><td>Serverraum4</td><td>srv4</td><td> $Output4 ° C </td></tr>";
print "</table>";
my $Output5 = qx(/bin/date);
print "<br>letzte Abfrage: $Output5 <br><br>";
print "zur Aktualisierung bitte F5 druecken.";
print "</body></html>";
#----------------------------------
Temperaturfühler der EATON USV Typ: 9355-20 in Windows per SNMP auslesen:
wsnmputil.exe -v1 get 10.11.12.13 public 1.3.6.1.4.1.534.1.6.5.0
#oder
.iso.org.dod.internet.private.enterprises.534.1.6.5.0
Temperaturfühler der EATON USV Typ: 5P 850 in Linux per SNMP auslesen:
snmpwalk -v1 -c public 10.11.12.14 1.3.6.1.4.1.534.1.1.4.0
#oder
snmpget -v1 -c public 10.11.12.14 1.3.6.1.4.1.534.1.1.4.0
Mibs auf den Client installieren nachladen
Programm installieren:
apt-get install snmp-mibs-downloader
Eintrag mibs :
in Datei /etc/snmp/snmp.conf
ändern von:
mibs :
nach
#mibs :
dann testen mit:
snmpwalk -v1 -c public meinserver .1
fertig
Prozesse überwachen
an das Ende der /etc/snmp/snmpd.conf
die Zeile einfügen:
# puppet ist ein java prozess
proc java
dann den SNMP-Dienst neustarten und die OID 1.3.6.1.4.1.2021.2.1.100.1 auslesen.
wenn der Prozess läuft, dann gibt es als Rückgabe eine 0.
wenn der Prozess fehlt, dann gibt es als Rückgabe eine 1.
mögliche Fehler
ab debian6 (squeeze) werden die selbstdefinierten Komandos nicht mehr als root sondern als snmp-user ausgeführt.
Brauchen die Kommandos rootrechte kann man das über sudo wie folgt konfigurieren:
apt-get install sudo
echo "snmp ALL=(root)NOPASSWD:/usr/local/bin/Temperatur" >>/etc/sudoers
die Datei /etc/snmp/snmpd.conf
jetzt wie folgt konfigurieren:
...
#hier den benutzerdefinierte Befehl
exec check_temperatur /usr/local/bin/Temperatur
#ändern in
exec check_temperatur /usr/bin/sudo /usr/local/bin/Temperatur
...
dann den Dienst snmp neustarten:
/etc/init.d/snmpd restart
Der Snmp-Dienst ist zu geschwätzig: Connection from UDP:...\\
die Datei /etc/snmp/snmpd.conf
jetzt wie folgt konfigurieren und dienst danach neu starten:
dontLogTCPWrappersConnects true
einen Dienst einfach überwachen:
in die Datei /etc/snmp/snmpd.conf
eintragen:
proc exim4
OID 1.3.6.1.4.1.2021.2.1
per snmpwalk durchsuchen und gewünschten Wert überwachen.
einen Dienst mit mehreren Prozessen (ohne Kindprozesse) überwachen:
in die Datei /etc/snmp/snmpd.conf
eintragen:
extend chkpgres /bin/bash /usr/local/sbin/chkproc.sh "postgres -D"
eine Datei /usr/local/sbin/chkproc.sh
erstellen und ausführbar machen:
- chkproc.sh
#!/bin/bash
a=$(ps -ef | grep -e "$1" | grep -v $$| wc -l)
a=$((a-1))
echo "$a prozess(e) von $1 gefunden"
exit $a
per snmpwalk die OID ermitteln (unterhalb von 1.3.6.1.4.1.8072.1.3
)
Dann in der SNMP-Überwachung(z.B. PRTG) konfigurieren und triggern wenn der Schwellwert (a) unterschritten wird.
Wieviele Benutzer sind angemeldet?
freien Platz prozentual auf ZFS-Partition anzeigen
snmpd wird als Benutzer DEBIAN-snmp ausgeführt. Dieser braucht das Recht zpool ohne Passwortabfrage zu starten.
Zeilen in Sudo-Datei /etc/sudoers.d/zfs
aktivieren.
Zeile in /etc/snmp/snmpd.conf
einfügen und anschließend SNMP-Dienst neu starten
extend .1.3.6.1.4.1.2021.60 zfspool /bin/bash -c "/usr/bin/sudo /sbin/zpool list -Ho capacity | sed -e 's/%//g' | xargs -n1 expr 100 -"
zurück