Verwendung der Net-SNMP Tool Suite zum Verwalten und Überwachen von Servern

Einführung

Ein großer Teil Ihrer Systemadministrationstätigkeit besteht darin, genaue Informationen zu Ihren Servern und Ihrer Infrastruktur zu sammeln. Es gibt eine Reihe von Tools und Optionen zum Sammeln und Verarbeiten dieser Art von Informationen. Viele von ihnen basieren auf einer Technologie namens * SNMP *.

SNMP steht für einfaches Netzwerkverwaltungsprotokoll. Auf diese Weise können Server Informationen über ihren aktuellen Status austauschen und über einen Kanal können Administratoren vordefinierte Werte ändern. Während das Protokoll selbst sehr einfach ist, kann die Struktur von Programmen, die SNMP implementieren, sehr komplex sein.

In früheren Handbüchern haben wir https://www.digitalocean.com/community/tutorials/an-einführung-in-snmp-einfaches-Netzwerkmanagement-protokoll die Grundlagen des SNMP-Protokolls behandelt] und https://www. digitalocean.com/community/tutorials/installations- und konfigurationsanleitung- für-snmp-daemon-und-client-on-ubuntu-14-04 Installieren und Konfigurieren von SNMP-Komponenten auf Ubuntu 14.04-Servern]. In diesem Handbuch werden wir uns mit der grundlegenden Verwendung vieler der Tools befassen, die mit der von uns verwendeten "+ net-snmp +" - Suite geliefert werden.

Wir werden diskutieren, wie wir die im letzten Handbuch eingerichtete Konfiguration nutzen können, um Informationen zu sammeln und Remote-Hosts zu manipulieren. In diesem Lernprogramm wird davon ausgegangen, dass Sie zwei Hosts eingerichtet haben, die sich am Ende der https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-an-snmp-daemon-and- befanden. client-on-ubuntu-14-04 [Installations- und Konfigurationshandbuch].

Verwenden von SNMP-Clientbefehlen

Die von uns verwendete Tool-Suite "+ net-snmp +" enthält eine Reihe von Dienstprogrammen, die zum Abfragen oder Festlegen von OID-Werten auf Remote-Hosts hilfreich sind. Glücklicherweise nutzen die meisten Tools eine gemeinsame Syntax und weisen ähnliche Verwendungsmuster auf. Wir werden die grundlegende Verwendung einiger der populäreren unten erläutern.

Für die Zwecke dieses Handbuchs wird davon ausgegangen, dass Sie mit dem Authentifizierungsteil vertraut sind, den Sie für die Bereitstellung von "+ net-snmp " - Befehlen benötigen. Wir werden in den folgenden Abschnitten auf alle Authentifizierungsinformationen als "+" verweisen.

Wenn Sie set up an snmp.conf configuration for your client Wie hier beschrieben, können Sie diesen Abschnitt des Befehls entfernen, da die Authentifizierungsdetails aus Ihrer Konfigurationsdatei gelesen werden.

Wenn Sie keine "+ snmp.conf" -Datei haben, müssen Sie die "Authentifizierungsinformationen" in jedem Befehl durch die Informationen ersetzen, die für die Verbindung zu Ihrem Remote-Daemon erforderlich sind. Für das in dieser Reihe eingerichtete "+ Demo +" - Konto können die folgenden Werte verwendet werden:

-u demo -l authPriv -a MD5 -x DES -A my_new_password -X my_new_password

Ersetzen Sie Ihre eigenen Werte, wenn Sie diese Befehle ausführen, wenn Sie sich in einer anderen Umgebung befinden.

Nachdem Sie die erforderlichen Authentifizierungsdetails kennen, machen Sie sich mit einigen der verfügbaren Befehle vertraut.

Abrufen einzelner OID-Werte mit SnmpGet

Dies ist wahrscheinlich der grundlegendste Befehl zum Abfragen von Informationen mit SNMP. Unter Verwendung der zuvor beschriebenen grundlegenden Authentifizierungsflags kann mit dem Befehl "+ snmpget +" der Wert einer OID gelesen werden, auf die der Benutzer Zugriff hat.

Die grundlegende Verwendung besteht darin, eine bekannte numerische OID anzugeben. Zum Beispiel können wir die Systembeschreibung abrufen, indem wir Folgendes eingeben:

snmpget   1.3.6.1.2.1.1.1.0

Da wir im letzten Handbuch das Paket "+ snmp-mibs-downloader +" auf unserem Manager-Computer installiert haben, können wir auch auf gängige OIDs mit ihrem Namen verweisen. Zum Beispiel könnten wir die gleichen Informationen erhalten, indem wir Folgendes eingeben:

snmpget   sysDescr.0

