Mackerel

mackerelでゾンビプロセスをチェックする

mackerelでゾンビプロセスをチェックする

はじめに

あるプロセスがゾンビプロセスの場合に、mackerelでチェックして通知するのに少しハマったので、覚書。

まずゾンビプロセスのチェックの場合、以下のような設定をします。

  • 1件以上の場合、warningかcriticalで通知。(件数は2件以上でも、10件以上でもよい。)
  • 0件の場合、通知しない。

通常ゾンビプロセスがない場合は正常なので通知はしません。

ゾンビプロセスのチェック

ゾンビプロセスのチェックをするには、-s (または--state)のオプションを利用します。
ゾンビプロセスの場合は「Z」を指定します。

あと、1件以上でwarning、2件以上でcriticalの通知をしたいので、その設定も一緒します。

check-procs -p 'hoge' -s Z -w 0 -c 1 -u hoge-user

これでゾンビプロセスが存在する場合、通知がきますが
このままだとゾンビプロセスが0件の場合、criticalの通知が来ます。
(warning-under、critical-under共にデフォルトが1のようです。)

ゾンビプロセスが0件の場合は、正常とする

困ったと思って、macherelのソースを見たところ以下のような実装になっていました。

if opts.CritUnder != 0 && count < opts.CritUnder ||
    opts.CritOver != nil && count > *opts.CritOver {
    result = checkers.CRITICAL
} else if opts.WarningUnder != 0 && count < opts.WarningUnder ||
    opts.WarningOver != nil && count > *opts.WarningOver {
    result = checkers.WARNING
}
return checkers.NewChecker(result, msg)

プロセスチェックの仕様で、warning-under と critical-underが0の場合は
0件のチェックをしないようなので、以下の設定にします。

check-procs -p 'hoge' -s Z -w 0 -c 1 -W 0 -C 0 -u hoge-user

これで、ゾンビプロセスの通知ができるようになりました。

参考