eventlog()またはlog()でトリガーにて検出された障害の特定について
こんにちは、
Zabbix 2.0.xまたは2.2.xを利用してログを監視している場合、トリガーで障害を検出したときのログが特定できなくて困っています。
アイテムとして取得しているログデータの一覧からトリガーが発生した時間やトリガーの条件式から探すことは可能なのは認識しています。
ただ、監視作業を行っている人にそのような作業をお願いするのは難しい面があり、障害(トリガー)を検出したらその障害をクリックしたら一発で障害を起こしたログメッセージを特定したいのです。
eventlog()やlog()の設定例は以下のようにしています。
- Windows のeventlog()のアイテム・トリガー設定
アイテム:
タイプ:Zabbixエージェント(アクティブ)
キー:eventlog[application]
データ型:ログ
トリガー:
eventlog[application].logseverity()}>3
- Linuxのlog()のアイテム・トリガー設定
アイテム:
タイプ:Zabbixエージェント(アクティブ)
キー:log[/var/log/messages]
データ型:ログ
トリガー:
log[/var/log/messages].regexp(error)})#0
一発で障害のメッセージを特定することは可能な方法はないでしょうか?
よろしくお願いします。
KAZ - 投稿数: 1085
kenchanさん
「監視作業を行っている人」はアラートメールは見れないのでしょうか?
Zabbixフロントエンドの目視監視ですか?
監視の形態をお教え願えませんか?
もしアラートメールが見れるなら、下記のページを参考に検知したアイテムの値をメールに出せば一発ですが…
https://www.zabbix.com/documentation/2.0/manual/config/notifications/act...
kenchan - 投稿数: 7
KAZさん
回答ありがとうございます。
今のところ以下のような前提でいました。
(1) 障害を検出した場合、パトランプで知らせる
他の通知方法についてはまだ検討中です。
(2) 運用作業員がZabbixフロントエンドで障害内容を確認する
つまり、Zabbixフロントエンドから本来の障害を簡単に特定したかったのです。
そのため、例えばダッシュボードに表示されている障害情報から簡単に(ワンクリック?)でログメッセージが表示されれば一番よいと考えていました。
試しにメールの監視を確認してみたところ、障害のログの内容がメール本文に入っていました。
メールからだと、一手間ですがログメッセージの特定はできそうです。
メールとZabbixフロントエンド以外の監視方法を利用したことがないのですが、他にも手段はありますでしょうか?
できるだけ運用作業員が容易にオペレーションできることが望ましいです。
Zabbixフロントエンドから直接特定できるのがベストですが...
KAZ - 投稿数: 1085
kenchanさん
こんな方法を考えました。
マップでZabbixサーバをクリックし、「障害情報」を選ぶとサブウインドが開きメールの中身が表示されます。
添付のimg1.png, img2.pngの様な感じですね。
只、複数障害上がると後の物しか表示できません。
障害回復しても情報消えます。
AlertInfo.shの1つ目のファイルオープンを"w"から"a"に変えると追加書きこみになります。
情報は消え無くなりますが、どこかでファイル消してやらないとまずいかと…
また、ファイルが無いまたは空の状態で「障害情報」クリックするとエラーメッセージがでます。
お役にたちますかね?A(^^;
-- 手順は以下の通り --
1)メールの情報をファイルに出力するAlertInfo.shを作る。
2)Zabbixサーバのzabbix_agentd.confのEnableRemoteCommandsをEnableRemoteCommands=1にする。
3)zabbix_server.confのAlertScriptsPathにAlertInfo.shを配置する。
4)[管理]-[メディアタイプ]で新しいメディアタイプを作成し、AlertInfo.shを設定する
説明:AlaertInfo
タイプ:スクリプト
スクリプト名:AlertInfo.sh
有効:チェックon
5)[管理]-[ユーザ]のメンバーを選択し、[メディア]タブを開いてAlaertInfoを追加する。
タイプ :AlaertInfo
送信先:使わないので何でもいいのですが、何か設定してください。
有効な時間帯:1-7,00:00-24:00
指定した深刻度のときに使用:全部チェックon
ステータス:有効
6)[管理]-[スクリプト]で[スクリプト作成]をクリックする
名前:障害情報
タイプ:スクリプト
次で実行:Zabbixサーバ
コマンド:cat /var/log/zabbix/alert.log
※:catするファイル名はAlertInfo.shの出力先と合わせてください。
KAZ - 投稿数: 1085
kenchanさん
少々改造しました。
障害情報ログをホスト単位に作るようにしました。
これで、同一サーバ外の検知では情報消え無くなります。A(^^;
使い方はマップで障害の起きているサーバをクリックし、「障害情報」を選ぶとサブウインドが開きメールの中身が表示されます。
修正はAlertInfo.shの交換とマップから呼ぶ「障害情報」のスクリプトの修正になります。
6)[管理]-[スクリプト]で[スクリプト作成]をクリックする
名前:障害情報
タイプ:スクリプト
次で実行:Zabbixサーバ
コマンド:cat /var/log/zabbix/alert_{HOSTNAME}.log
尚、AlertInfo.sh内でホスト名を取得するのでメール中にホスト名を「{キーワード}{セパレータ}{ホスト名}」という形で入れておく必要があります。
私の環境では↓こんな感じでメールに入れていたので…
1)ホスト名 :{HOSTNAME}
AlertInfo.shはこんな感じで、書いてます。ここをメールに設定した{キーワード}{セパレータ}を指定してください。
# key word
$KEYWORD="1)ホスト名";
# Separator
$SPL=":";
kenchan - 投稿数: 7
KAZさん
返事が遅くなりました。
ようやくKAZさんが作成してくれたスクリプトを試すことができました。
うまく動作しているようです。
スクリプトの動作原理も理解できました。
この方法を使えば、他にも応用ができそうです。
うまくスクリプトを作り込めば、障害の記録を残す条件や、二重障害でも記録を残すように作り込むことができそうです。
とても、勉強になりました。ありがとうございます。