Abrufen des nächsten verfügbaren OID-Werts mit SnmpGetNext

Dieser Befehl wird verwendet, um den Wert der OID nach dem angegebenen Wert abzurufen. Da die MIB-Datenbank eine begehbare Hierarchie ist, können ihre Werte nacheinander abgerufen werden. Durch Nutzung dieser Eigenschaft können wir den Wert (und die OID-Bezeichnung) für das nächste Objekt aus jedem Objekt in der Baumstruktur herausfinden.

Zum Beispiel haben wir oben gesehen, wie man die Systembeschreibung erhält. Um die nächste OID und ihren Wert herauszufinden, können wir denselben Befehl aufrufen, diesmal jedoch mit dem Befehl + snmpgetnext +:

snmpgetnext   sysDescr.0
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10

Dies gibt die System-ObjectID zurück, die das nächste sequentielle Objekt in der Baumstruktur ist. Wir können dies mit der zurückgegebenen OID immer wieder wiederholen, um jedes sequenzielle Objekt zu erhalten:

snmpgetnext   sysObjectID.0
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (114216) 0:19:02.16

Diese können wie zuvor die String-OIDs oder die numerischen OIDs verwenden.

Verwenden von SnmpWalk zum Abrufen eines Abschnitts der MIB-Hierarchie

Um alle OIDs unter einer bestimmten OID abzurufen, können Sie den Befehl + snmpwalk + verwenden. Dies gibt den gesamten Baum zurück, der unter dem angegebenen Punkt existiert.

Zum Beispiel können wir alle Werte im Abschnitt "+ system +" des Baums abrufen, indem wir Folgendes eingeben:

snmpwalk   system
SNMPv2-MIB::sysDescr.0 = STRING: Linux target 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (126926) 0:21:09.26
SNMPv2-MIB::sysContact.0 = STRING: [email protected]
SNMPv2-MIB::sysName.0 = STRING: target
SNMPv2-MIB::sysLocation.0 = STRING: Sitting on the Dock of the Bay
SNMPv2-MIB::sysServices.0 = INTEGER: 72
. . .

Dieser Befehl wird ausgeführt, indem SNMP-getNext-Anforderungen automatisch an den Host gesendet werden, bis der gesamte Baum unter dem angeforderten Wert erstellt werden kann.

Wenn Sie im Grunde den gesamten MIB-Baum abrufen möchten, können Sie den Befehl im Stammverzeichnis absetzen:

snmpwalk   .

Dadurch wird der gesamte Baum zurückgegeben, auf den der angegebene Benutzer zugreifen kann.

Dies kann zusammen mit "+ grep " verwendet werden, um nach bestimmten OID-Namen zu suchen. Beispielsweise wissen Sie möglicherweise, dass die OID " sysUpTime.0 +" die Länge der SNMP-Daemon-Aktivität auf den Remote-Hosts zurückgibt, Sie sind jedoch gespannt, wie lange der Server selbst online war.

Wir können den Befehl + snmpwalk + verwenden, um die gesamte Hierarchie der OIDs abzurufen und sie dann mit grep zu filtern, um nach Dingen zu suchen, die eine Betriebszeit im Namen haben. Wir werden das + -i + Flag verwenden, um die Groß- und Kleinschreibung bei unserer Suche auszuschalten:

snmpwalk   . | grep -i uptime

Sie erhalten eine Antwort, die so aussieht:

DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (113856) 0:18:58.56
SNMPv2-MIB::sysORUpTime.1 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.2 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.3 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.4 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.5 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.6 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.7 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.8 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.9 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.10 = Timeticks: (0) 0:00:00.00

NOTIFICATION-LOG-MIB::nlmLogVariableID."default".1.1 = OID: DISMAN-EVENT-MIB::sysUpTimeInstance
NET-SNMP-AGENT-MIB::nsModuleName."".8.1.3.6.1.2.1.1.3.127 = STRING: mibII/sysUpTime

Nachdem wir einige dieser Werte ausprobiert haben, können wir feststellen, dass die OID "+ hrSystemUptime.0 +" den korrekten Wert für die Betriebszeit enthält. Wann immer wir wollen, wie lange es her ist, seit diese Maschine gebootet wurde, können wir diese OID verwenden:

snmpget   hrSystemUptime.0
HOST-RESOURCES-MIB::hrSystemUptime.0 = Timeticks: (9795352) 1 day, 3:12:33.52

Wie Sie sehen, kann + snmpwalk + sehr hilfreich sein, um die richtigen OIDs für Werte zu ermitteln.

Übersetzen Sie mit SnmpTranslate zwischen numerischen und String-OIDs

