Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 强制SNMP将数字视为整数_Linux_Bash_Snmp - Fatal编程技术网

Linux 强制SNMP将数字视为整数

Linux 强制SNMP将数字视为整数,linux,bash,snmp,Linux,Bash,Snmp,我有两个脚本,它们从SAR中获取值并将它们放在日志文件中—例如: rxkBps=`sar -n DEV 1 295 | tail -n1 | awk '{print $5}'` rxMbps=$(echo "scale=2;$rxkBps/128" | bc -l) echo $rxMbps >./rxMbps.log exit 该数字始终是十进制数字,例如:.06。 在snmpd.conf中,我为两个脚本都添加了一个扩展部分,该部分接受该数字并将其与本例中的Get_rxMbps表示的O

我有两个脚本,它们从SAR中获取值并将它们放在日志文件中—例如:

rxkBps=`sar -n DEV 1 295 | tail -n1 | awk '{print $5}'`
rxMbps=$(echo "scale=2;$rxkBps/128" | bc -l)
echo $rxMbps >./rxMbps.log
exit
该数字始终是十进制数字,例如:.06。 在snmpd.conf中,我为两个脚本都添加了一个扩展部分,该部分接受该数字并将其与本例中的Get_rxMbps表示的OID关联:

extend Get_rxMbps /bin/sh /usr/local/bin/Get_rxMbps.sh
当我在NET-SNMP-EXTEND-MIB::nsExtendObjects上运行snmpwalk时,我得到了信息,但它将其视为字符串,我们的监控软件无法转换或使用字符串信息

NET-SNMP-EXTEND-MIB::nsExtendCommand."Get_rxMbps" = STRING: /bin/sh
NET-SNMP-EXTEND-MIB::nsExtendArgs."Get_rxMbps" = STRING: /usr/local/bin/Get_rxMbps.sh
NET-SNMP-EXTEND-MIB::nsExtendInput."Get_rxMbps" = STRING:
NET-SNMP-EXTEND-MIB::nsExtendCacheTime."Get_rxMbps" = INTEGER: 5
NET-SNMP-EXTEND-MIB::nsExtendExecType."Get_rxMbps" = INTEGER: exec(1)
NET-SNMP-EXTEND-MIB::nsExtendRunType."Get_rxMbps" = INTEGER: run-on-read(1)
NET-SNMP-EXTEND-MIB::nsExtendStorage."Get_rxMbps" = INTEGER: permanent(4)
NET-SNMP-EXTEND-MIB::nsExtendStatus."Get_rxMbps" = INTEGER: active(1)
NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."Get_rxMbps" = STRING: .83
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."Get_rxMbps" = STRING: .83
NET-SNMP-EXTEND-MIB::nsExtendOutNumLines."Get_rxMbps" = INTEGER: 1
NET-SNMP-EXTEND-MIB::nsExtendResult."Get_rxMbps" = INTEGER: 0
NET-SNMP-EXTEND-MIB::nsExtendOutLine."Get_rxMbps".1 = STRING: .83

我是新手,继承了其他人的工作,因此如果有更好的方法,我也愿意这样做,但我需要SNMP将该数字作为整数而不是字符串查看和使用。

类型在相应的MIB文件中定义,除非您是该文件的作者,否则不应修改该文件

您可以告诉snmpwalk、snmpget和类似的命令通过传递option-OQ来删除类型信息,但这仍然会导致至少对我的snmpwalk命令引用字符串


我建议您调整监控软件或通过脚本传递SNMP输出,该脚本将相应地转换/删除字符串类型信息。

您不能;这是扩展功能的一个限制。NET-SNMP-EXTEND-MIB::nsExtendOutputFull行是字符串,句号。您的数据必须符合NET-SNMP-EXTEND-MIB定义,因为类型在MIB时是固定的,因此,NET-SNMP-EXTEND-MIB定义除了将所有内容作为字符串发送之外别无选择

听起来您想为自己的MIB正确定义一个子代理,也许可以使用AgentX功能。但是,您需要在监控软件中添加支持,除非您不了解它接收到的信息

你也许能从中获得一些灵感,更详细地描述


我有点倾向于建议作弊,并将您的值作为脚本的返回码传递给NetSNMP,而不是作为其文本输出;然后将其作为整数保存在NET-SNMP-EXTEND-MIB::nsExtendResult中。但是,我不知道Net SNMP是否对返回代码有限制,除非你解决了,否则这将有点像黑客。

我无法调整我的监控软件,我没有访问权限或能力。即使通过python传递这些信息,声明它为int,它仍然将其作为字符串读取。知道SNMP不支持任何类型的十进制或浮点数可能会很有趣。可能是因为它们在BER中的编码会很复杂。鉴于此,我认为将十进制数作为字符串发送是完全合适的。它必须在接收器端转换。@Jolta是传统的