読者です 読者をやめる 読者になる 読者になる

vague memory

うろ覚えを無くしていこうともがき苦しむ人の備忘録

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

mackerel

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

通知結果

f:id:htnosm:20160426215657p:plain

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コンソール

f:id:htnosm:20160426215050p:plain

Slack通知

f:id:htnosm:20160426215051p:plain

Close時のWebコンソール

f:id:htnosm:20160426215052p:plain