AUF DIESER SEITE
Beispiel: Verarbeiten nicht mehr unterstützter OIDs mit einem SNMP-Skript
Dieses Beispielskript zeigt, wie Objektkennungen (OIDs) verarbeitet werden, die auf Geräten mit Junos OS nicht unterstützt werden.
Anforderungen
Junos OS Version 15.1 oder höher bei der Verwendung von SLAX SNMP-Skripten.
Junos OS Version 16.1R3 oder höher bei Verwendung von Python SNMP-Skripten auf Switches der QFX-Serie oder Routern der MX-Serie, PTX-Serie oder T-Serie.
Junos OS Version 17.1R1 oder höher bei der Verwendung von Python SNMP-Skripten auf Switches der EX-Serie.
Junos OS Version 17.3R1 oder höher bei der Verwendung von Python SNMP-Skripten auf Services Gateways der SRX-Serie.
SNMP ist auf dem Gerät konfiguriert.
Übersicht und SNMP-Skript
In diesem Beispiel werden zwei äquivalente SNMP-Skripte in SLAX und Python dargestellt, die mehrere nicht mehr unterstützte OIDs verarbeiten. Das Skript gibt den Wert für das angeforderte Objekt zurück, indem es das <snmp-script-results>
Element im SLAX-Skript und die jcs.emit_snmp_attributes()
Funktion im entsprechenden Python-Skript verwendet. Die Erweiterungsfunktion syslog()
wird zum Protokollieren der angeforderten SNMP-Aktion und OID in der Systemprotokolldatei aufgerufen. Weitere Informationen zur syslog()
Funktion finden Sie unter syslog() Function (Python, SLAX und XSLT).
SLAX-Syntax
version 1.0; ns junos = "http://xml.juniper.net/junos/*/junos"; ns xnm = "http://xml.juniper.net/xnm/1.1/xnm"; ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0"; ns dyn = "http://exslt.org/dynamic"; ns snmp extension = "http://exslt.org/functions"; match / { var $snmp-action = snmp-script-input/snmp-action; var $snmp-oid = snmp-script-input/snmp-oid; expr jcs:syslog(8, "snmp-action = ", $snmp-action, " snmp-oid = ", $snmp-oid); if ($snmp-action == 'get') { if($snmp-oid == '.1.3.6.1.4.1.2636.13.61.1.9.1.1.1') { <snmp-script-results> { <snmp-oid> $snmp-oid; <snmp-type> "Integer32"; <snmp-value> "211"; } } else if($snmp-oid == '.1.3.6.1.4.1.2636.13.61.1.9.1.1.2') { <snmp-script-results> { <snmp-oid> $snmp-oid; <snmp-type> "Integer32"; <snmp-value> "429"; } } } else if ($snmp-action == 'get-next') { if($snmp-oid == '.1.3.6.1.4.1.2636.13.61.1.9.1.1') { <snmp-script-results> { <snmp-oid> ".1.3.6.1.4.1.2636.13.61.1.9.1.1.1"; <snmp-type> "Integer32"; <snmp-value> "211"; } } else if ($snmp-oid == '.1.3.6.1.4.1.2636.13.61.1.9.1.1.1') { <snmp-script-results> { <snmp-oid> ".1.3.6.1.4.1.2636.13.61.1.9.1.1.2"; <snmp-type> "Integer32"; <snmp-value> "429"; } } } }
Python-Syntax
import jcs def main(): snmp_action = jcs.get_snmp_action() snmp_oid = jcs.get_snmp_oid() jcs.syslog("8", "snmp_action = ", snmp_action, " snmp_oid = ", snmp_oid) if snmp_action == 'get': if snmp_oid == '.1.3.6.1.4.1.2636.13.61.1.9.1.1.1': jcs.emit_snmp_attributes(snmp_oid, "Integer32", "211") elif snmp_oid == '.1.3.6.1.4.1.2636.13.61.1.9.1.1.2': jcs.emit_snmp_attributes(snmp_oid, "Integer32", "429") elif snmp_action == 'get-next': if snmp_oid == '.1.3.6.1.4.1.2636.13.61.1.9.1.1': jcs.emit_snmp_attributes(".1.3.6.1.4.1.2636.13.61.1.9.1.1.1", "Integer32", "211") elif snmp_oid == '.1.3.6.1.4.1.2636.13.61.1.9.1.1.1': jcs.emit_snmp_attributes(".1.3.6.1.4.1.2636.13.61.1.9.1.1.2", "Integer32", "429") if __name__ == '__main__': main()
Konfiguration
Verfahren
Schritt-für-Schritt-Verfahren
Zum Herunterladen und Aktivieren des Skripts:
Sie können SNMP-Skripte in Python, SLAX oder XSLT erstellen. Sie können die Befehlsbefehlskonvertieren sie zwischen SLAX und XSLT verwenden.
Kopieren Sie das Skript in eine Textdatei, benennen Sie die Datei sample_snmp.slax oder sample_snmp.py, und laden Sie es in das Verzeichnis /var/db/scripts/snmp auf dem Gerät herunter.
Hinweis:Nicht signierte Python-Skripte müssen entweder im Besitz eines Root-Benutzers oder eines Benutzers in der Anmeldungsklasse von Junos OS
super-user
sein, und nur der Dateibesitzer kann über Schreibberechtigungen für die Datei verfügen.Aktivieren Sie das SNMP-Skript und konfigurieren Sie die OID.
Konfigurieren Sie im Konfigurationsmodus die
file filename
Anweisung mit dem entsprechenden Dateinamen und der Erweiterung für Ihre Skriptsprache auf Hierarchieebene[edit system scripts snmp]
und konfigurieren Sie die OID, die das Skript auslöst.[edit system scripts] user@host# set snmp file sample_snmp.slax oid .1.3.6.1.4.1.2636.13.61.1.9.1.1
-
Wenn das Skript in Python geschrieben ist, konfigurieren Sie die
language python
Anweisung entsprechendlanguage python3
.[edit system scripts] user@host# set language python3
Wenn das Skript in Python geschrieben ist, konfigurieren Sie den Benutzer, unter dessen Zugriffsrechte das Skript ausgeführt wird.
[edit system scripts] user@host# set snmp file sample_snmp.py python-script-user username
Hinweis:Wenn Sie die
python-script-user
Anweisung nicht konfigurieren, führt Junos OS standardmäßig Python SNMP-Skripte unter den Zugriffsrechten des Benutzers und der Gruppenobody
aus.Geben Sie den
commit
Befehl aus, um die Konfiguration zu bestätigen.[edit system scripts] user@host# commit
Ergebnisse
Bestätigen Sie im Konfigurationsmodus Ihre Konfiguration, indem Sie den show system scripts snmp
Befehl eingeben.
[edit] user@host# show system scripts snmp file sample_snmp.slax { oid .1.3.6.1.4.1.2636.13.61.1.9.1.1; }
Wenn die Ausgabe die beabsichtigte Konfiguration nicht anzeigt, wiederholen Sie die Konfigurationsanweisungen in diesem Beispiel, um sie zu korrigieren.
Um sicherzustellen, dass sich die aktivierten Dateien auf dem Gerät befinden, listen Sie den Inhalt des Verzeichnisses /var/run/scripts/snmp mit dem Befehl im file list /var/run/scripts/snmp
Betriebsmodus auf.
Überprüfung
Überprüfung der Skriptausführung
Zweck
Überprüfen Sie, ob das SNMP-Skript wie erwartet funktioniert.
Aktion
Geben Sie den show snmp mib get
Befehl , show snmp mib get-next
oder show snmp mib walk
den Befehl aus, um eine SNMP-Anforderung zu generieren.
user@host> show snmp mib get .1.3.6.1.4.1.2636.13.61.1.9.1.1.1 juniperMIB.13.61.1.9.1.1.1 = 211
user@host> show snmp mib get .1.3.6.1.4.1.2636.13.61.1.9.1.1.2 juniperMIB.13.61.1.9.1.1.2 = 429
user@host> show snmp mib get-next .1.3.6.1.4.1.2636.13.61.1.9.1.1.1 juniperMIB.13.61.1.9.1.1.2 = 429
user@host> show snmp mib walk .1.3.6.1.4.1.2636.13.61.1.9.1.1 juniperMIB.13.61.1.9.1.1.1 = 211 juniperMIB.13.61.1.9.1.1.2 = 429
Die Systemprotokolldatei enthält die folgenden Nachrichten nach der Skriptausführung:
Jul 3 10:07:48 host cscript: snmp-action = get snmp-oid = .1.3.6.1.4.1.2636.13.61.1.9.1.1.1 Jul 3 10:07:51 host cscript: snmp-action = get snmp-oid = .1.3.6.1.4.1.2636.13.61.1.9.1.1.2 Jul 3 10:08:05 host cscript: snmp-action = get-next snmp-oid = .1.3.6.1.4.1.2636.13.61.1.9.1.1.1 Jul 3 10:08:24 host cscript: snmp-action = get-next snmp-oid = .1.3.6.1.4.1.2636.13.61.1.9.1.1 Jul 3 10:08:24 host cscript: snmp-action = get-next snmp-oid = .1.3.6.1.4.1.2636.13.61.1.9.1.1.1 Jul 3 10:08:24 host cscript: snmp-action = get-next snmp-oid = .1.3.6.1.4.1.2636.13.61.1.9.1.1.2