强制SNMP将数字视为整数

时间:2013-11-04 14:19:10

标签: linux bash snmp

我是SNMP的新手并且设置了OID,所以请稍等一下。我有两个脚本从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中,我为两个脚本添加了一个扩展部分,它接受该数字并将其与此示例中表示的OID相关联Get_rxMbps:

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来查看并使用该数字作为整数而不是字符串。

2 个答案:

答案 0 :(得分:0)

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

您可以通过传递选项snmpwalk告诉snmpget-OQ和类似命令删除类型信息,但这仍然会导致字符串被引用(至少对于{{1}命令)。

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

答案 1 :(得分:0)

您不能;这是“扩展”功能的限制。 NET-SNMP-EXTEND-MIB::nsExtendOutputFull行是STRING,句点。您的数据必须符合NET-SNMP-EXTEND-MIB的定义,这些定义实际上别无选择,只能将所有内容都以字符串形式发送(因为类型在MIB时是固定的)。

听起来您想正确定义自己的MIB的子代理,也许使用AgentX功能。但是,您将需要为此增加对监视软件的支持,除非您对它不了解正在接收的信息感到满意。

您也许可以从this example that shows multiple extension methods中汲取灵感,here对此进行了更详细的描述。

(我很想建议作弊,然后将您的值作为脚本的返回代码而不是文本输出传递给Net-SNMP;然后您将其作为NET-SNMP-EXTEND-MIB::nsExtendResult INTEGER。但是,我不知道Net-SNMP是否对返回码有限制,除非您解决了这一点,否则这将是一点麻烦。)