取得ログから情報を取得して、メッセージ件名に表示させたい
zabbix 2.2.3環境を利用しています。
ネットワークブートするクライアントマシン複数台(Windows7)が発するイベントログの中から、普段発生しないイベントログだけを収拾し、発生時にメッセージを管理者に飛ばしたい、と言う要望があります。
以下のような理由で、rsyslogサーバに一旦集約してトリガを設定しているのですが、ログの中に含まれているクライアント名を、アクション設定で登録するメッセージの件名の中に入れられないか、と言われています。
現状は以下のような方法をとっています。
1.rsyslogを動作させるサーバを用意し、そこにすべてのクライアントから発生するイベントログを集約
2.良く発生する物は設定で排除して残った物をログファイルとして保存。
3.該当ログのイベントをZabbixで取得して、イベントが増える度にメッセージを発信させる
(一つのイメージから起動するような仕組みらしく、マシンごとにzabbixエージェントの設定を持たせられないため、個別クライアントをホスト登録できませんでした)
ただこの場合、rsyslogを持つサーバをホストとして登録しているため、どのクライアントでおこったイベントログなのかは、配信されたメッセージの本文を読まねば把握できません。
アクションとしては、ユーザーにメッセージとしてメールを送信する設定を行っており、ログ内容自体は{ITEM.LASTVALUE}でメール本文に入るようにしています。
アクションの設定でスクリプトを動作させるようにし、スクリプトで編集後メール送信、というのが一番近道かとは思うのですが、可能な限り標準の機能の中で処理できないものかと考えています。
何か良いアイデアがあればお知恵をお貸しください。
TNK - 投稿数: 4769
rsyslogの内容からとなると、そのログフォーマット内からホスト
名を切り出さなければならないので、そのホスト名をメールの件名
に入れるとなると、Zabbix標準の機能だけでは実現できないと思い
ます。
私であれば、外部スクリプトを利用してメール送信する方法を応用
して、引数で渡されたアクション設定内の件名やメッセージから、
必要な情報を切り出して、改めてメールのメッセージを作成しなお
してメールとして送るようなスクリプトを作成すると思います。
yas - 投稿数: 43
Soukakuさんの書かれた方法でうまく行かないかと色々と試してみたのですが、文字化けがどうにもなりませんでした。
おっしゃられるようにスクリプトで何とかする、というのがベターなのかもしれません。
メッセージなどは外部スクリプトで受けられますので、そこからどうにかできないか考えてみます。
ありがとうございました。
Soukaku - 投稿数: 12
>>ただこの場合、rsyslogを持つサーバをホストとして登録しているため、どのクライアントでおこったイベントログなのかは、
自分も、似たような悩みを抱えていたことがあって、
・rsyslogd で受信したログを、名前付きパイプに出力
・名前付きパイプに出力されたログをスクリプトで加工、任意のOIDをつけたsnmptrap として Zabbixサーバに送信
・Zabbixの監視対象としてログの出力元の機器を登録。任意のOIDのsnmptrapを検知するようsnmptrapエージェントとトリガーを設定
という方法で、実際にログを出力した機器がsnmptrapとして送信してきたように見せかける、ということをやっています。
当該機器からのsnmptrap、という形にできれば、通知メールのタイトルにIPアドレスを入れるのは難しく無いと思います。
やり方は、自分のブロクにまとめてありますので、参考になれば。
http://www.downtown.jp/~soukaku/archives/2013/0413_022911.html
yas - 投稿数: 43
ありがとうございます。
ブログを参考に同様の事ができないか悪戦苦闘していたのですが、Windowsのイベントログであると言う部分が
問題でした。
snmptrapで情報を投げるとき、一番最後のコメントがすべてアルファベット+数字ならば問題ないのですが、日本語が入ると文字化けしてしまうのです。
UTF-8になっていないからかと、エンコードしてから投げる等やってみたのですがうまく行かず。今回の要件ではその日本語の部分が一番重要なので、同じ方法が使えそうにありません。
snmptrapコマンドから最後のコメント部分を日本語にしてうまく行けばすべて解決だったのですが…。
今回要件ではうまく行きませんでしたが、集約したログの使い方として勉強になりました。ありがとうございました。