1

我正在尝试将 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生成

如何使此输出成为整数?

    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"

谢谢多米尼克

4

1 回答 1

1

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

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

程序 -g OID

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

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

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

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

如果分配成功,PROG 命令应该退出而不产生任何输出。应通过将不可写或错误类型的字符串之一写入标准输出来指示错误,并且代理将生成适当的错误响应。

于 2013-05-03T20:27:59.107 回答