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
通知結果

20160426215657

debuglogを確認
2016/04/26 20:23:19 checker.go:81: DEBUG  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  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  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  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  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  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  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  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ファイル指定ではない)
-m | -M –ppid
–match-self | –match-parent
検索親PID
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
-u | -U
–state
–user | –user-not
スレッド状態
プロセス所有者
-e | -E –esec-over | –esec-under プロセス実行時間[秒]が指定値より 大きい |小さい プロセスが検索される
-i | -I –cpu-over | –cpu-under CPU時間[秒]が指定値より 大きい|小さい プロセスが検索される

閾値超過時の例

Alert発生時のWebコンソール

20160426215050

Slack通知

20160426215051

Close時のWebコンソール

20160426215052

元記事はこちら

Mackerel事始め check-plugin プロセス監視