ZABBIX1.8.1のログローテート対応について

つい先ほどアカウントを作成し、
これが初の書き込みになります。
以後、よろしくお願いいたします。

ZABBIX1.8.1のログローテート対応について質問がございます。

現在、RHL5.1の検証環境でZABBIX1.6.8を使用しております。
本バージョンのログ監視では、監視対象ログファイルがローテートとする際、ローテートする直前のログを見落としてしまう危険性があることは理解できました。

この問題はZABBIX1.8.1では対応しているという話をある人から伺ったのですが、どのようなアルゴリズムにより問題を解決したのかがわかりません。
教えていただければ幸いです。

(ソースを見ればわかることなのかも知れませんが、CやらC++は未経験なもので、さっぱり理解できません・・・・・お恥ずかしい。)

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー kodai の写真

こんにちは。

1.8系ではアイテムのlog[]キーのオプションが拡張されていまして、以下のように設定できるようになっています。

<code>log[file<,regexp><,encoding><,maxlines><,mode>]</code>
もしくは
<code>logrt[file_format<,regexp><,encoding><,maxlines><,mode>]</code>

logrtキーを使うとファイル名に正規表現を利用できるので、ローテーション後のファイル名を含むように設定しておけば、ログローテーションにも対応することができます。

詳細はZabbix 1.8マニュアルを参照してみてください。
http://www.zabbix.com/documentation/1.8/manual/log_file_monitoring

ユーザー sepata_kurou の写真

ご回答ありがとうございます。

すみません、ファイル名を正規表現で指定してログローテーションに対応するということはわかっていたのですが、ログローテーションの対応をどのようなアルゴリズムで実現するのか、ということが知りたかったのです。

ご指定のマニュアルには、ZABBIXマネージャーのデータベースに、指定されたログファイルのサイズと更新時間を記憶する、と書いてあります。確かにこれにより、ログローテートする際に次々に新しい名前のログファイルを生成し、それにログを吐き出すタイプのログファイルの監視は実現できそうです。

しかし、これではLinuxのsyslogのように、常に特定の名前のログファイルにログを吐き出していくタイプのログローテートには対応できないと思うのですが・・・・。

ユーザー TNK の写真

正規表現として元の特定のファイル名も合致するように指定すれば、元のファイルもチェックする対象の1ファイルとして処理されるようですので、次々と新しい名前をつける場合と同じように処理されると思います。
例えば、file_formatとして「/var/log/messages*」とか指定すればよいのではないでしょうか?

処理概要は、kodaiさんが紹介してくださったURL内に書かれていてno_oneさんもご確認済のようですが、より詳細となるとやはりソースを読むのがより正確なロジックを確認する方法になると思います。

メインの処理は、以下の関数で行われているようです。

 対象ソースファイル:
  .../zabbix-1.8.1/src/zabbix_agent/logfiles.c
 関数:
  process_logrt()

処理の流れを簡単に書くと以下のようになります。

 1.指定された正規表現のファイル名をディレクトリ名とファイル名に分ける
 2.指定されたディレクトリを開いてディレクトリにあるファイルのリストを取得する
 3.ファイル名が指定されたファイル名の正規表現と合致したら対象ファイルとしてピックアップ(ファイル変更日時順に並べる)
 4.以前ログファイルをチェックした時のファイル変更日時と比較して古いものは対象から外す
 5.対象として残ったファイルを以前読み取った場所から読み込んで処理する(対象ファイルを順次処理)

誤っているかもしれませんので、難しいかもしれませんがご自身で流れだけでもつかめるように努力されることをお勧めします。

ユーザー sepata_kurou の写真

ご返事が遅くなって申し訳ありません。

ご回答ありがとうございました。
ソースコードを見てみたのですが、1.6.8はすぐ解釈できましたが、1.8.1は非常に難しいですね。

何とか努力してみたいと思います。