2013-05-03 106 views
1

我想将freeradius统计信息扩展为snmp。我想监视这些值并在rrd文件中收集它们。 我的问题是这些值应该是rrd计数器,但似乎计数器值需要检索INTEGER而不是STRING 。您可以在此snmpwalk中看到该值返回为STRING。SNMP扩展为INTEGER而不是STRING

snmpwalk -v2c -c public 127.0.0.1 .1.3.6.1.3.1983.1.1 

    # output 
    iso.3.6.1.3.1983.1.1.1.0 = INTEGER: 1 
    iso.3.6.1.3.1983.1.1.2.1.2.15.97.99.99.101.115.115.95.114.101.113.117.101.115.116.115 = STRING: "/bin/cat" 
    iso.3.6.1.3.1983.1.1.2.1.3.15.97.99.99.101.115.115.95.114.101.113.117.101.115.116.115 = STRING: "/var/log/freeradius/statistics/total_access_requests" 
    iso.3.6.1.3.1983.1.1.2.1.4.15.97.99.99.101.115.115.95.114.101.113.117.101.115.116.115 = "" 
    iso.3.6.1.3.1983.1.1.2.1.5.15.97.99.99.101.115.115.95.114.101.113.117.101.115.116.115 = INTEGER: 5 
    iso.3.6.1.3.1983.1.1.2.1.6.15.97.99.99.101.115.115.95.114.101.113.117.101.115.116.115 = INTEGER: 1 
    iso.3.6.1.3.1983.1.1.2.1.7.15.97.99.99.101.115.115.95.114.101.113.117.101.115.116.115 = INTEGER: 1 
    iso.3.6.1.3.1983.1.1.2.1.20.15.97.99.99.101.115.115.95.114.101.113.117.101.115.116.115 = INTEGER: 4 
    iso.3.6.1.3.1983.1.1.2.1.21.15.97.99.99.101.115.115.95.114.101.113.117.101.115.116.115 = INTEGER: 1 
    iso.3.6.1.3.1983.1.1.3.1.1.15.97.99.99.101.115.115.95.114.101.113.117.101.115.116.115 = STRING: "9566" 
    iso.3.6.1.3.1983.1.1.3.1.2.15.97.99.99.101.115.115.95.114.101.113.117.101.115.116.115 = STRING: "9566" 
    iso.3.6.1.3.1983.1.1.3.1.3.15.97.99.99.101.115.115.95.114.101.113.117.101.115.116.115 = INTEGER: 1 
    iso.3.6.1.3.1983.1.1.3.1.4.15.97.99.99.101.115.115.95.114.101.113.117.101.115.116.115 = INTEGER: 0 
    iso.3.6.1.3.1983.1.1.4.1.2.15.97.99.99.101.115.115.95.114.101.113.117.101.115.116.115.1 = STRING: "9566" 


    # /etc/snmp/snmpd.conf 
    extend .1.3.6.1.3.1983.1.1 access_requests /bin/cat /var/log/freeradius/statistics/total_access_requests 

通过在文件内打印值来扩展snmp脚本。 由/bin中使用的文件/猫由脚本/usr/local/sbin/radstat.sh产生

如何使这个输出变为整数?

iso.3.6.1.3.1983.1.1.4.1.2.15.97.99.99.101.115.115.95.114.101.113.117.101.115.116.115.1 = STRING: "9566" 

感谢 多米尼克

回答

1

您可能需要使用代替延长,使你的脚本可以指定返回的类型。从man snmpd.conf

通[-p优先] MIBOID PROG 将通过在MIBOID根到指定PROG命令的子树的控制。 GET和这棵树中的OID GETNEXT请求将触发该命令,称为:

PROG -g OID

PROG -n OID分别 ,其中OID是请求OID。 PROG命令应该返回响应varbind作为三个单独的行打印到stdout - 第一行应该是返回值的OID,第二个应该是它的TYPE(文本字符串之一integer,gauge,counter,timeticks,ipaddress ,objectid,或字符串),第三个应该是价值本身。

如果该命令无法返回适当的varbind - 例如指定的OID不对应于GET请求的有效实例,或者没有以下GETNEXT实例 - 则应该退出而不产生任何输出。这将导致SNMP noSuchName错误或noSuchInstance异常。

设置请求将导致命令被称为:

PROG -s OID类型值 其中类型是上面列出的令牌之一,表明作为第三个参数传递的值的类型。

如果赋值成功,PROG命令应该退出而不产生任何输出。通过将其中一个字符串不可写或错误类型写入stdout来指示错误,并且代理将生成相应的错误响应。

相关问题