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とするときには気をつけて下さい。