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 &deg 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 &deg  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 &deg 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 &deg 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?

 1.3.6.1.2.1.25.1.5.0


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