Raspberry Pi / Rasbian und SNMP
An dieser Seite wird momentan noch gearbeitet. |
Raspberry Pi / Rasbian und SNMP (IN ARBEIT)
Dieses Howto beschreibt die Installation des SNMP Daemons und der SNMP Tools am Raspberry Pi.
Weiters wird beschrieben, wie man SNMP konfiguriert, um damit einen laufenden Prozess zu überwachen und bei Bedarf neu zu starten. Auch ein kompletter Neustart des Mini-Rechners über SNMP wird hier gezeigt.
Einleitung
Das SNMP (Simple Network Management Protocol) läuft über das verbindungslose UDP Protokoll Port 161(SNMP) und Port 162(TRAP) und wurde entwickelt, um Netzwerkgeräte entfernt zu überwachen und zu steuern.
Installation Debian/Rasbian und MIBS laden
Wenn man nicht als root unterwegs ist, muss noch ein sudo bei jedem Befehl vorangestellt werden.
apt-get install snmpd snmp snmp-mibs-downloader
Sollten die MIB's (Management Information Base) nicht automatisch geladen werden, wird der Download initiert.
download-mibs
SNMPD Konfiguration
Zuerst werden Einstellungen wie Systemname, Systemadmin usw.. gemacht.
Datei: /etc/snmp/snmpd.conf
############################################################################### # # AGENT BEHAVIOUR # # Listen for connections from the local system only # agentAddress udp:127.0.0.1:161 # Listen for connections on all interfaces (both IPv4 *and* IPv6) # agentAddress udp:161,udp6:[::1]:161 agentAddress udp:161 ############################################################################### # # SYSTEM INFORMATION # # Note that setting these values here, results in the corresponding MIB objects being 'read-only' # See snmpd.conf(5) for more details sysLocation Haus1-Heizkeller sysContact Administrator meinemail@gmail.com # Application + End-to-End layers sysServices 72
Erklärung: Wichtig ist agentAddress. Wird nur udp:161 angegeben, ist der Zugriff von jeder IP aus möglich.
SNMPD Prozessüberwachung
Konfiguration in Datei /etc/snmp/snmpd.conf
# readonly community rocommunity public # write from 192.168.x.x subnets rwcommunity writesecret 192.168.0.0/16 # write from localhost rwcommunity writesecret localhost # Process Monitoring # # init process dummy for reboot proc init procfix init sudo /sbin/reboot # process ser2net / at least one process proc ser2net procfix ser2net /usr/bin/sudo /etc/init.d/ser2net restart
Erklärung: Diese Infos beziehen sich auf die Protokoll Version 1 und 2c.
- rocommunity = Name für den Zugriff im "Nur Lesemodus". Wird sonst nichts angegeben, ist der Zugriff von jeder IP aus möglich.
- rwcommunity = Name für den "Schreibzugriff". Hier sind 2 Einträge vorhanden. 192.168.0.0/16 erlaubt das Schreiben von jeder IP, die mit 192.168 anfängt. Die 2. Zeile localhost erlaubt das auch dem Rechner selbst.
- proc = Prozessname wie er mit der Befehlszeile ps -aux angezeigt wird.
- procfix = Befehl der ausgeführt wird, wenn auf die dazugehörige OID (Object Identifier) schreibend zugegriffen wird.
Sudo Rechtevergabe
Wird procfix verwendet, muß noch diese Einstellung gemacht werden.
Konfiguration in Datei /etc/sudoers
Eine Zeile wie folgt hinzufügen.
### for snmp procfix scripts as root snmp ALL=(ALL) NOPASSWD: ALL
Erklärung: Der SNMP Dienst läuft auf Rasbian standardmäßig unter dem user:snmp und group:snmp.
Dieser User darf keine Prozesse starten oder beenden und schon gar nicht den gesamten Rechner neu starten.
Um das zu ermöglichen, müssen dem Benutzer snmp root Rechte per sudo vergeben werden. Dazu ist der gezeigte Eintrag nowendig.
Nach jeder Änderung muss zum Aktivieren der Einstellung der snmpd-Dienst neu gestartet werden.
service snmpd restart
SNMP Client - Verwendung von OID-Namen aktivieren
Um OID Namen statt der kryptischen 1.3.x.x.x.x. Nummern zu verwenden ist noch dieser Schritt nötig.
Aus-Kommentieren mibs : in Datei /etc/snmp/snmp.conf
# # As the snmp packages come without MIB files due to license reasons, loading # of MIBs is disabled by default. If you added the MIBs you can reenable # loaging them by commenting out the following line. #### mibs :
SNMP Befehle
Nach einem abschliessenden Neustart des snmpd-Daemons mit service snmpd restart
können auf dem lokalen Rechner snmpwalk
und snmpget
Befehle eingeben werden.
Der genaue Syntax kann auf der Konsole mit man <Befehl>
angezeigt werden.
- snmpwalk
- Lesender Zugriff auf SNMP Variblen mit allen im Baum darunter liegenden Werten.
- snmpget
- Lesender Zugriff auf nur einen einzigen Wert.
- snmpwrite
- Schreibender Zugriff auf einen Wert.
Mit snmpget
sehen wir uns nun Werte zu dem System an.
root@fhem1:~# snmpget -v1 -c public localhost .1.3.6.1.2.1.1.4.0 SNMPv2-MIB::sysContact.0 = STRING: Administrator meinemail@gmail.com root@fhem1:~# snmpget -v2c -c public localhost .1.3.6.1.2.1.1.6.0 SNMPv2-MIB::sysLocation.0 = STRING: Haus1-Heizkeller root@fhem1:~# snmpget -v1 -c public -On localhost .1.3.6.1.2.1.1.4.0 .1.3.6.1.2.1.1.4.0 = STRING: Administrator meinemail@gmail.com root@fhem1:~# snmpget -v1 -c public -On localhost .1.3.6.1.2.1.1.6.0 .1.3.6.1.2.1.1.6.0 = STRING: Haus1-Heizkeller
Erklärung: Hier sehen wir unsere in der beschriebenen Konfiguration eingetragenen Werte.
- snmpget
- -v1 = SNMP Version 1
- -v2 = SNMP Version 2
- -c public = Zugriff mit dem Namen public - meistens wird dieser Name für "Nur-Lese" Zugriff verwendet.
- -0n = Ausgabe der OID-Zahlenwerte anstatt der MIB-Namen
- localhost = Zugriff auf den lokalen Rechner. Hier die IP des Rechners einsetzen, wenn remote abgefragt werden soll.
- .1.3.6.1.2.1.1.4.0 = OID mit dem Wert
Mit snmpwalk
sehen wir uns den gesamten Baum eines Wertes an.
root@fhem1:~# snmpwalk -v1 -c public -On localhost .1.3.6.1.2.1.1 .1.3.6.1.2.1.1.1.0 = STRING: Linux fhem1.local 3.18.9+ #768 PREEMPT Sun Mar 15 18:59:03 GMT 2015 armv6l .1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.8072.3.2.10 .1.3.6.1.2.1.1.3.0 = Timeticks: (292649) 0:48:46.49 .1.3.6.1.2.1.1.4.0 = STRING: Administrator meinemail@gmail.com .1.3.6.1.2.1.1.5.0 = STRING: fhem1.local .1.3.6.1.2.1.1.6.0 = STRING: Haus1-Heizkeller .1.3.6.1.2.1.1.7.0 = INTEGER: 72 .1.3.6.1.2.1.1.8.0 = Timeticks: (7) 0:00:00.07 .1.3.6.1.2.1.1.9.1.2.1 = OID: .1.3.6.1.6.3.10.3.1.1 .1.3.6.1.2.1.1.9.1.2.2 = OID: .1.3.6.1.6.3.11.3.1.1 .1.3.6.1.2.1.1.9.1.2.3 = OID: .1.3.6.1.6.3.15.2.1.1 .1.3.6.1.2.1.1.9.1.2.4 = OID: .1.3.6.1.6.3.1 .1.3.6.1.2.1.1.9.1.2.5 = OID: .1.3.6.1.2.1.49 .1.3.6.1.2.1.1.9.1.2.6 = OID: .1.3.6.1.2.1.4 .1.3.6.1.2.1.1.9.1.2.7 = OID: .1.3.6.1.2.1.50 .1.3.6.1.2.1.1.9.1.2.8 = OID: .1.3.6.1.6.3.16.2.2.1 .1.3.6.1.2.1.1.9.1.3.1 = STRING: The SNMP Management Architecture MIB. .1.3.6.1.2.1.1.9.1.3.2 = STRING: The MIB for Message Processing and Dispatching. .1.3.6.1.2.1.1.9.1.3.3 = STRING: The management information definitions for the SNMP User-based Security Model. .1.3.6.1.2.1.1.9.1.3.4 = STRING: The MIB module for SNMPv2 entities .1.3.6.1.2.1.1.9.1.3.5 = STRING: The MIB module for managing TCP implementations .1.3.6.1.2.1.1.9.1.3.6 = STRING: The MIB module for managing IP and ICMP implementations .1.3.6.1.2.1.1.9.1.3.7 = STRING: The MIB module for managing UDP implementations .1.3.6.1.2.1.1.9.1.3.8 = STRING: View-based Access Control Model for SNMP. .1.3.6.1.2.1.1.9.1.4.1 = Timeticks: (5) 0:00:00.05 .1.3.6.1.2.1.1.9.1.4.2 = Timeticks: (5) 0:00:00.05 .1.3.6.1.2.1.1.9.1.4.3 = Timeticks: (5) 0:00:00.05 .1.3.6.1.2.1.1.9.1.4.4 = Timeticks: (6) 0:00:00.06 .1.3.6.1.2.1.1.9.1.4.5 = Timeticks: (6) 0:00:00.06 .1.3.6.1.2.1.1.9.1.4.6 = Timeticks: (6) 0:00:00.06 .1.3.6.1.2.1.1.9.1.4.7 = Timeticks: (6) 0:00:00.06 .1.3.6.1.2.1.1.9.1.4.8 = Timeticks: (7) 0:00:00.07
Einige nützliche OIDs. Wenn der Parameter -On weg gelassen wird, ist der Wert "Human Readable".
- Filesysteme
snmpwalk -v2c -c public -On localhost .1.3.6.1.2.1.25.2.3
snmpwalk -v2c -c public localhost .1.3.6.1.2.1.25.2.3
- Systeminfo
snmpget -v2c -c public localhost .1.3.6.1.2.1.1.1.0
snmpget -v1 -c public localhost .1.3.6.1.2.1.1.4.0
snmpget -v1 -c public localhost .1.3.6.1.2.1.1.6.0
- Uptime
snmpget -v1 -c public localhost .1.3.6.1.2.1.25.1.1.0
- Netzwerk Daten / Transfer
snmpwalk -v2c -c public localhost .1.3.6.1.2.1.2.2.1
snmpwalk -v2c -c public -On localhost .1.3.6.1.2.1.2.2.1
- Prozesse
snmpwalk -v1 -c public localhost .1.3.6.1.2.1.25.4.2.1
Prozesse neu starten / Reboot Raspi über SNMP
Um auf Ereignisse der überwachten Prozesse zu reagieren fragen wir die Daten wie folgt ab.
snmpwalk -v2c -c public localhost .1.3.6.1.4.1.2021.2.1
root@fhem1:~# snmpwalk -v2c -c public localhost .1.3.6.1.4.1.2021.2.1 UCD-SNMP-MIB::prIndex.1 = INTEGER: 1 UCD-SNMP-MIB::prIndex.2 = INTEGER: 2 UCD-SNMP-MIB::prNames.1 = STRING: init UCD-SNMP-MIB::prNames.2 = STRING: ser2net <- Das ist der Prozess (ID .2) UCD-SNMP-MIB::prMin.1 = INTEGER: 0 UCD-SNMP-MIB::prMin.2 = INTEGER: 0 UCD-SNMP-MIB::prMax.1 = INTEGER: 0 UCD-SNMP-MIB::prMax.2 = INTEGER: 0 UCD-SNMP-MIB::prCount.1 = INTEGER: 1 UCD-SNMP-MIB::prCount.2 = INTEGER: 1 UCD-SNMP-MIB::prErrorFlag.1 = INTEGER: noError(0) UCD-SNMP-MIB::prErrorFlag.2 = INTEGER: noError(0) <- Das ist der Fehlercode (0=Prozess läuft) UCD-SNMP-MIB::prErrMessage.1 = STRING: UCD-SNMP-MIB::prErrMessage.2 = STRING: UCD-SNMP-MIB::prErrFix.1 = INTEGER: noError(0) UCD-SNMP-MIB::prErrFix.2 = INTEGER: noError(0) UCD-SNMP-MIB::prErrFixCmd.1 = STRING: sudo /sbin/reboot UCD-SNMP-MIB::prErrFixCmd.2 = STRING: /usr/bin/sudo /etc/init.d/ser2net restart <- Damit wird der daemon neu gestartet
... In Arbeit .... ... to be continued ....
Raspberry Pi