Zabbix Monitoring per SNMP

Simple Network Management Protocol (SNMP)

Eine Monitoring-Software, die das Simple Network Management Protocol (SNMP) nicht beherrscht, würde nicht viel taugen. Deshalb kann Zabbix selbstverständlich auch mit SNMP umgehen und Geräte über dieses Protokoll überwachen.

SNMP ist ein weit verbreiteter Standard, wenn es um die Überwachung von IT-Komponenten geht. SNMP kommt hauptsächlich auf Geräten mit sogenannten „Embedded Systems“ zum Einsatz. Hierbei handelt es sich um Geräte mit einem sehr spezialisierten Betriebssystem, an welchem der Benutzer nichts ändern kann. Router, Switches und Drucker sind die bekanntesten Beispiele. Aber auch auf Appliances, die im Inneren auf einem vollwertiges Linux-Betriebssystem basieren, wird SNMP verwendet. Der Hersteller gibt Ihnen in den meisten Fällen keinen Zugriff auf das Betriebssystem der Appliance, so dass die Installation des Zabbix-Agenten nicht möglich und aus Gründen der Garantie- und Supportbedingungen auch nicht empfohlen ist.

In der Regel hat der Hersteller aber an das Monitoring gedacht und auf seinen Geräten einen SNMP-Agenten installiert. Es ist selbstverständlich auch möglich, Hosts mit „kompletten“ Betriebssystemen wie Linux und Windows per SNMP zu überwachen. Für fast alle Betriebssysteme können Sie einen SNMP-Daemon installieren.

SNMP vs. Zabbix-Agent

Vorausgesetzt Sie haben die Möglichkeit, auf einem System den Zabbix-Agent zu installieren, dann kann man nicht pauschal empfehlen, der Zabbix-Agent sei immer einer Überwachung per SNMP vorzuziehen. Es gibt einige Gründe, warum in bestimmten Fällen die Installation eines SNMP-Daemons vorzuziehen ist:

  • Die SNMP-Kern-Komponenten werden von der Distribution bzw. von Microsoft mitgeliefert. SNMP fällt in der Regel in den Bereich des Hersteller- oder Distributionssupports. Der Zabbix-Agent fällt aus den Supportleistungen raus.
  • Die Software zur Überwachung bestimmter Hardware, beispielsweise der Raidcontroller, klinkt sich in einen laufenden SNMP-Dienst ein.
  • Es gibt Szenarien, in denen nicht nur eine Monitoring-Lösung im Einsatz ist. SNMP ist neutral und kann Daten an Zabbix und diverse andere Monitoring-Software liefern.

Argumente, die für den Zabbix-Agenten und gegen ein SNMP-Monitoring sprechen, könnten die folgenden sein:

  • Zabbix-Server und Zabbix-Agent sind aufeinander abgestimmt. Sie können auf der Weboberfläche zahlreiche Monitoring-Aufgaben durch einfaches Anklicken einrichten. Die Suche nach passenden OIDs oder die Installation von zusätzlichen MIBs bleibt Ihnen erspart.
  • Software zur Überwachung bestimmter Hardware, beispielsweise von Raidcontrollern, die sich in einen SNMP-Dienst einklinkt, ist oft unnötig kompliziert. In den meisten Fällen liefert ein kleines Kommandozeilenprogramm die Daten. Dieses Programm kann oft einfacher und ressourcenschonender in den Zabbix-Agenten anstatt in einen SNMP-Dienst integriert werden.
  • Per SNMP können Sie keine Autoregistrierung verwenden. SNMP-Dienste können sich nicht eigenständig in den Zabbix-Server eintragen.
  • Per SNMP können Sie keine Skripte zur autonomen Fehlerbeseitigung ausführen.

Wie funktioniert SNMP?

Wie der Name Simple Network Management Protocol schon andeutet, ist das Protokoll nicht nur auf das Lesen von Daten beschränkt. Per SNMP ist es auch möglich, Geräte zu konfigurieren. Zabbix beschränkt sich aber auf einen rein lesenden Zugriff und kann keine Anfragen senden, die Daten per SNMP schreiben würden.

Die Kommunikation per SNMP ist sehr simpel aufgebaut. Ein Manager, zum Beispiel der Zabbix-Server, fragt einen SNMP-Agenten nach Daten. Zurück kommen einzelne Daten in Form von Schlüssel-Wert-Paaren. Diese geben beispielsweise den Status einer Komponente des überwachten Systems an.

Frage-Antwort-Kommunikation per SNMP

Es gibt unzählige SNMP-Manager (abfragende Clients). Auf der Kommandozeile sind snmpwalk und snmpget unverzichtbare Helfer. Schauen Sie sich das nachfolgende Beispiel an (die Ausgabe wurde gekürzt). Ein Gerät, zum Beispiel ein Ethernet-Switch, wurde nach all seinen Daten gefragt, die er preisgeben kann. Sie erhalten eine Liste mit Schlüsseln (OIDs) und den aktuellen Werten zurück.

Den Schlüssel in der Liste der Werte bezeichnet man als Object Identifier (OID). Dieser besteht aus einer mit Punkten getrennten Zahlenkette. Man kann anhand der OID nicht erkennen, was die vom SNMP-Agenten gelieferten Daten bedeuten. OIDs sind in einer Baumstruktur hierarchisch geordnet.

Numerische Ausgabe vom Kommando snmpwalk

