~環境~
CentOS.7.3
Zabbix 3.4.10
現在Zabbixにtrap_receiver.plを導入してSNMPtrap監視を行っています。
SNMPtrapは検知できているのですが、そのtrapの内容を日本語化して
読みやすくしたいと考えています。
SNMPTTでの日本語化の記事や情報はよく見かけるのですが、
trap_receiver.plを使ってtrapを日本語化できるのでしょうか?
できる場合はどのような設定をしていけばいいのかわからないので
参考サイトや設定方法などを教えていただけると助かります。
よろしくお願いします。
K-T - 投稿数: 13
すみません。監視対象の機器の記入を忘れてました。
監視対象
~Cisco~
L3SW C3850
L2SW C2960
Router C3650
ASA5506
です。
すべて標準MIBとプライベートMIBは/usr/share/snmp/mibsに格納してある状態で
すべてのMIBを読み込みできるように設定されています。
SNMPtrapのログ出力先は/var/log/snmp/snmptrap.log で受信し、
/var/log/zabbix/snmptrap.logに成形したログを出しています。
下記URLを参考に設定が行われています。
http://extstrg.asabiya.net/pukiwiki/index.php?ZABBIX%20SNMPTrap%C0%DF%C4...
TNK - 投稿数: 4769
zabbix_trap_receiver.plは、受け取ったデータを特定のフォーマ
ットに整形して出力するだけの機能しかなかったはずですので、受
け取ったトラップを日本語化するのであれば、そういうことができ
るようなものを作成するしかないと思います。
例えば、snmpttを使用する時のようにOIDごとに日本語化されたメ
ッセージを用意しておいて置き換えるような機能は、ソースに添付
されているzabbix_trap_receiver.pl自体には用意されていません。
よって、受け取ったトラップ内のOIDやメッセージを解析して、日
本語化した文字列に置換もしくは整形して日本語メッセージを作成
するような独自のそういったスクリプトを作成することが必要です。
つまり、設定だけではなく、プログラミングが必要です。
heya - 投稿数: 319
TNK さんが書かれた通り、プログラミングが必要となります。
個人的にはスクリプト改造よりも snmptt を使う方が楽だと思いますが(慣れるまでは少し大変ですが・・・)、そうはいっても、新しいパッケージインストールの許可が下りない、なんてこともあるかもしれませんし、せっかくなので zabbix_trap_receiver.pl を改造する場合はどうするかを考えてみました。
#私は実際には試していません。こうすればできるだろうな、という内容です。
#参考程度に考えてください。
日本語化、というのが、どの程度のものを想像しているかにもよりますが、単純な話としては print OUTPUT_FILE とか printf OUTPUT_FILE とかの部分を適当に日本語で書くようにすればいい、ということになります。
仮に notificationtype とか version とかの部分を日本語化したいということなら、別にそのまま英語でもそんなに困らないとは思いますが、どうしてもというなら、例えば上の方で
my %jp = (notificationtype=>'通知タイプ', version=>'バージョン', ...);
としておいて、
printf OUTPUT_FILE " %-30s %s\n", $key, $pdu_info{$key};
のところを
printf OUTPUT_FILE " %-30s %s\n", $jp{$key}, $pdu_info{$key};
とする、といった感じでしょうか。
OID ごとに決まったメッセージを出したいのであれば、
# print the PDU info
から
close (OUTPUT_FILE);
の直前までバッサリと削除して、
printf OUTPUT_FILE "%s ZBXTRAP %s\n", ~
の行を OID に応じた内容に変えることになりますかね。実際は長い if-elsif の連続になると思います。
例:
my $time = strftime($DateTimeFormat, localtime);
my $oid = $varbinds[1][1];
my $message;
if ($oid eq '.1.3.6.1.6.3.1.1.5.3') { $message = 'リンクダウン'; }
} elsif ($oid eq '.1.3.6.1.6.3.1.1.5.4') { $message = 'リンクアップ'; }
...
} else { $message = '未知のトラップ'; }
print OUTPUT_FILE "$time ZBXTRAP $hostname $message\n";
いずれにしても、注意点として、この三つに気をつけておかないとたぶん文字化けします(しなくても大量の警告が出る)。
・先頭の方に use utf8; と書いておく。
・sysopen() で OUTPUT_FILE を開いた後で、
binmode OUTPUT_FILE, ':utf8';
と書いておく。
・zabbix_trap_receiver.pl 自体は UTF-8 で保存する。
K-T - 投稿数: 13
TNKさん heyaさん
ご回答ありがとうございます。
やはり、プログラミングの技術が必要だということが改めてわかりました。
perlの知識や技術がまだ全然ないので日本語化は一旦諦めて、
勉強した後に挑戦してみたいと思います。
ありがとうございました。