SNMP扩展为INTEGER而不是STRING

时间:2013-05-03 19:08:12

标签: bash net-snmp

我正在尝试将freeradius统计信息扩展到snmp。我想监视这些值并在rrd文件中收集它们。 我的问题是这些值应该是rrd计数器,但似乎需要检索计数器值 INTEGER而不是STRING。您可以在此snmpwalk中看到该值以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 / cat 使用的文件由脚本 /usr/local/sbin/radstat.sh

生成

如何使此输出成为INTEGER?

    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 个答案:

答案 0 :(得分:1)

您可能需要使用传递而不是 extend ,以便您的脚本可以指定返回的类型。来自man snmpd.conf

  

传递[-p priority] MIBOID PROG       将根据MIBOID的子树的控制权传递给指定的PROG命令。此树中的OET和GETNEXT请求将触发此命令,称为:

     

PROG -g OID

     

PROG -n OID       分别是OID是请求的OID。 PROG命令应该返回响应varbind作为三个单独的行打印到stdout - 第一行应该是返回值的OID,第二行应该是它的TYPE(文本字符串之一整数,计量器,计数器,时间戳) ,ipaddress,objectid或string),第三个应该是值本身。

     

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

     

SET请求将导致命令被调用为:

     

PROG -s OID TYPE VALUE       其中TYPE是上面列出的标记之一,表示作为第三个参数传递的值的类型。

     

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