Einer der hilfreichsten Befehle in der Suite kommuniziert nicht mit dem Remote-Host. Stattdessen hilft es uns einfach, Informationen über die MIB-Hierarchie zu ermitteln.

Mit dem Hilfsprogramm + snmptranslate + können wir numerische Ergebnisse einfach in ihre Textdarstellung konvertieren:

snmptranslate 1.3.6.1.2.1.1.1.0
SNMPv2-MIB::sysDescr.0

Dies gibt das MIB-Modul an, das den textuellen Namen und den Namen für die OID selbst definiert.

Wir können das Tool auch verwenden, um in die andere Richtung zu übersetzen. Als wir die Text-MIB für die Betriebszeit des Systems ("+ hrSystemUptime.0 ") herausfanden, waren wir möglicherweise neugierig, wo sich der definierte Baum befindet. Wir könnten das " -On +" - Flag übergeben, um die numerische Adresse zu erhalten.

Denken Sie daran, das MIB-Modul einzuschließen, das angezeigt wird, wenn Sie Informationen zu einer OID erhalten:

snmptranslate -On HOST-RESOURCES-MIB::hrSystemUptime.0
.1.3.6.1.2.1.25.1.1.0

Mit diesem Tool können Sie auch viele andere detaillierte Informationen zu einem beliebigen Punkt abrufen. Mit dem Flag "+ -Td +" können Sie beispielsweise eine vollständige Beschreibung mit dem Pfad unten abrufen:

snmptranslate -Tp 1.3.6.1.2.1.1.1.0
SNMPv2-MIB::sysDescr.0
sysDescr OBJECT-TYPE
 -- FROM   SNMPv2-MIB
 -- TEXTUAL CONVENTION DisplayString
 SYNTAX    OCTET STRING (0..255)
 DISPLAY-HINT  "255a"
 MAX-ACCESS    read-only
 STATUS    current
 DESCRIPTION   "A textual description of the entity.  This value should
           include the full name and version identification of
           the system's hardware type, software operating-system,
           and networking software."
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) system(1) sysDescr(1) 0 }

Sie können die Anzeige der Ausgabe ändern, indem Sie einen "+ -O_ " - Parameter übergeben, wobei das "_" durch ein Ausgabeformat ersetzt wird. Die vollständige Liste finden Sie im Abschnitt "AUSGABEOPTIONEN" der Manpage " snmpcmd +". Einige der gebräuchlichsten Optionen sind jedoch:

Output Flag Description Example

-Oa

Display in ASCII strings

SNMPv2-MIB::sysDescr.0

-Of

Display full textual path to OID

.iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0

-On

Display full numerical path to OID

.1.3.6.1.2.1.1.1.0

-Os

Display only the end textual OID representation

sysDescr.0

Beachten Sie, dass die oben genannten Formatierungsoptionen auch auf die meisten anderen Tools in dieser Suite angewendet werden können, um die Ausgabe wie gewünscht zu formatieren.

Tabellendaten mit formatierter Ausgabe mit SnmpTable abrufen

Einige mit SNMP gespeicherte Informationen sind tatsächlich tabellarisch. Obwohl + snmpwalk + alle relevanten Daten anzeigen kann, ist die Formatierung für einige Anwendungen nicht ideal.

Zum Beispiel, wenn wir + snmpwalk + auf der + udpTable + OID verwenden:

snmpwalk   udpTable

Wir würden das bekommen:

UDP-MIB::udpLocalAddress.0.0.0.0.161 = IpAddress: 0.0.0.0
UDP-MIB::udpLocalAddress.0.0.0.0.35679 = IpAddress: 0.0.0.0
UDP-MIB::udpLocalPort.0.0.0.0.161 = INTEGER: 161
UDP-MIB::udpLocalPort.0.0.0.0.35679 = INTEGER: 35679

Wenn wir jedoch die gleiche Anfrage mit + snmptable + machen:

snmptable   udpTable

Wir würden eine schön formatierte Tabelle erhalten, wie folgt:

udpLocalAddress udpLocalPort
        0.0.0.0          161
        0.0.0.0        35679

Dies ist eine viel schönere Formatierung und für den menschlichen Leser einfacher zu verarbeiten.

Werte mit SnmpSet ändern

Dieser Befehl wird verwendet, um den Wert in eine OID zu schreiben. Während die anderen Befehle bisher zum Abrufen von Informationen verwendet wurden, werden mit diesem Befehl Daten auf dem Host geändert.

Während der Befehl + snmpset + den größten Teil seiner Syntax von den anderen Befehlen übernimmt, sind einige zusätzliche Informationen zum Festlegen der Werte erforderlich. Die grundlegende Syntax sieht folgendermaßen aus:

snmpset

