====== Snmp ======
Nahezu jedes Netzwerkgerät verfügt über SNMP-Informationen.
Diese lassen sich über verschiedene Tools abfragen.
===== Installieren =====
apt-get install snmp libsnmp-base netdisco-mibs-installer snmp-mibs-downloader
===== snmpwalk=====
Testen der SNMP-Funktionalität eines Gerätes auf svrv-mgmt
Version 1/2c
snmpwalk -c public -v 1
Version 3 (authNoPriv) (Authprotocol: MD5|SHA|SHA-224|SHA-256|SHA-384|SHA-512)
snmpwalk -v3 -l authNoPriv -u -a -A''
Version 3 (authPriv) (Authprotocol: MD5|SHA|SHA-224|SHA-256|SHA-384|SHA-512; Privacy Protocol DES|AES)
snmpwalk -v3 -l authPriv -u -a -A'' -x -X''
Dieser Befehl gibt alle OIDs des abgefragten Gerätes aus.
===== snmpget =====
Abfragen einer bestimmten OID.
snmpget -v 1 -c public -O T iso.3.6.1.2.1.47.1.1.1.1.2.1
Hier werden bestimme OIDs eines Gerätes abgefragt. Die Option "-O " gibt an
wie die Ausgabe der Werte dargestellt werden sollen.
===== MIBs =====
MIBs ( management information base) sind Dateien die beschreiben was die einzelnen OIDs (Object Identifier) bedeuten.
Manchmal werden diese Mib-Dateien mit einer anderen Dateiendung als ''.mib'' ausgeliefert.
WICHTIG: Damit snmp mit MIB-Dateien arbeiten kann müssen diese die Dateiendung''.mib'' haben!!!
SNMP hat standardmäßig verschiedene Pfade in denen es nach MIBs sucht.
Die Ausgabe des folgenden Befehls
snmptranslate -m test test
gibt folgende Ausgabe
No log handling enabled - turning on stderr logging
add_mibdir: strings scanned in from /usr/share/mibs/site/.index are too large. count = 1
MIB search path: /root/.snmp/mibs:/usr/share/mibs/site:/usr/share/snmp/mibs:/usr/share/mibs/iana:/usr/share/mibs/ietf:/usr/share/mibs/netsnmp
Cannot find module (test): At line 0 in (none)
test: Unknown Object Identifier (Sub-id not found: (top) -> test)
Hier sieht man in der 3. Zeile die Verzeichnisse in denen SNMP nach MIBs sucht.
Da ich die MIBs im gesamten Server für jeden zugänglich machen möchte, lege ich diese unter einem eigenen Verzeichnis ab und passe die ''/etc/snmp/snmp.conf'' wie folgt an.
mibdirs +::/:....
Das "+" vor dem Pfad sagt aus dass dieser Pfad zu den bereits bestehenden Pfaden hinzugefügt wird. Unterverzeichnisse müssen explizit separat angegeben werden.
==== snmptranslate ====
Mit folgendem Befehl kann man schauen ob die SNMP-Konfiguraton richtig ist.
snmptranslate -Tp | head
Die Ausgabe sollte folgendes ergeben:
No log handling enabled - turning on stderr logging
add_mibdir: strings scanned in from /usr/share/mibs/site/.index are too large. count = 1
+--iso(1)
|
+--org(3)
|
+--dod(6)
|
+--internet(1)
|
+--directory(1)
|
Wenn hier nur die ''+--iso(1)'' ausgegeben wird, dann muss in der Datei ''/etc/snmp/snmp.conf'' die Zeile **mibs :** gelöscht oder auskommentiert werden.
Wenn mann nun die jew. MIB für den jew. Hersteller/Gerätemodell hat, muss man erst einmal mit ''snmptranslate'' schauen ob diese auch aufgelöst werden können.
hier ein Beispiel anhand einer Juniper Netscreen-MIB Sammlung für die Firmware 6.3 ([[http://www.juniper.net/techpubs/software/screenos/mibs.html#6.3|Download]]).
Wir lösen hier den Status der Lüfter auf.
snmptranslate -m NETSCREEN-CHASSIS-MIB -IR nsFanStatus
Die Ausgabe sieht wie folgt aus:
NETSCREEN-CHASSIS-MIB::nsFanStatus
Mit der zusätzlichen Option ''-On'' gibt man die Ausgabe nummerisch aus:
.1.3.6.1.4.1.3224.21.2.1.2
Nun kann mit dieser MIB gearbeitet werden.
Hier ein Beispiel um die VPN-IKE Namen herauszufinden:
snmpwalk -v 2c -c 128.53.1.1 .1.3.6.1.4.1.3224.4.3.1.1.2
und hier noch die dazugehörigen, aktuell eingestellten, Gateways:
snmpwalk -v 2c -c .1.3.6.1.4.1.3224.4.3.1.1.4
==== snmpwalk ====
Mit ''snmpwalk'' können per SNMP die Geräte abgefragt werden.
snmpwalk -v -c
Hier ein Beispiel anhand unserer Juniper Netscreen MIB:
snmpwalk -v2c -c 192.168.0.1 NETSCREEN-CHASSIS-MIB::nsFanStatus
oder
snmpwalk -v2c -c 192.168.0.1 .1.3.6.1.4.1.3224.21.2.1.2
Die Ausgabe sieht so aus:
NETSCREEN-CHASSIS-MIB::nsFanStatus.1 = INTEGER: 1
NETSCREEN-CHASSIS-MIB::nsFanStatus.2 = INTEGER: 1
NETSCREEN-CHASSIS-MIB::nsFanStatus.3 = INTEGER: 1
NETSCREEN-CHASSIS-MIB::nsFanStatus.4 = INTEGER: 1
NETSCREEN-CHASSIS-MIB::nsFanStatus.5 = INTEGER: 1
oder
SNMPv2-SMI::enterprises.3224.21.2.1.2.1 = INTEGER: 1
SNMPv2-SMI::enterprises.3224.21.2.1.2.2 = INTEGER: 1
SNMPv2-SMI::enterprises.3224.21.2.1.2.3 = INTEGER: 1
SNMPv2-SMI::enterprises.3224.21.2.1.2.4 = INTEGER: 1
SNMPv2-SMI::enterprises.3224.21.2.1.2.5 = INTEGER: 1
Die Abfrage in Nagios würde dann wie folgt aussehen:
./check_snmp -H -P 2c -C -o .1.3.6.1.4.1.3224.21.2.1.2.1
Man beachte dass die OID aus "snmpwalk" und nicht aus "snmptranslate" genommen wurde. Die ".1" wurde zur OID hinzugefügt.
Nicht jede Juniper NetScreen hat 4 Lüfter.
Die Ausgabe sieht wie folgt aus:
SNMP OK - 1 | iso.3.6.1.4.1.3224.21.2.1.2.1=1
===== Scripte =====
==== Dezimalzeichen ====
Bei einigen Geräten werden die abgefragten OIDs als Interger also als ganze Zahl ausgegeben.
Möchte man diese Zahl aber mit Dezimalzeichen versehen, kann ''sed'' dies als Pipe-Befehl erledigen.
Am besten man erstellt sich ein Bashscript, welches in Nagios, dem eigentlichen Check-Befehl, mit angegeben wird. Somit muss nicht immer die ''sed''-Zeile angeben werden.
[[http://wiki.stizi.de/datenverarbeitung:text:sed#zahlen_mit_komma_versehen|Hier]] ist ein Beispiel für einen solchen ''sed''-Befehl aufgeführt.
Dieses Script kann normal unter ''/usr/local/nagios/libexec'' gespeichert und ausführbar gemacht werden.
Der Aufruf in Nagios erfolgt als Parameter zum eigentlichen Check-Befehl. Man muss allerdings entweder den ganzen Pfad zum Script angeben, oder die Variable **$USER1$/** angeben.
Beispiel:
check_snmp!!!!-l ''!| $USER1$/snmp_dezimalzeichen.sh []
Diese ''sed''-Zeile fügt den ganzen Zahlen, an jeder beliebigen Stelle (kann z.B. per Parameter als Zahl angegeben werden) von hinten gezählt, ein oder mehrere Kommatrennzeichen hinzu.
Beispiel:
Wenn ''check_snmp'' folgendes ausgibt
SNMP OK - 7210703 | iso.3.6.1.2.1.16.1.1.1.15.2=7210703c
macht ''sed'' z.B. daraus
SNMP OK - 72107,03 | iso.3.6.1.2.1.16.1.1.1.15.2=7210703c
Die zweite Zahl nach dem Pipe und OID ist keine ganze Zahl ("c" am Ende) und wird daher nicht abgeändert.