check-plugin を使ってプロセス監視を行います。
チェックプラグインの共通設定
- notification_interval
- 再送間隔(分)
- 未指定=再送無し
- 最短30分(30分未満を設定した場合も30分)
- max_check_attempts
- 指定回数連続でOK以外の結果の場合にアラート発報
再送30分、連続3回の設定の場合
設定例
[plugin.checks.check_ntpd] command = "/usr/local/bin/check-procs --pattern ntpd -u ntp" notification_interval = 30 max_check_attempts = 3
通知結果
debuglogを確認
2016/04/26 20:23:19 checker.go:81: DEBUG <checks> Checker "check_ntpd" status=OK message="Procs OK: Found 1 matching processes; cmd /ntpd/; user /ntp/\n" # ntpdを停止、以降CRITICAL 2016/04/26 20:25:18 checker.go:81: DEBUG <checks> Checker "check_ntpd" status=CRITICAL message="Procs CRITICAL: Found 0 matching processes; cmd /ntpd/; user /ntp/\n" 2016/04/26 20:26:18 checker.go:81: DEBUG <checks> Checker "check_ntpd" status=CRITICAL message="Procs CRITICAL: Found 0 matching processes; cmd /ntpd/; user /ntp/\n" 2016/04/26 20:27:18 checker.go:81: DEBUG <checks> Checker "check_ntpd" status=CRITICAL message="Procs CRITICAL: Found 0 matching processes; cmd /ntpd/; user /ntp/\n" # ↑で通知発生 2016/04/26 20:28:18 checker.go:81: DEBUG <checks> Checker "check_ntpd" status=CRITICAL message="Procs CRITICAL: Found 0 matching processes; cmd /ntpd/; user /ntp/\n" # ・・・ 略 ・・・ 2016/04/26 20:56:39 checker.go:81: DEBUG <checks> Checker "check_ntpd" status=CRITICAL message="Procs CRITICAL: Found 0 matching processes; cmd /ntpd/; user /ntp/\n" 2016/04/26 20:57:39 checker.go:81: DEBUG <checks> Checker "check_ntpd" status=CRITICAL message="Procs CRITICAL: Found 0 matching processes; cmd /ntpd/; user /ntp/\n" # ↑で通知発生 2016/04/26 20:58:39 checker.go:81: DEBUG <checks> Checker "check_ntpd" status=CRITICAL message="Procs CRITICAL: Found 0 matching processes; cmd /ntpd/; user /ntp/\n"
check-procs.conf
予期しないプロセスを検索してしまう可能性があるため、 patternは極力正確に、userも指定した方が無難です。
[plugin.checks.check_http] command = "/usr/local/bin/check-procs --pattern /usr/sbin/httpd" [plugin.checks.check_ntpd] command = "/usr/local/bin/check-procs --pattern ntpd -u ntp" notification_interval = 30 max_check_attempts = 3
オプション
状態オプション
閾値設定を省略した場合、-W、-Cのデフォルトが 1 なので、プロセスが存在していない(停止している)状態でCRITICALアラートが飛びます。
オプション | ロングオプション | 説明 |
---|---|---|
-w | -W | --warn-over | --warn-under | WARNING閾値(プロセス数が指定値より 大きい|小さい) |
-c | -C | --critical-over | --critical-under | CRITICAL閾値(プロセス数が指定値より 大きい|小さい) |
検索オプション
m | M オプションは今一つ使い所がわかりませんでした。
また、s オプションは { R | S | D | T | Z } のいずれを指定してもマッチせずでした。
(原因について深くは調べていません)
オプション | ロングオプション | 説明 |
---|---|---|
-p | -x | --pattern | --exclude-pattern | 検索パターン | 除外パターン |
-f | --file-pid | 検索PID(.pidファイル指定ではない) |
--ppid | 検索親PID | |
-m | -M | --match-self | --match-parent | os.Getpid() | os.Getppid と比較(mackerel-agent のプロセスを含めるか否か?) |
-z | --virtual-memory-size | VSZ[KB]閾値、指定値以下のプロセスが検索される |
-r | --resident-set-size | RSS[KB]閾値、指定値以下のプロセスが検索される |
-P | --proportional-set-size | PSS[KB]閾値、指定値以下のプロセスが検索される |
-T | --thread-count | スレッド数閾値、指定値以下のプロセスが検索される |
-s | --state | スレッド状態 |
-u | -U | --user | --user-not | プロセス所有者 |
-e | -E | --esec-over | --esec-under | プロセス実行時間[秒]が指定値より 大きい |小さい プロセスが検索される |
-i | -I | --cpu-over | --cpu-under | CPU時間[秒]が指定値より 大きい|小さい プロセスが検索される |
閾値超過時の例
Alert発生時のWebコンソール
Slack通知
Close時のWebコンソール