現在位置: ホーム / みらくるブログ / デバッグログ解析

デバッグログ解析

DebugLevel=4でログを取得した後に、プロセスごとのログを切り出すツールを作成しました。

ログ出力を改善してほしい!

私がZabbixで改善してほしい/したい点がログ出力であります。

サーバ、プロクシ、エージェントにて、それぞれの設定ファイルに
DebugLevel = 4
と設定し、再起動を行うことでログ出力を最大にすることができます。
(MIRACLE ZBXでは、再起動することなく下記のように設定ファイルをリロードすることで、デバッグレベルを変更することができます。)

# /etc/init.d/zabbix-server reload

 


これにより充分なデバッグ情報が得られますが、逆に言うと出力が多すぎて、解読・解析が面倒になります。DebugLevelが3のときと、4のときとの中間レベルの出力量がほしいところです。

 

プロセスごとのログの切り分け

「解読・解析が面倒になります」と記述した理由は、全てのプロセスが大量のログ出力を行い、さらにそれらが混沌としたものとなるからです。大体において、問題を追求したいときは一つのプロセスに着目したいので、ログの切り出しツールを作成しました。

使用方法

ソースコードを下記からダウンロードしてください。

zabbix_log_cutout.c

 

ソースコードをコンパイルし下記のように実行します。

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 というファイルが生成されます。

ただし、下記の注意点があります。。

  1. ログの出力形式を変更していないこと。
  2. 改行される前に出力されたログがある場合、正しく切り出せない。
  3. net-snmp関連等の直接関連のないログ出力には対応していない。