Die ersten vier Ebenen bedeuten „iso.org.dod.internet“ (.1.3.6.1). Alle Daten, die unterhalb der Ebene ..1.3.6.1.2.1.1 einsortiert werden, befinden sich in der Standard-MIB „SNMP MIB-II“. Daten, die mit der Zahlenfolge .1.3.6.1.2.1.2 beginnen, sind Teil der sogenannten „IF-MIB“ (The Interfaces Group MIB). Um den Aufbau der MIBs zu standardisieren, wurde das Rahmenwerk SNMP MIB-II erstellt. In dieser MIB werden allgemeingültige Strukturen vorgegeben. Außerdem wird festgelegt, wo hersteller- oder gerätespezifische Datenbeschreibungen in den MIB-Baum einsortiert werden.

Baumstruktur der OIDs

Object Identifier (OID) und die Management Information Base (MIB)

Elemente, deren Status man per SNMP abfragen kann, werden als Managementobjekte bezeichnet.

Damit der Zugriff auch herstellerübergreifend und mit unterschiedlichen Manager-Agent-Kombinationen funktioniert, wurde die „Management Information Base“ (MIB) als unabhängiges Format zur Speicherung von Geräteinformationen entwickelt. MIBs sind Dateien, die eine Zuordnung von numerischen OIDs zu Beschreibungen in Textform enthalten. In dieser Datei werden alle in einem Gerät abfragbaren Objekte mittels „Object Identifier“ (OID) beschrieben. Über diese OIDs werden SNMP-Objekte mit einer eindeutigen Adresse, einem Namen und Informationen über Typ, Zugriffsrechte und Beschreibung definiert. Wenn Sie das zuvor genannte Beispiel so ändern, dass statt der numerischen OIDs deren Repräsentationen in Textform zurückgegeben werden, ist die Ausgabe schon viel verständlicher:

Ein Switch gibt seine Daten per SNMP preis.

Der Aufbau der MIBs ist standardisiert und im Rahmenwerk SNMP MIB-II definiert. Neben der SNMP MIB-II gibt es weitere Standard-MIBs, beispielsweise die IF-MIB. In einer MIB ist in Abstract Syntax Notation One beschrieben, von welchem Datentyp die Antwort auf die Abfrage einer OID ist. Zeichenketten (Octetstring), Ganzzahlen (Integer o. Gauge), Zeit (Timetick) oder Zähler (Counter) kommen als Datentypen in Frage. Zusätzlich ist in der MIB definiert, ob es sich um einen einzelnen Rückgabewert oder eine dynamische Tabelle handelt. Ein Switch zum Beispiel hat mehrere Ports, welche in einer Indextabelle angezeigt werden. Die Tabelle der vorhandenen Netzwerkschnittstellen in einem Switch lesen Sie wie folgt aus:

root@debian:~# snmpwalk  -v 1 -c public 192.0.2.20 IF-MIB::ifIndex
IF-MIB::ifIndex.1 = INTEGER: 1
IF-MIB::ifIndex.2 = INTEGER: 2
IF-MIB::ifIndex.3 = INTEGER: 3
IF-MIB::ifIndex.4 = INTEGER: 4

Dieser Switch verfügt über vier Ports, welche von eins bis vier durchnummeriert werden. Die Abfrage des Datendurchsatzes pro Port funktioniert demnach nach folgendem Schema:

snmpget -v 1 -c public 192.0.2.20 IF-MIB::ifOutOctets.<1-4>
snmpget -v 1 -c public 192.0.2.20 IF-MIB::ifInOctets.<1-4>

Wenn Sie mit den Standard-MIBs die OIDs nicht in verständlichen Klartext übersetzen können, suchen Sie auf der Webseite des Herstellers nach MIB-Dateien für das Gerät, welches Sie per SNMP überwachen wollen.

Notationen von OIDs

Zur Adressierung dieser Managementobjekte sind drei Notationen gebräuchlich. Im nachfolgenden Beispiel wird ein Switch drei Mal per snmpget abgefragt. Dabei wird der eingehende Datenverkehr in Octets (=Bytes) des Switchports 1 ausgelesen.

Numerische Notation:

root@debian:~# snmpget -v 1 -c public 192.0.2.20 .1.3.6.1.2.1.2.2.1.10.1
IF-MIB::ifInOctets.1 = Counter32: 1728

Die OIDs werden über Zahlenketten identifiziert. Die Antwort wird von snmpget in ASN.1-Notation ausgegeben. Für diese Abfragen sind keine MIBs notwendig. Sollten keine passenden MIBs vorhanden sein, erfolgt die Ausgabe auch in numerischer Notation. Mit der Option -Of oder -On können Sie das Ausgabeformat der snmp-Kommandos ändern. Beispielsweise:

root@debian:~#  snmpget -On -v 1 -c public 192.0.2.20 .1.3.6.1.2.1.2.2.1.10.1
.1.3.6.1.2.1.2.2.1.10.1 = Counter32: 1728
root@debian:~# snmpget -Of -v 1 -c public 192.0.2.20 .1.3.6.1.2.1.2.2.1.10.1
.iso.org.dod.internet.mgmt.mib-2.interfaces.ifTable.ifEntry.ifInOctets.1 = Counter32: 1728

ASN.1-Notation:

root@debian:~# snmpwalk  -v 1 -c public 192.0.2.20 IF-MIB::ifInOctets.1
IF-MIB::ifInOctets.1 = Counter32: 1728

Die OIDs werden per ASN.1-Notation adressiert und die Rückgabe erfolgt ebenfalls in ASN.1-Notation. Diese Adressierung setzt voraus, dass eine passende MIB installiert ist.

