やりたいこと
日本語版vCenterからのSNMPTRAP文字化けを直す。
こんな感じ・・・
対応前(16進数+スペースの羅列)
対応後(日本語に!!)
制約事項
UTF8以外(シフトJIS等のマルチバイト)は対応できていません。
環境
SNMPTRAPの経由方法として「zabbix_trap_receiver.pl」を使用している環境
対処方法
既存プログラム「zabbix_trap_receiver.pl」をちょっぴり変更
元はZabbixソースコード2.4.8の「zabbix_trap_receiver.pl」を以下のように変更。
いつもながら適当ですが動くと思いますw。
PERLの正規表現のスマートな記述方法がわからず、ごちゃごちゃですいません。
zabbix_trap_receiver.pl
[localhost]# diff zabbix-2.4.8/misc/snmptrap/zabbix_trap_receiver.pl /usr/local/bin/zabbix_trap_receiver.pl
97c97,103
< printf OUTPUT_FILE " %-30s type=%-2d value=%s\n", $x->[0], $x->[2], $x->[1];
---
> my $value = $x->[1];
> if( $value =~ s/^Hex-STRING: //) {
> $value =~ s/(\n|\r|\r\n)//g;
> $value =~ s/(..) /chr(hex($1))/ge;
> $value = "Hex-STRING: " . $value;
> }
> printf OUTPUT_FILE " %-30s type=%-2d value=%s\n", $x->[0], $x->[2], $value;
変更箇所は、TRAP情報の型が"Hex-STRING"の時、文字列16進数をバイナリに置換するだけ。
最後に
- SNMPTTを利用している場合の文字化け対応は、こっちを参照してください。
文字化けとは関係ないですが、
SNMPTRAPの鳴り分け処理する場合は、SNMPTTがとても便利だなと思います。