お疲れ様です。satimoです。
他社さんのサーバのログ監視を行うことになったのですが、何度も同じログを検知するという謎の動きをとったのでその際の調査結果のまとめ記事になります。
Zabbixのログファイル監視の気になる動きとは?
他社のシステムにZabbix Agentをインストールしてログ監視を行うことになったのですが、監視有効にしてから一発目の検知後監視間隔ごとに同じログを拾ってきてアクションが実行されるといものになります。
はじめに結論を言ってしまうとZabbixのログファイル監視の仕様を理解していなかったことが原因でした。
そもそもログファイル監視とは?
ログファイル監視という言葉を聞いたことが無い人向けの項目ですので知ってるよ~という人はこの項目はスキップして下さい。
ログファイル監視は、サーバが出力するログファイル(Linuxだとmessagesファイルとか)内に特定も文言が出ていないことを監視する監視手法になります。
例えば、特定の文言が出力されたら障害だからこの手順に沿って対応してね。的な感じで対応フローに持ってきたりします。
ここまではログファイル監視の表面上の話しになるのですが、一歩踏み込んでログファイル監視の仕様について話していきます。
ログの種類にもよりますが、基本サーバーが稼働しているときは常に監視する必要があり、ものによっては1分間に何百行も出力させることもあります。
で、基本ログは新しいものが一番後ろに記載されていくわけなので、監視を行う際にも頭から読み直す必要はなく、前回の監視からの差分だけでOKなわけです。(毎回頭から読んでしまうとメモリ不足に陥ってしまうため)
どこの監視の仕組みについても同じになるのですが、この「差分の取り方」や「どのような時に先頭行から読み直す」かは提供する監視システムの仕様によって異なってきます。
代表的なものですとタイムスタンプやファイルサイズから判断して、これは差分でよいな、これなログローテションされているから頭から読みなおしだなとか。判断しています。
前置きが長くなりましたが次からの「Zabbixにおけるログファイルの監視の仕様」について説明していきます。
Zabbixのログ監視の仕様について
Zabbixの公式マニュアルにログ監視の仕様について記載がありましたので紹介します。
6 Log file monitoring
重要な注意事項
- server と agent は、監視対象ログのサイズと最終更新時間(logrtの場合)のトレースを2つのカウンターに保持します。
- また、agent は内部的に inode 番号 (UNIX/GNU/Linux) 、ファイルインデックス(Microsoft Windows上)、 MD5 ログファイルの最初の512バイトの合計を使用しています。ログファイルが切り捨てられたり、 ローテートした場合の判断を改善するためです。
わかりにくいですねw要は以下の内容を説明しています。
Zabbixのログファイル監視の仕様について↓
- まず、ログファイルの差分を取得する際、Zabbixエージェントは対象ファイルの先頭512バイトのハッシュ値(MD5値)を取得します。
- 前回のMD5値と異なっていれば、新しいファイルが作成されたとみなされ、ログファイルの頭から読み込みを行います。
- 検知する文言があった場合、過去に検知したログであった場合でも検知されます。
もっとざっくり言ってしまえば、ログファイルの先頭行に変化があったらログファイルを頭から読み直すよ~
というわけです。
冒頭に書いたおかしな動きはこれが該当していて、ログファイルの先頭行がなぜかログが出力されたときの時間が記載されるという仕様でした。
そのためZabbix Agentは毎回新しいファイルだと認識し、頭から読み直し、同じログを異常と検知して通知を行っていたようです。
ここまで、文字で説明していたのですが、次の項目では画像を使って実際に検証した結果をまとめましたので興味ある方はご確認ください。
ログファイル監視の仕様の説明
宣伝!
この記事で説明用に作った画像はすべて『Cacoo』という作画ツールを使っています。
無料で使えてかつ無料で使えるので、使ってみたい方ぜひ無料登録してみてください!
\\ 5分で登録可能!無料でブラウザ上で構成図がかける作画ツール『Cacoo』の登録方法はコチラ //
<<Cacoo 公式サイト:https://cacoo.com/ja/home>>
前提:監視設定
監視間隔:30分
監視対象ファイル:hogehoge.log
“error”という文字列を検知したらイベントを発生させる
Zabbixにおける監視テスト!
14:00 Zabbix Agentがhogehoge.logを監視
13:30時点では”error”の文言が無いため、イベント未生成
14:00 Zabbix Agentがhogehoge.logを監視
前回読み込んだログ以降のログをチェック。
13:50のログで”error”文言を発見。
イベントを生成させる。
14:30 Zabbix Agentがhogehoge.logを監視
前回読み込んだログ以降のログをチェック。
14:00以降のログには”error”の文言が無いため、イベント未生成
14:55 Zabbix Agentがhogehoge.logの先頭行に”hogehoge”と記載。
15:00 Zabbix Agentがhogehoge.logを監視
先頭行が前回の監視結果と異なる為、hogehoge.logを頭から読み直し。
13:50の”error”の文言を検知しイベントを生成。
コメント