Raspberry Pi / Rasbian und SNMP

Aus FHEMWiki


Clock - Under Construction.svg 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