1

バックグラウンドで実行され、すべてのトラップをファイルに記録する snmptrapd デーモンがあり、そのログを perl プログラムで解析しようとしています

SNMP v2c トラップは次のように記録されています。

SNMPv2[**]2013-11-4[**]13:16:49[**]UDP: [127.0.0.1]:57819->[127.0.0.1][**].1.3.6.1.6.3.1.1.4.1.0 = OID: .1.3.6.1.4.1.8072.2.3.0.1       .1.3.6.1.4.1.8072.2.3.2.1 = INTEGER: 30 .1.3.6.1.4.1.8072.2.3.2.2 = STRING: lol

正規表現を使用して OID とリモート IP アドレスを正常に解析しましたが、残りのすべてのトラップ値を解析できません。それらは:

.1.3.6.1.4.1.8072.2.3.2.1 = INTEGER: 30 .1.3.6.1.4.1.8072.2.3.2.2 = STRING: lol

構文は簡単に思えます: TRAP_STUFF = TYPE: VALUE が 0 回以上繰り返されます。

問題は、このすべての情報を取得できる正規表現はどれかということです。

4

1 に答える 1

1

while基本的に、ログ行の左側の部分では、 を使用してブロックごとに情報を解析できますregex

my $str = ".1.3.6.1.4.1.8072.2.3.2.1 = INTEGER: 30 .1.3.6.1.4.1.8072.2.3.2.2 = STRING: lol";
while ($str =~ /([\.\d]+)\s=\s([^:]+):\s([\S]+)/g) {
    my ($trap_stuff, $type, $value) = ($1, $2, $3);
    print "trap_stuff: $trap_stuff\ntype: $type\nvalue: $value\n";
}

出力:

trap_stuff: .1.3.6.1.4.1.8072.2.3.2.1
type: INTEGER
value: 30
trap_stuff: .1.3.6.1.4.1.8072.2.3.2.2
type: STRING
value: lol
于 2013-11-04T15:38:22.030 に答える