Textuelle Repräsentation:

root@debian:~# snmpget  -v 1 -c public 192.0.2.20 .iso.org.dod.internet.mgmt.mib-2.interfaces.ifTable.ifEntry.ifInOctets.1
IF-MIB::ifInOctets.1 = Counter32: 1728

Die OIDs werden mit einer textuellen Repräsentation der OIDs adressiert. Jedes Segment der numerischen OID wird durch ein beschreibendes Wort ersetzt.

Beim Anlegen von SNMP-Items im Zabbix-Server können alle drei Notationen verwendet werden. Der Zabbix-Server greift auf die im Betriebssystem installierten MIBs zu. Wenn Sie die ASN.1-Notation oder die textuelle Repräsentation einer OID in Zabbix verwenden möchten, testen Sie eine entsprechende Abfrage vorher auf der Kommandozeile des Zabbix-Servers. Wenn die Kommandozeilenwerkzeuge wie snmpget mit ASN.1-Notation oder der textuellen Repräsentation nichts anfangen können, wird der Zabbix-Server diese Notation auch nicht verstehen. Prüfen Sie in diesem Fall, ob die MIBs korrekt installiert sind.

Beachten Sie, dass die Anzahl der installierten MIBs auf jedem System unterschiedlich sein kann. Wenn Sie zum Beispiel den MIB-Browser unter Windows zum Testen verwenden, können Sie nicht davon ausgehen, dass der Zabbix-Server auf die gleichen MIBs zurückgreifen kann. Legen Sie die Items im Zweifelsfall mit der numerischen Notation an. Diese funktioniert immer, da sie keine MIBs braucht.

SNMP Community

Was passiert bei einer SNMP-Abfrage genau? Im Header wird die Versionsnummer (SNMPv1, SNMPv2 oder SNMPv3) und der sogenannte Community-Name übertragen. Durch das Zuweisen von Communities werden Zugriffsrechte vergeben. In den meisten Fällen wird für lesenden Zugriff (read-only) standardmäßig der Community-Name „public“, für Schreib-/Lesezugriff (read-write) „private“ verwendet. Da diese beiden Community-Namen als Standardeinstellung bekannt sind, ist es oft ratsam, diese zu ändern. Einige Geräte verfügen über einen IP-Adressen-Filter, über den Sie eine Liste der zur Abfrage berechtigten Manager pflegen können. Fehlt solch ein Filter, kann das Gerät von beliebigen Managern abgefragt werden. Das ist aber nicht immer gewollt. Das Ändern der Community-Namen erhöht die Sicherheit, aber nur bedingt, da die Community-Namen als Klartext über das Netzwerk übertragen werden. Zuverlässige Sicherheit erhalten Sie nur mit einer Authentifizierung, wie sie SNMP v3 bietet. Wenn ein Gerät weder IP-Adressen-Filter noch SNMP v3 beherrscht, ist das Ändern des Community-Namens das Einzige, was Sie zur Steigerung der Sicherheit tun können.

SNMP-Protokollversionen

Das SNMP-Protokoll wurde im Laufe der Jahre immer weiter entwickelt, weshalb es verschiedene Versionen gibt. In erster Linie werden heute nur drei Versionen verwendet. Zabbix beherrscht diese ebenfalls.

SNMP Version 1
Initiale Implementierung und erste Version des Protokolls. SNMPv1 wird häufig wegen seiner mangelnden Sicherheit kritisiert. Eine Art Authentifizierung erfolgt nur über den Namen der Community. Dieser wird im Klartext übertragen. SNMPv1 ist weit verbreitet und auf vielen Geräten die einzige Möglichkeit zum Monitoring.
SNMP Version 2
Die zweite Version von SNMP erhielt zahlreiche Verbesserungen, beispielsweise die Möglichkeit zur Bulk-Abfrage. Get-Bulk-Requests sind eine effizientere Alternative zum Get-Next-Request, um große Datenmengen in nur einer Abfrage zu übertragen. Das in V2 eingeführte Sicherheitssystem konnte sich nicht durchsetzen und ist nicht im Einsatz. Die Datenübertragung erfolgt im Klartext.
SNMP Version 2c

V2c ist eine weiterentwickelte Version 2 von SNMP. Das umstrittene Sicherheitssystem von V2 wurde entfernt. Sicherheit basiert wieder auf den Communities, welche schon in V1 implementiert wurden. Lange Zeit galt SNMP-V2c als der De-facto-Standard. Diese Version ist noch sehr weit verbreitet. SNMPv2c ist bezüglich Nachrichtenformat und Protokolloperationen nicht kompatibel mit SNMPv1. SNMPv2 verwendet unterschiedliche Header und PDUs.

SNMP Version 3
SNMPv3 fügt dem Protokoll kryptografische Sicherheitsfunktionen hinzu. Eine verschlüsselte Datenübertragung ist möglich. Authentifizierung mit Benutzernamen und Passphrase ist möglich. Damit ist beispielsweise das Manipulieren von Daten während der Übertragung nicht mehr möglich.

Debian, Ubuntu und die MIBs

Aus lizenzrechtlichen Gründen werden bei Debian und Ubuntu keine Standard-MIBs installiert, wenn Sie das Paket snmp installieren. snmpwalk wird die OIDs nur in Form von unverständlichen Zahlenketten ausgeben. Im Zabbix-Server können Sie Items nur mit der numerischen Notation anlegen. Wenn Sie beispielsweise auf der Kommandozeile des Zabbix-Servers ein Gerät per snmpwalk abfragen, erhalten Sie nur numerische OIDs als Rückgabe.

