在此页面上
示例:使用 SNMP 脚本处理不受支持的 OID
此示例 SNMP 脚本显示如何处理运行 Junos OS 的设备上不受支持的对象标识符 (OID)。
要求
使用 SLAX SNMP 脚本时,Junos OS 版本 15.1 或更高版本。
在 QFX 系列交换机或 MX 系列、PTX 系列或 T 系列路由器上使用 Python SNMP 脚本时,Junos OS 版本 16.1R3 或更高版本。
在 EX 系列交换机上使用 Python SNMP 脚本时,Junos OS 版本 17.1R1 或更高版本。
在 SRX 系列服务网关上使用 Python SNMP 脚本时,Junos OS 版本 17.3R1 或更高版本。
SNMP 在设备上配置。
概述和 SNMP 脚本
在此示例中,SLAX 和 Python 中介绍了两个对等的 SNMP 脚本,用于匹配和处理几个不受支持的 OID。脚本使用 <snmp-script-results>
SLAX 脚本中的元素和 jcs.emit_snmp_attributes()
等效 Python 脚本中的功能,为请求对象返回值。扩展 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 脚本。您可以使用 request system scripts 转换 命令在 SLAX 和 XSLT 之间转换。
根据需要将脚本复制到文本文件中,命名文件 sample_snmp.slax 或 sample_snmp.py,然后将其下载到设备上的 /var/db/scripts/snmp 目录。
注意:未签名的 Python 脚本必须归 Junos OS
super-user
登录类中的 root 或用户所有,并且只有文件所有者才能为该文件写入许可。启用 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 python
或language python3
语句。[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; }
如果输出未显示预期的配置,请重复此示例中的配置说明以将其更正。
要确保启用的文件已在设备上,请使用file list /var/run/scripts/snmp
操作模式命令列出 /var/run/scripts/snmp 目录的内容。
验证
验证脚本执行
目的
验证 SNMP 脚本是否照预期工作。
行动
show snmp mib get
发出 、 show snmp mib get-next
或 show snmp mib walk
命令生成 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