Die meisten der oben genannten Felder sind selbsterklärend. Die Datentypen erfordern jedoch etwas mehr Erklärung. Jeder Typ wird durch ein einzelnes Zeichen dargestellt. Die Liste der möglichen Typen ist unten:

  • * i *: Ganzzahl

  • * u *: Ganzzahl ohne Vorzeichen

  • * s *: String

  • * x *: Hexadezimalzeichenfolge

  • * d *: Dezimalzeichenfolge

  • * n *: Nullobjekt

  • * o *: Objekt-ID

  • * t *: Zeit tickt

  • * a *: IP-Adresse

  • * b *: Bits

Da wir das Paket "+ snmp-mibs-downloader " heruntergeladen haben, können Sie die meiste Zeit durch Eingabe von " = +" anstelle einer der Typenkennungen davonkommen.

Um diesen Befehl zu demonstrieren, können wir einen der in unserer Datei "+ snmpd.conf +" auf dem Agentencomputer festgelegten Werte auskommentieren. Wenn Sie Werte in der Konfigurationsdatei angeben, wird diese im Wesentlichen hart codiert, sodass Sie den Wert nicht mit normalen SNMP-Methoden ändern können.

Öffnen Sie auf dem Agentencomputer die Datei "+ / etc / snmp / snmpd.conf +":

sudo nano /etc/snmp/snmpd.conf

Kommentieren Sie die Direktive "+ sysLocation +" aus:

sysLocation  Sitting on the Dock of the Bay

Speichern und schließen Sie die Datei. Starten Sie nun den Dienst neu:

sudo service snmpd restart

Jetzt können wir von unserer Verwaltungsmaschine aus die OID "+ sysLocation +" auf "Earth" setzen, indem wir dies eingeben. Beachten Sie das "s", das angibt, dass der Datentyp eine Zeichenfolge ist:

snmpset   sysLocation.0 s "Earth"
SNMPv2-MIB::sysLocation.0 = STRING: Earth

Wir können testen, ob der Typbezeichner "+ = +" den Werttyp korrekt festlegt, indem wir unsere Position verfeinern:

snmpset   sysLocation.0 = "New York City"
SNMPv2-MIB::sysLocation.0 = STRING: New York City

Es hat unseren Wert korrekt als reguläre Zeichenfolge interpretiert.

Effizientes Ausstellen von Anfragen mit SnmpBulkGet und SnmpBulkWalk

Das Ausgeben von wiederholten "+ snmpget " - und " snmpwalk +" - Anforderungen kann bei wiederholter Verwendung zu ziemlich viel Netzwerkverkehr führen.

Um dieses Problem zu umgehen, wurden zwei Companion-Befehle mit den Namen "+ snmpbulkget " und " snmpbulkwalk +" erstellt. Diese packen alle Rückgabewerte in eine einzelne Transaktion und nicht in eine Transaktion für jeden zurückgegebenen OID-Wert. Sie können auch mehr als eine OID gleichzeitig eingeben.

Um + snmpbulkget zu verwenden, übergeben Sie eine oder mehrere KIDs oder Zweige und Sie erhalten so viele Werte für zusätzliche OIDs zurück, wie in das Paket passen:

snmpbulkget   system
SNMPv2-MIB::sysDescr.0 = STRING: Linux target 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (429891) 1:11:38.91
SNMPv2-MIB::sysContact.0 = STRING: call now
SNMPv2-MIB::sysName.0 = STRING: target
SNMPv2-MIB::sysLocation.0 = STRING: New York City
SNMPv2-MIB::sysServices.0 = INTEGER: 72
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORID.1 = OID: SNMP-MPD-MIB::snmpMPDCompliance
SNMPv2-MIB::sysORID.2 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance

Zu beachten ist, dass "+ snmpbulkget " wie ein " snmpgetnext " - Befehl funktioniert, dh, das als Argument angegebene Objekt wird weggelassen. Im obigen Beispiel haben wir anstelle eines bestimmten Objekts eine Verzweigung angegeben. Sie können sich " snmpbulkget " als " snmpwalk +" - Aufruf vorstellen, aber die Ergebnisse werden in einem Paket vorliegen.

Der Befehl "+ snmpbulkwalk " funktioniert auf ähnliche Weise, führt jedoch weiterhin " BulkGet +" - Befehle aus, bis der gesamte Teilbaum abgerufen wurde.

Fazit

Wie Sie sehen, können Sie mit der + net-snmp + - Suite Daten auf verschiedene Arten abrufen und bearbeiten. Durch Skripten dieser Aktionen oder die Nutzung dieser Dienstprogramme in Anwendungen können Sie komplexe Überwachungs- und Verwaltungsumgebungen erstellen.

Related