Abhilfe schaffen zusätzliche „nicht freie“ Pakete.

Auf Debian-Systemen aktivieren Sie die Installation von „nicht freier Software“ in der Datei /etc/apt/sources.list, in dem Sie das Repository non-free hinzufügen. Ubuntu hat dieses Repository schon „von Haus aus“ freigeschaltet.

deb http://ftp.de.debian.org/debian/ jessie main non-free
deb http://security.debian.org/ jessie/updates main non-free
deb http://ftp.de.debian.org/debian/ jessie-updates main non-free

Nutzer von Debian- oder Ubuntu-Linux installieren nun die SNMP MIB-II sowie zahlreiche andere Standard-MIBs wie folgt:

apt-get update
apt-get install snmp-mibs-downloader

Damit die MIBs auch verwendet werden, müssen Sie noch eine Änderung an der Datei /etc/snmp/snmp.conf vornehmen. Setzten Sie ein Kommentarzeichen vor das Wort „mibs“.

# 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
# loading them by commenting out the following line.
#mibs :

In welchen Ordnern nach SNMP MIBs gesucht wird, verrät Ihnen folgendes Kommando:

net-snmp-config --default-mibdirs

Testen Sie, ob die Installation erfolgreich war, indem Sie ein Gerät per snmpwalk abfragen. Sie sollten jetzt OIDs in Textform als Rückgabe erhalten.

Mit dem Kommando snmptranslate können Sie testen, ob die MIBs richtig installiert wurden und zur „Übersetzung“ der OIDs verwendet werden. Zum Beispiel sollte Ihnen snmptranslate .iso.3.6.1.6.3.1.1.5.3 als Übersetzung IF-MIB::linkDown ausgeben.

Wenn Sie die MIBs installieren, nachdem Sie bereits den Zabbix-Server installiert haben, müssen Sie den Zabbix-Server neu starten, damit dieser die MIBs verwendet.

OIDs identifizieren

Bevor Sie ein Gerät per SNMP mit Zabbix überwachen, sollten Sie herausfinden, welche Daten das Gerät per SNMP preisgibt und mit welchen OIDs diese gekennzeichnet sind.

Die Helfer auf der Kommandozeile, snmpwalk und snmpget

Unter Linux stehen die beiden Programme snmpwalk und snmpget zum testweisen Abrufen von SNMP-Daten zur Verfügung. Alle Distributionen liefern fertige Pakete mit.

  • snmpwalk kann alle verfügbaren Schlüssel-Wert-Paare einer Community rekursiv auslesen und auf der Konsole anzeigen.
  • snmpget ruft die Werte für einen vorgegebenen Schlüssel (OID) ab.

Um alle verfügbaren Daten eines SNMP-Agenten rekursiv abzurufen, verwenden Sie snmpwalk wie folgt:

snmpwalk -v <VERSION> -c <COMMUNITY> <IP_FROM_HOST>

Die Ausgabe von snmpwalk ist in der Regel sehr lang. Das Auslesen aller Werte kann auch mehrere Minuten dauern. Speichern Sie die Ausgabe in einer Textdatei und schauen Sie sich das Ergebnis mit einem Editor an.

Hier ein Beispiel von einem HP-ProCurve Switch:

snmpwalk -v 2c -c public 192.0.2.11>/tmp/snmpwalk_out.txt
wc -l /tmp/snmpwalk_out.txt
13034 /tmp/snmpwalk_out.txt

Bei über 13.000 Schlüssel-Wert-Paaren kann die Suche nach den passenden Daten zuweilen eine schwierige Aufgabe werden.

Snmpwalk zeigt die Schlüssel-Wert-Paare in ASN.1-Notation an, zum Beispiel:

# snmpwalk -v 2c -c public 192.0.2.1|grep "ifInOctets\.[1-4] "
IF-MIB::ifInOctets.1 = Counter32: 0
IF-MIB::ifInOctets.2 = Counter32: 0
IF-MIB::ifInOctets.3 = Counter32: 942560727
IF-MIB::ifInOctets.4 = Counter32: 2380892482

Diese Anzeige hilft Ihnen, die Werte zu identifizieren, welche Sie später per Zabbix monitoren wollen. Sollten auf dem Zabbix-Server nicht alle benötigten MIBs installiert sein, können Sie snmpwalk auch anweisen, die OIDs in numerischer Notation auszugeben, so dass eine Abfrage auch ohne MIBs funktioniert:

snmpwalk -On -v 2c -c public 192.0.2.1|grep "ifInOctets\.[1-4] "

Mit snmptranslate können Sie die OIDs zwischen den Notationen übersetzen, zum Beispiel:

snmptranslate -On IF-MIB::ifInOctets.1
.1.3.6.1.2.1.2.2.1.10.1

Wenn Sie vor dem Einrichten eines Items beobachten möchten, wie sich die Werte eines SNMP-Schlüssels ändern, verwenden Sie snmpget, um die Daten abzurufen.

snmpget -v 2c -c public 192.0.2.1 .iso.org.dod.internet.mgmt.mib-2.interfaces.ifTable.ifEntry.ifInOctets.3

Der Helfer für den Desktop: MIB-Browser

