このページで
例:SNMP スクリプトによるサポートされていない OID の処理
このサンプルSNMPスクリプトは、Junos OSを実行するデバイスでサポートされていないオブジェクト識別子(OID)を処理する方法を示しています。
要件
SLAX SNMP スクリプトを使用する場合、Junos OS リリース 15.1 以降。
QFX シリーズ スイッチ、MX シリーズ、PTX シリーズ、または T Series ルーターで Python SNMP スクリプトを使用する場合、Junos OS リリース 16.1R3 以降。
EX シリーズ スイッチで Python SNMP スクリプトを使用する場合、Junos OS リリース 17.1R1 以降。
SRX シリーズ サービス ゲートウェイで Python SNMP スクリプトを使用する場合、Junos OS リリース 17.3R1 以降。
SNMPはデバイス上で設定されています。
概要とSNMPスクリプト
この例では、複数のサポートされていない OID に一致して処理する、SLAX と Python に相当する 2 つの SNMP スクリプトが提示されています。このスクリプトは、SLAX スクリプト内の要素とjcs.emit_snmp_attributes()
同等の Python スクリプト内の関数を<snmp-script-results>
使用して、要求されたオブジェクトの値を返します。拡張関数はsyslog()
、システムログファイルに要求されたSNMPアクションとOIDを記録するために呼び出されます。この関数の詳細syslog()
については、 syslog() 関数(Python、SLAX、XSLT)を参照してください。
SLAX 構文
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 構文
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()
構成
手順
手順
スクリプトをダウンロードして有効にするには、次の手順にしたがっています。
Python、SLAX、または XSLT で SNMP スクリプトを作成できます。 要求システム スクリプト を使用すると、SLAX と XSLT 間で変換するコマンドを変換します。
スクリプトをテキスト ファイルにコピーし、 sample_snmp.slax または sample_snmp.py に名前を付け、デバイス上の /var/db/scripts/snmp ディレクトリにダウンロードします。
メモ:符号なしPythonスクリプトは、junos OS
super-user
ログインクラスのルートまたはユーザーのいずれかが所有する必要があり、ファイルの書き込み権限を持つことができるのはファイル所有者だけです。SNMPスクリプトを有効にし、OIDを設定します。
設定モードで、
file filename
階層レベルでスクリプト言語に適したファイル名と拡張子を持つステートメントを[edit system scripts snmp]
設定し、スクリプトをトリガーするOIDを設定します。[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
-
スクリプトが Python で記述されている場合は、必要に応じて または
language python3
ステートメントをlanguage python
設定します。[edit system scripts] user@host# set language python3
スクリプトが Python で記述されている場合は、そのスクリプトが実行するアクセス権限を持つユーザーを構成します。
[edit system scripts] user@host# set snmp file sample_snmp.py python-script-user username
メモ:ステートメントを
python-script-user
設定しない場合、Junos OSはデフォルトで、ユーザーとグループnobody
のアクセス権限の下でPython SNMPスクリプトを実行します。コマンドを
commit
発行して、設定をコミットします。[edit system scripts] user@host# commit
結果
設定モードから、 コマンドを入力して設定を show system scripts snmp
確認します。
[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; }
出力に意図した設定が表示されない場合は、この例の設定手順を繰り返して修正します。
有効なファイルがデバイス上に存在することを確認するには、 運用モードコマンドを使用して /var/run/scripts/snmp ディレクトリの内容を file list /var/run/scripts/snmp
リストします。
検証
スクリプト実行の検証
目的
SNMP スクリプトが想定通りに機能していることを確認します。
アクション
、 、または show snmp mib walk
コマンドをshow snmp mib get
show snmp mib get-next
発行してSNMPリクエストを生成します。
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
システム ログ ファイルには、スクリプト実行後の以下のメッセージが含まれています。
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