過去のログを再読み込みする原因について
いつもお世話になっております。
タイトルの件について質問させて頂きます。
使用環境
Zabbix Server:3.0.7 PostgreSQL
OS:CentOS 7.2
Zabbix Agent:3.0.7
OS:ubuntu 14.04
ログローテートのタイミングで1つ前のzabbix_agentd.logの再読み込みが発生していました。
過去に何度か同じような内容の投稿を見つけましたがが、バージョンが2.0.xのものが多く、
また再読み込みについては色々と修正されているとのことですので、新たに投稿しました。
zabbix_agentd.logの収集には下記アイテムキーを使用しています。
logrt["/var/log/zabbix/(zabbix_agentd.log|zabbix_agentd.log-[0-9]{8})",@Zabbix]
zabbix_agentd.logのローテート方式はデフォルトの「create」を使用しています。
ローテート時は①カレントファイルをリネーム、②空のファイルを新規作成の順に動作します。
Zabbix Serverはログをどこまで読み込んだかを記憶しており、その情報をAgentに送信している認識です。
ローテートされて名前は変わっていますがinodeが変わっていない一世代前のzabbix_agentd.logの
内容は全て読み込まれたと記憶されていないのでしょうか。
またmtimeが同じファイルが複数存在する場合、エージェントは辞書編集上で最も値が小さいものを読み込む認識です。
そのため新規作成されたzabbix_agentd.logが読み込みの対象となるはずです。
①のファイルと②のファイルのmtimeが同じタイミングでアイテムの更新が走った場合に、
過去ファイルが読み込まれることがあるという内容の投稿を目にしましたが、その仕組みが理解できません。
過去のログファイルが読み込まれる原因について、ご教示頂きますようお願い致します。
また私の認識が間違っていたらご指摘頂きたいです。
TNK - 投稿数: 4671
Zabbixの古いバージョンでは、inodeを使用せずにタイムスタンプ
を見てどれが最新のログファイルかを判断していたため、タイミン
グによっては、1つ前のログファイルを再度読み込んでしまう問題
がありました。
まれに、最新のログファイルよりも1つ前のログファイルのタイプ
スタンプの方が新しい状態が発生するためであったようです。
最近のバージョンでは、エージェントが読み込み対象と判断してい
るログファイルのinodeも合わせて考慮するように修正されていた
はずです。
詳細は、以下のソースを内容をご確認頂くのがより正確かと思いま
す。
src/zabbix_agent/logfiles.c
気になるのは、使用されているバージョンが3.0.7とのことですが、
3.0.10でグローバル正規表現を使用したlogrt[]の処理でのメモリ
リークが修正されているようです。
リリースノート
https://www.zabbix.com/jp/rn3.0.10
ZBX-12231 : Memory leak in active check process (LOG)
https://support.zabbix.com/browse/ZBX-12231
障害の内容をご確認頂き、影響を受けている可能性があるのであれ
ば、バージョンアップすることもご検討ください。
dondoc - 投稿数: 86
TNK様
回答頂きありがとうございます。
メモリリークについてのページを確認しました。
下記トリガーを使用しているため、該当しているように見えます。
{Template Zabbix Agent:logrt["/var/log/zabbix/(zabbix_agentd.log|zabbix_agentd.log-[0-9]{8})",@Zabbix].iregexp(@Zabbix)}=1 and {Template Zabbix Agent:logrt["/var/log/zabbix/(zabbix_agentd.log|zabbix_agentd.log-[0-9]{8})",@Zabbix].iregexp(@Agent_exp)}=0
OSの利用可能メモリを下記のキーで取得しているのですが、障害検知時の値は発生前後の値と比べてもほとんど差異はありませんでした。
気になる点として、障害検知前後の約4分間zabbix_agent.logが出力されていませんでした。
出力されていない時間帯の前後にエラーログはありません。
psコマンドでzabbix_agentdの起動時間を確認しましたが、zabbix_agentdが落ちた形跡はありません。
実際にメモリリークが発生していたかを確認する方法はありますでしょうか。
現状zabbix_agendのメモリ使用率を取得するアイテムは使用していないため、この値については不明です。
TNK - 投稿数: 4671
残念ながらありません。
OSや他の機能に影響を与えるほどの現象が発生していた場合は、
OSのシステムログに記録される場合があります。
何らかのログが出力されるはずであるのに出力されていなかったの
であれば、エージェントで何からの問題が発生していた可能性は考
えられるかもしれません。
dondoc - 投稿数: 86
確認方法はないですか。。。
現象の発生したサーバに設定したログ収集アイテムで監視対象のログが作成されていないものがあり、
更新間隔ごとに対象ファイルがない旨のログが出力されます。
このログすら出力されていなかったので、エージェントに何かしらの問題が発生していたようです。
OS側のシスログにもエラーなど関連しそうなログはありませんでした。
zabbix_agendのメモリ使用率を取得するアイテムを設定しておいて、
現象発生時にこのアイテムの値をみれば手がかりになりますでしょうか。
また、メモリリーク以外に原因となりそうな障害はありますでしょうか。
TNK - 投稿数: 4671
メモリリークしていたからといってログの再読み込みが必ず発生す
るとは言い切れませんし、メモリの使用率を取得してもそれがログ
の再読み込みの原因かは特定できません。
メモリリークが発生していた場合、エージェントのプロセスの動作
が不安定になる可能性があるというだけです。
基本的には、3.0.7以降、多数の不具合修正が行われているので、
そのうちのどれかによって改善するかもしれません。
別途検証環境を用意し、サーバーの設定は同じ設定にして、Zabbix
を最新のバージョンにして同様の問題が発生するのか試してみては
いかがでしょうか?
dondoc - 投稿数: 86
メモリリーク発生=再読み込み発生ではないとのこと承知しました。
原因を特定することはできなそうですね。。。
バージョンアップで対応する件については検討してみます。
ご丁寧に回答していただきありがとうございました。