nagios-pluginsをgo-check-pluginsに置き換えた

nagios-pluginsにより設定していたmackerelの監視項をmackerel−check−plugunsに置き換えました。 今回置き換えたのは、プロセス数を監視する項目で、nagios-pluginsでいうcheck_procsです。

やったこと

nagios-pluginsの調査

nagios-pluginsで書いていた、

/path/to/check_procs -c 2:3 -a td-agent -u td-agent

を置き換えるということだったので、この意味を理解するために各オプションについて調査した。

-c <range>

range以外であればCRITICAL、つまりexit status 2という指定。
rangeは、下の表の方法で指定できる。

Range definition Generate an alert if x...
10 < 0 or > 10, (outside the range of {0 .. 10})
10: < 10, (outside {10 .. ∞})
~:10 > 10, (outside the range of {-∞ .. 10})
10:20 < 10 or > 20, (outside the range of {10 .. 20})
@10:20 ≥ 10 and ≤ 20, (inside the range of {10 .. 20})

-a STRING

STRINGを含む引数を持つプロセス数を調べる。正規表現が使える。

-u USER

USERと一致するユーザ名またはUIDのプロセス数を調べる。

すなわち、今回の項目は、引数とユーザがtd-agentであるプロセス数が、2 ~ 3以外であればCRITICALとしている。

go-check-pluginsの調査

nagios-pluginsのオプションと同等の指定をするためのオプションを調査した。

-c range-C N または -c N

-C N: Nより小さければCRITICALという指定。

-c N: Nより大きければCRTICALという指定。

-a STRING-p STRING

-p STRING: STRINGを含むコマンドにより実行されたプロセス数を調べる。正規表現が使える。

-u USER-u USER

-u STRING: USERと一致するユーザ名のプロセス数を調べる。nagios-pluginsと違い、UIDは使えない。

つまり、nagios-pluginsで書いていた

/path/to/check_procs -c 2:3 -a td-agent -u td-agent

は、go-check-pluginsでは

/path/to/check-proce -C 2 -c 3 -p td-agent -u td-agent

に置き換えられるはず。

動作の確認

プロセス数を簡単に変化させられるnginxを起動させて確認した。 プロセス数を変化させて動作の確認を行う。 実行結果は、上がnagios-plugins、下がgo-check-plugins。

プロセス数4のとき

期待: CRITICAL, 結果: CRITICAL

[vagrant@localhost home]$ /path/to/check_procs -c 2:3 -a nginx -u nginx
PROCS CRITICAL: 4 processes with args 'nginx', UID = 497 (nginx) | procs=4;;2:3;0;
[vagrant@localhost home]$ /path/to/check-procs check-procs -C 2 -c 3 -p nginx -u nginx
Procs CRITICAL: Found 4 matching processes; cmd /nginx/; user /nginx/

プロセス数3のとき

期待: OK, 結果: OK

[vagrant@localhost home]$ /path/to/check_procs -c 2:3 -a nginx -u nginx
PROCS OK: 3 processes with args 'nginx', UID = 497 (nginx) | procs=3;;2:3;0;
[vagrant@localhost home]$ /path/to/check-procs check-procs -C 2 -c 3 -p nginx -u nginx
Procs OK: Found 3 matching processes; cmd /nginx/; user /nginx/

プロセス数2のとき

期待: OK, 結果: OK

[vagrant@localhost home]$ /path/to/check_procs -c 2:3 -a nginx -u nginx
PROCS OK: 2 processes with args 'nginx', UID = 497 (nginx) | procs=2;;2:3;0;
[vagrant@localhost home]$ /path/to/check-procs check-procs -C 2 -c 3 -p nginx -u nginx
Procs OK: Found 2 matching processes; cmd /nginx/; user /nginx/

プロセス数1のとき

期待: CRITICAL, 結果: CRITICAL

[vagrant@localhost home]$ /path/to/check_procs -c 2:3 -a nginx -u nginx
PROCS CRITICAL: 1 process with args 'nginx', UID = 497 (nginx) | procs=1;;2:3;0;
[vagrant@localhost home]$ /path/to/check-procs check-procs -C 2 -c 3 -p nginx -u nginx
Procs CRITICAL: Found 1 matching processes; cmd /nginx/; user /nginx/

全て期待通りの結果となったので、正しく動作していることが確認できた。

怪しげな挙動

今回は問題にはならなかったのですが、調査の過程で怪しげな挙動に遭遇しました。
プロセス数が0以外の時にCRITICALとなるように-C 0 -c 0としてみたのですが、プロセス数が1のときでもCRITICALになりませんでした。

[vagrant@localhost ~]$ /path/to/check-procs -C 0 -c 0 -p mariadb -u mysql
Procs OK: Found 1 matching processes; cmd /mariadb/; user /mysql/

-c 0だけにしても結果は同じでした。

[vagrant@localhost ~]$ /path/to/check-procs -c 0 -p mariadb -u mysql
Procs OK: Found 1 matching processes; cmd /mariadb/; user /mysql/

なので、プロセス数が0以外の時にCRITICALとするときには気をつけて下さい。