在此页面上
示例:使用 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