1

freeradius 統計を snmp に拡張しようとしています。これらの値を監視し、rrd ファイル内に収集したいと考えています。私の問題は、これらの値が rrd カウンターである必要があることですが、カウンター値は STRING ではなく INTEGER を取得する必要があるようです。この 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"

ありがとうドミニク

4

1 に答える 1

1

スクリプトが返される型を指定できるように、おそらくextendの代わりにpassを使用する必要があります。man snmpd.confから:

pass [-p priority] MIBOID PROG は、MIBOID をルートとするサブツリーの制御を、指定された PROG コマンドに渡します。このツリー内の OID に対する GET および GETNEXT 要求は、次のように呼び出されるこのコマンドをトリガーします。

PROG -g OID

それぞれ PROG -n OID。ここで、OID は要求された OID です。PROG コマンドは、応答 varbind を 3 つの別個の行として stdout に出力する必要があります。最初の行は、返された値の OID である必要があり、2 番目の行は、その TYPE (テキスト文字列のいずれか、integer、gauge、counter、timeticks、ipaddress、 objectid、または string)であり、3 番目は値そのものである必要があります。

コマンドが適切な varbind を返せない場合 (指定された OID が GET 要求の有効なインスタンスに対応していない、または GETNEXT の後続のインスタンスがなかったなど)、出力を生成せずに終了する必要があります。これにより、SNMP noSuchName エラーまたは noSuchInstance 例外が発生します。

SET 要求により、コマンドは次のように呼び出されます。

PROG -s OID TYPE VALUE TYPE は上記のトークンの 1 つで、3 番目のパラメーターとして渡される値のタイプを示します。

割り当てが成功した場合、PROG コマンドは出力を生成せずに終了する必要があります。エラーは、文字列 not-writable または wrong-type のいずれかを stdout に書き込むことで示され、エージェントは適切なエラー応答を生成します。

于 2013-05-03T20:27:59.107 に答える