Eine Alternative zum Kommandozeilenprogramm snmpwalk stellen sogenannte MIB-Browser dar. Wenn Sie mit einer Internetsuchmaschine danach suchen, werden Sie zahlreiche finden.
Einer der vielen MIB-Browser ist der [iReasoning MIB-Browser], den Sie als „Free Personal Edition“ kostenlos herunterladen können. Die Software basiert auf Java und läuft unter allen Betriebssystemen, für die Java verfügbar ist. Die Standard-SNMP-MIB-II ist bereits enthalten.

Der MIB-Browser listet alle Daten auf, die ein Host per SNMP preisgibt. Es werden alle OIDs in Zahlen- und ASN.1-Notation angezeigt.

OIDs per MIB-Browser auslesen

Geräte per SNMP mit Zabbix überwachen

SNMP-Interface anlegen

Für jeden Hosts, den Sie per SNMP überwachen möchten, müssen Sie dem Zabbix-Server mitteilen, auf welcher IP-Adresse oder auf welchem Hostnamen ein SNMP-Agent auf Anfragen antwortet. Der Zabbix-Server verwendet dazu nicht das Standard-Interface. Wenn Sie im Hauptmenü über Configuration|Hosts einen Host auswählen oder neu anlegen, klicken Sie auf den Link Add im Kasten „SNMP Interface“. Tragen Sie die IP-Adresse oder den Hostnamen ein, über den Sie ein SNMP-Gerät überwachen.
Seit Version 2.4 werden SNMP-Daten standardmäßig mit SNMP GETBULK abgerufen, was Sie mit dem Kommandozeilenwerkzeug snmpbulkwalk simulieren können. Bulk-Abfragen sind effizienter als viele einzelne SNMP-Abfragen. Sollte das überwachte Gerät keine Bulk-Abfragen unterstützen, deaktivieren Sie diesen Modus.

Hinzufügen eines SNMP-Interface für einen Host

SNMP-Items in Zabbix einrichten

Wenn Sie mit einem MIB-Browser oder snmpwalk die OIDs identifiziert haben, ist der schwierigste Teil der Arbeit schon getan.

Ab Zabbix-Version 2.0 müssen Sie in der Konfiguration des Hosts ein Interface (IP oder DNS-Name) auswählen, über welches der Zabbix-Server die SNMP-Daten abruft. Wenn Sie einen Host per Zabbix-Agenten und per SNMP überwachen wollen, fügen Sie zwei Interface hinzu, wobei Sie eines für den Agenten und das andere für SNMP verwenden.

  • Beim Anlegen von Items wählen Sie als Type „SNMP Agent“, wobei Sie die zum Host passende Version von SNMP auswählen müssen. Wenn Sie die Daten per snmpwalk mit der Version 2c abgerufen haben, wählen Sie als Item-Type „SNMPv2 Agent“ aus.
  • Geben Sie außerdem die sogenannte „Community“ an. In der Regel werden die Daten über den Standardwert public abgerufen.
  • Geben Sie die OID in der ASN.1, in der numerischen Notation oder mit einer textuellen Repräsentation der OID an.
  • Als Item-Key können Sie einen beliebigen Key vergeben, der weder Sonder- noch Leerzeichen enthalten darf. Über diesen Key identifizieren Sie später in den Triggern das Item.
  • Achten Sie wie bei jedem Item auf den korrekten Type of Information. Sowohl snmpwalk als auch der MIB-Browser geben schon an, von welchem Typ die per SNMP gelieferten Daten sind.

Die restliche Konfiguration eines SNMP-Items ist identisch zu jedem anderen Item.

Die Angabe der OID kann in drei verschiedenen Notationen erfolgen.

Beispiel Netzwerkgerät per SNMP überwachen

Sobald Sie für einen Host ein SNMP-Interface angelegt haben, können Sie Items vom Typ „SNMP“ anlegen. Die Auswahl des „Host Interface“ wechselt automatisch zum hinterlegten SNMP-Interface. Den Key für ein SNMP-Item vergeben Sie selbst nach Ihren eigenen Vorstellungen. Im Feld „SNMP OID“ tragen Sie die OID in einem der drei gültigen Formate ein. Legen Sie zu Testzwecken zum Beispiel ein Item mit der OID IF-MIB::ifInOctets.1. Dies entspricht der numerischen OID .1.3.6.1.2.1.2.2.1.10.1. Hinter dieser OID verbirgt sich der Zähler für den ausgehenden Netzwerkverkehr in Bytes (Octets) auf Port 1 eines Switches. Diese OID liefern fast alle Netzwerkgeräte aus. Für jedes Byte, welches den Port „verlässt“, wird der Zähler erhöht. Wenn Sie die Messwerte des Items als „Delta (Speed per second)“ speichern, erhalten Sie den Durchsatz in Bytes per seconds (Bps).

Wenn Sie die Fehlermeldung „snmp_parse_oid(): cannot parse OID "IF-MIB::ifInOctets.1"“ erhalten, basiert Ihr Zabbix-Server höchstwahrscheinlich auf einem Ubuntu- oder Debian-Linux-System. Sie müssen in diesem Fall zuerst die Standard-MIBs installieren (siehe vorangegangene Seiten).
Anlegen eines SNMP-Items

Dynamische Schlüssel-Wert-Paare

Bei vielen Schlüssel-Wert-Paaren ist trotz einer Beschreibung in der MIB immer noch nicht erkennbar, welche Daten genau das Schlüssel-Wert-Paar enthält. Häufig liefert dann ein weiteres Schlüssel-Wert-Paar zusätzliche Informationen. Dies wird zur Identifizierung von Netzwerkschnittstellen eingesetzt.

