デバッグログ解析
DebugLevel=4でログを取得した後に、プロセスごとのログを切り出すツールを作成しました。
ログ出力を改善してほしい!
私がZabbixで改善してほしい/したい点がログ出力であります。
サーバ、プロクシ、エージェントにて、それぞれの設定ファイルに
DebugLevel = 4
と設定し、再起動を行うことでログ出力を最大にすることができます。
(MIRACLE ZBXでは、再起動することなく下記のように設定ファイルをリロードすることで、デバッグレベルを変更することができます。)
# /etc/init.d/zabbix-server reload
これにより充分なデバッグ情報が得られますが、逆に言うと出力が多すぎて、解読・解析が面倒になります。DebugLevelが3のときと、4のときとの中間レベルの出力量がほしいところです。
プロセスごとのログの切り分け
「解読・解析が面倒になります」と記述した理由は、全てのプロセスが大量のログ出力を行い、さらにそれらが混沌としたものとなるからです。大体において、問題を追求したいときは一つのプロセスに着目したいので、ログの切り出しツールを作成しました。
使用方法
ソースコードを下記からダウンロードしてください。
ソースコードをコンパイルし下記のように実行します。
zabbix_log_cutout logfile PID
logfile : Zabbixサーバ、プロクシ、エージェントのログファイル
PID : 切り出すプロセス番号
下記がZabbixサーバのログとなります。
22210:20141105:103700.684 Syncing ...
22210:20141105:103700.684 In DCsync_history() history_first:56443 history_num:0
22210:20141105:103700.684 history syncer #1 spent 0.000066 seconds while processing 0 items
22210:20141105:103700.684 sleeping for 5 seconds
22198:20141105:103701.645 In get_values()
22198:20141105:103701.645 In DCconfig_get_poller_items() poller_type:1
22198:20141105:103701.645 End of DCconfig_get_poller_items():0
22198:20141105:103701.645 End of get_values():0
22198:20141105:103701.645 unreachable poller #1 spent 0.000219 seconds while updating 0 values
22198:20141105:103701.645 In DCconfig_get_poller_nextcheck() poller_type:1
22198:20141105:103701.646 End of DCconfig_get_poller_nextcheck():1415151426
22198:20141105:103701.646 sleeping for 5 seconds
22230:20141105:103701.648 In collect_selfmon_stats()
22230:20141105:103701.648 End of collect_selfmon_stats()
22230:20141105:103701.648 sleeping for 1 seconds
22228:20141105:103701.648 In process_escalations()
22228:20141105:103701.648 query [txnlev:0] [select escalationid,actionid,triggerid,eventid,r_eventid,esc_step,status,nextcheck from escalations where 1=1 and escalationid between 0 and 99999999999999 order by actionid,triggerid,escalationid]
22228:20141105:103701.649 End of process_escalations()
ログ出力形式を変更していない場合、
プロセス番号:日付:時刻 ログ
の形式で出力されます。
問題となっていそうなログを見つけ、そこからプロセス番号を特定します。
上記のログの場合、22198のPollerプロセスをターゲットとした場合、
# cp /var/log/zabbix/zabbix_server.log .
# zabbix_log_cutout zabbix_server.log 22198
と実行すると、zabbix_server.log-022198.log というファイルが生成されます。
ただし、下記の注意点があります。。
- ログの出力形式を変更していないこと。
- 改行される前に出力されたログがある場合、正しく切り出せない。
- net-snmp関連等の直接関連のないログ出力には対応していない。