Die Netzwerkschnittstellen werden in der Regel von 1 bis N durchnummeriert. Folgendes Beispiel ruft den ein- und ausgehenden Traffic auf den Schnittstellen eins bis vier eines Routers ab.

# snmpwalk -v 2c -c public 192.0.2.1 ifTable|grep -e "if.*Octets\.[1-4] "
IF-MIB::ifInOctets.1 = Counter32: 16080
IF-MIB::ifInOctets.2 = Counter32: 4220800912
IF-MIB::ifInOctets.3 = Counter32: 2739232906
IF-MIB::ifInOctets.4 = Counter32: 1526962690
IF-MIB::ifOutOctets.1 = Counter32: 0
IF-MIB::ifOutOctets.2 = Counter32: 330030035
IF-MIB::ifOutOctets.3 = Counter32: 0
IF-MIB::ifOutOctets.4 = Counter32: 4291320708

Mit dieser Information können Sie nicht viel anfangen, weil Sie nicht wissen, welche die Schnittstellen sind. Eine Beschreibung der Schnittstelle wird in einem weiteren Schlüssel-Wert-Paar geliefert.

Zuordnung der Bezeichnung von Netzwerkschnittstellen zu den OIDs
snmpwalk -v 2c -c public 192.0.2.1 ifTable|grep -i "ifDescr\.[1-4] "
IF-MIB::ifDescr.1 = STRING: LOCAL_LOOPBACK
IF-MIB::ifDescr.2 = STRING: LAN
IF-MIB::ifDescr.3 = STRING: WLAN
IF-MIB::ifDescr.4 = STRING: ATM1

Nun wissen Sie, wie die Schnittstellen durchnummeriert werden.
Zabbix nimmt Ihnen diese Zuordnungen ab. Wenn Sie zum Beispiel den Traffic auf der Schnittstelle eth0 eines Routers messen wollen, können Sie anstatt IF-MIB::ifOutOctets.N oder .1.3.6.1.2.1.2.2.1.16.N auch IF-MIB::ifOutOctets["index","ifDescr","eth0"] bzw. .1.3.6.1.2.1.2.2.1.16.["index","ifDescr","eth0"] als OID angeben.

Verwendung eines dynamischen Indexes in der SNMP-OID

In vielen Fällen enthält der Rückgabewert der sogenannten „ifDescr“ nur den Typen der Schnittstelle und keine eindeutige Beschreibung. Das Gerät aus dem nachfolgenden Beispiel eignet sich nicht, um die Netzwerkschnittstellen mit einem Namen zu referenzieren, weil alle Schnittstellen „Ethernet Interface“ heißen.

root@zabbix:~# snmpwalk -v 2c -c public 192.0.2.3|grep -i "ifDescr\.[1-4] "
IF-MIB::ifDescr.1 = STRING: Ethernet Interface
IF-MIB::ifDescr.2 = STRING: Ethernet Interface
IF-MIB::ifDescr.3 = STRING: Ethernet Interface
IF-MIB::ifDescr.4 = STRING: Ethernet Interface

Beispiel: Dynamische Indizes für Switchports

Zabbix macht Ihnen das Finden von passenden OIDs ein wenig bequemer. OIDs, die über einen Index durchnummeriert werden, können Sie auch über eine Art Index-Lookup adressieren.

Wenn Sie im Eingabefeld der OID eckige Klammern verwenden, wird der Ausdruck in den Klammern vom Zabbix-Server interpretiert und ersetzt. Der Ausdruck ["index","ifDescr","WAN2"] beispielsweise veranlasst, dass der Zabbix-Server vor dem SNMP-GET-Request Folgendes macht:

  • sucht in den OIDs nach einer Beschreibung, bei der die ASN.1-Bezeichnung auf den Ausdruck „ifDescr“ passt
  • bildet mit den Fundstellen eine Liste
  • sucht in der Liste den Index, bei dem der OID-Wert gleich „WAN2“ ist
  • ersetzt den kompletten Ausdruck samt der eckigen Klammern durch diesen Index

Im nachfolgenden Beispiel wird ["index","ifDescr","WAN2"] durch 25 ersetzt, weil die Schnittstelle mit der Bezeichnung "WAN2" den Index 25 hat.

Probieren Sie es aus. Laden Sie sich die kostenlose Version des iReasoning MIB-Browser herunter (siehe unten) und starten Sie die Software. Tragen Sie im Feld „Address“ den Hostnamen oder die IP-Adresse eines Gerätes ein, welches per SNMP (Version 2 oder 2c) Daten preisgibt. Als OID können Sie den Bereich .1.3 beibehalten. Wählen Sie als Operations „Walk“ aus. Durch Klick auf Go werden alle Informationen ausgelesen, welche das Gerät ausliefern kann.

Der MIB-Browser liest alle verfügbaren Informationen aus.

Suchen Sie in der Liste der OIDs nach ifDescr.N. Fast alle Netzwerkgeräte liefern über diese OIDs die Beschreibung oder Bezeichnung der Netzwerkschnittstellen oder Switchports aus.

# snmpwalk -v 2c -c public 192.0.2.1 ifTable|grep ifDescr
IF-MIB::ifDescr.1 = STRING: LOCAL_LOOPBACK
IF-MIB::ifDescr.2 = STRING: LAN
IF-MIB::ifDescr.3 = STRING: WLAN
IF-MIB::ifDescr.4 = STRING: ATM1
IF-MIB::ifDescr.5 = STRING: ATM2
IF-MIB::ifDescr.12 = STRING: PPPoE1
IF-MIB::ifDescr.13 = STRING: PPPoE2
IF-MIB::ifDescr.21 = STRING: WDS1
IF-MIB::ifDescr.22 = STRING: WDS2
IF-MIB::ifDescr.23 = STRING: WDS3
IF-MIB::ifDescr.24 = STRING: WDS4
IF-MIB::ifDescr.25 = STRING: WAN2
IF-MIB::ifDescr.26 = STRING: COM1

Legen Sie einen neuen Host an. In der Konfiguration des Interface legen Sie ein Interface vom Typ „SNMP“ an. Als Port wird automatisch 161 eingetragen. Sobald der Host existiert, legen Sie für diesen ein neues Item an. Geben Sie dabei nachfolgende Werte ein. Ersetzen Sie INTERFACE durch den Namen einer Netzwerkschnittstelle, die Sie per MIB-Browser oder snmpwalk ausgelesen haben.

  • Description: Outgoing traffic on interface $1
  • Type: Choose SNMPv2 agent
  • SNMP OID: IF-MIB::ifOutOctets["index","ifDescr","INTERFACE"]
  • Key: ifOutOctets[INTERFACE]
  • Type of information: Numeric (float)
  • Units: Bps
  • Store value: Delta (speed per second).
Netzwerktraffic eines Routers per SNMP auslesen

Mit diesem Beispiel haben Sie ein Item mit einem sogenannten dynamischen Index angelegt. Die OID IF-MIB::ifOutOctets bzw. .1.3.6.1.2.1.2.2.1.16 müsste noch mit der Nummer der Schnittstelle ergänzt werden. Durch die Angabe von ["index","ifDescr","INTERFACE"] wird diese Nummer automatisch in den Schnittstellenbeschreibungen gesucht und an die OID angehängt.

Klonen Sie das soeben angelegte Item. Ersetzen Sie in der OID ifOutOctets durch ifInOctets. Im Item-Key ersetzen Sie ebenfalls Out durch In. Jetzt messen Sie auch den eingehenden Datendurchsatz.

Sollten Sie mit den zuvor erwähnten OIDs keinen Erfolg haben, könnte dies an fehlenden MIBs liegen. Geben Sie dann die OID in einer numerischen Notation an, die keine MIBs benötigt:
Eingehender Datendurchsatz: SNMP OID=.1.3.6.1.2.1.2.2.1.10["index","ifDescr","INTERFACE"]
Ausgehender Datendurchsatz: SNMP OID=.1.3.6.1.2.1.2.2.1.16.["index","ifDescr","INTERFACE"]

Low-Level-Discovery per SNMP

Mit dem Begriff „Low-Level-Discovery“ bezeichnet Zabbix Regeln, die automatisch Items, Trigger und Graphen für erkannte Komponenten anlegt. Auch für SNMP-Items können Sie diese Funktion nutzen. Dies ist besonders bei Netzwerkhardware wie Switches und Router sehr hilfreich. Der Zabbix-Server kann alle verfügbaren Ports erkennen und dann Standard-Items wie den Durchsatz oder die Fehlerrate pro Port als Item anlegen.

Beispiel Switchports automatisch erkennen

  • Legen Sie ein neues Template mit dem Namen „SNMP generic port monitoring“ an.
  • Legen Sie für das Template ein Makro an, in dem Sie die „SNMP-Community“ speichern. Es ist nicht ratsam, die Community „hart codiert“ in den Items einzutragen. Nennen Sie das Makro {$SNMP_COMMUNITY} und weisen Sie den Wert public zu.
  • Weisen Sie dieses Template einem Host zu, für den Sie zuvor ein „SNMP-Interface“ eingerichtet haben. Der Host sollte ein Switch mit aktiviertem SNMP-Monitoring sein. Sollte dieser Switch nicht die Community „public“ verwenden, fügen Sie ein Makro {$SNMP_COMMUNITY} mit der abweichenden Community für diesen Host hinzu.
Anlegen eines neuen universellen Templates für die Überwachung von Switches
  • Wählen Sie die Übersicht der Templates aus und klicken Sie in der Zeile für das Template „SNMP generic port monitoring“ auf den Link Discovery und legen Sie eine neue Regel mit den folgenden Daten an.
    • Name: Interface Discovery
    • Type: SNMPv2 Agent
    • Key: snmp.interface.discovery
    • SNMP OID: discovery[{#SNMPVALUE},IF-MIB::ifDescr]
    • SNMP Community: {$SNMP_COMMUNITY}
    • Update interval (in sec): 30 sek. Sobald Ihre Discovery-Regel funktioniert, sollten Sie den Wert erhöhen, zum Beispiel auf 3600, da sich die Anzahl der Switchports im Allgemeinen nicht ständig ändert.

Diese Regel können Sie sich wie den nachfolgenden Aufruf auf der Kommandozeile vorstellen.

root@zabbix:~# snmpwalk -v 2c -c public 192.0.2.4 IF-MIB::ifDescr
IF-MIB::ifDescr.1 = STRING: Port1
IF-MIB::ifDescr.2 = STRING: Port2
IF-MIB::ifDescr.3 = STRING: Port3
IF-MIB::ifDescr.4 = STRING: Port4
IF-MIB::ifDescr.5 = STRING: Port5
IF-MIB::ifDescr.6 = STRING: Port6
IF-MIB::ifDescr.7 = STRING: Port7
IF-MIB::ifDescr.8 = STRING: Port8

Der Zabbix-Server hält nun intern eine json-codierte Liste aller Switch-Ports vor. In der Liste sind die beiden Key-Value-Paare {#SNMPINDEX} und {#SNMPVALUE} gespeichert. {#SNMPINDEX} ist ein interner Zähler.

Zabbix erkennt Switchports automatisch per “Discovery Rule“.

Die meisten Geräte liefern über die OID IF-MIB::ifOperStatus die Information, ob der entsprechende Port belegt ist, oder nicht. Wenn Sie nur die belegten Ports eines Gerätes per Discovery Regel erkennen möchten, erweiteren Sie SNMP OID der Regel wie folgt:

   discovery[{#SNMPVALUE},IF-MIB::ifDescr,{#IFOPERSTATUS},IF-MIB::ifOperStatus]

Nun enthält die Liste, welche zum Anlegen der Items verwendet wird, drei Elemente.

  • {#SNMPINDEX} als fortlaufenden Zähler
  • {#SNMPVALUE}, Inhalt von IF-MIB::ifDescr
  • {#IFOPERSTATUS} Inhalt von IF-MIB::ifOperStatus, der den Wert 1 annimmt, wenn der Port belegt ist.

Mit einer Filterregel können Sie das Anlegen von Items auf die Port beschräken, die {#IFOPERSTATUS} = 1 haben.

Nicht benutzte Switchports ignorieren.

Item-Prototypen anlegen:
Nachdem Sie die Discovery-Regel angelegt haben, fügen Sie dieser einen Item-Prototypen hinzu. Der Prototyp ist eine Item-Vorlage, welche aus Items automatisch erstellt werden. Für jedes Element aus der Discovery-Regel wird ein Item erzeugt, welches mindestens einen Prototyp verwendet. Ihr erster Prototyp sollte wie folgt konfiguriert werden:

    • Name: ifInOctets Port {#SNMPVALUE}
    • Type: SNMPv2 Agent
    • Key: ifInOctets["Port_{#SNMPINDEX}"]
    • SNMP OID: IF-MIB::ifInOctets.{#SNMPINDEX}
    • SNMP Community: {$SNMP_COMMUNITY}
    • Type of information: Numeric (float)
    • Units: Bps
    • Store Value: Delta (speed per second)

Für jeden Switch-Port legt der Zabbix-Server nun ein Item an, so dass der eingehende Netzwerkverkehr als „Bytes per Second“ gemessen wird.

Sollte das überwachte Gerät keine eineindeutigen Portbezeichnungen haben, beispielsweise leifert IF-MIB::ifDescr.N immer „Ethernet Interface“ zurück. Verwenden Sie in diesem Fall den internen Zähler von Zabbix im Namen des Prototyps: ifInOctets Port {#SNMPINDEX}.
Der Zabbix-Server legt Items für jeden erkannten Switch-Port an.

Prüfen Sie, ob die Discovery-Regel erfolgreich war. Klicken Sie auf Configuration|Hosts und wählen Sie einen Host aus, der das zuvor angelegte Template „SNMP generic port monitoring“ anwendet. In der Spalte „Items“ sollte nun eine den Ports entsprechende Anzahl an Items angezeigt werden. Klicken Sie auf den Link „Items“ und schauen Sie sich die Liste der Items an. Die automatisch angelegten Items enthalten gelb markiert den Namen der Discovery-Regel als Präfix.

Zabbix hat 16 Ports erkannt und für jeden Port ein Item angelegt.

Klonen Sie anschließend den Item-Prototypen und legen Sie weitere Prototypen mit den Parametern der nachfolgenden Tabelle an.

Name Key SNMP OID Beschreibung
ifOutOctets Port {#SNMPVALUE} {#SNMPINDEX} inOutOctets["Port_{#SNMPINDEX}"] IP-MIB::ifOutOctets.{#SNMPINDEX} Ausgehender Netzwerkverkehr Bytes/sec
ifInErrors Port {#SNMPVALUE} {#SNMPINDEX} ifInErrors["Port_{#SNMPINDEX}"] IP-MIB::ifInErrors.{#SNMPINDEX} Fehler pro Sekunde eingehender Netzwerkverkehr
ifOutErrors Port {#SNMPVALUE} {#SNMPINDEX} ifOutErrors["Port_{#SNMPINDEX}"] IP-MIB::ifOutErrors.{#SNMPINDEX} Fehler pro Sekunde ausgehender Netzwerkverkehr
ifOutDiscards Port {#SNMPVALUE} {#SNMPINDEX} ifOutDiscards["Port_{#SNMPINDEX}"] IP-MIB::ifOutDiscards.{#SNMPINDEX} Verworfene ausgehende Pakete pro Sekunde
ifInDiscards Port {#SNMPVALUE} {#SNMPINDEX} ifInDiscards["Port_{#SNMPINDEX}"] IP-MIB::ifInDiscards.{#SNMPINDEX} Verworfene eingehende Pakete pro Sekunde

Ein Graph, der übersichtlich eingehenden und ausgehenden Datenverkehr visualisiert, sollte auch nicht fehlen. Wählen Sie für das Template „SNMP generic port monitoring“ die tabellarische Ansicht der Discovery-Regeln aus. Klicken Sie in der Zeile „Interface Discovery“ auf den Link Graph prototypes und legen Sie mit der Schaltfläche oben rechts „Create Graph Prototype“ einen neuen Prototypen für Graphen an. Geben Sie diesem zum Beispiel den Namen „Network In-Out-Overview“. Fügen Sie dem Graphen mit dem Link „Add prototyp“ Items hinzu.

Anlegen eines Graph-Prototyps