Prometheusのアラートルールを設定する。
閾値を越えたらalert状態にするというもの。
この状態になった場合の通知はまた別途AlertManagerを使うが、その前段階の設定についてざっくりと確認してみた。
環境やベースのPrometheusは以下の「CentOS上でバイナリ実行しているPrometheus」です。(非Kubernetes環境)
alertルール作成
ルール設定用のファイルrules/alert-sample.yml
を作成する(ファイル名は任意)。
試しに、Node Exporterで取得できる値のうち、制御が簡単なnode_load1
を対象に「値が0.8を超えたら」alertとなるように設定してみる。
groups: - name: alert sample rules: - alert: load alert expr: node_load1 > 0.8 for: 1m
こんな感じでexpr
に閾値を設定する。
また、その状態がどれだけ続いたら異常とするかの設定をfor
に記載する。(瞬間風速値だけで異常としないよう設定できる)
書式は分かりづらいけどAlerting RuleのページでなくRecording Ruleに載っている。
Prometheus設定と再起動
prometheus.yml
には以下の設定で読み込む設定にしている。
rule_files: - rules/*.yml
この状態でPrometheusを再起動すれば設定が有効になる。
$ ./prometheus --config.file=prometheus.yml
Alert設定状態
webアクセスして「Alert」押下すると、設定したalertとその状態が確認できる。
異常状態になるように負荷をかける
お手軽負荷試験ツールyes
を使用。(負荷試験ツールではない)
$ yes > /dev/null
PENDING
しばらくするとload averageが0.8を超えだす。
まずは閾値を越えたタイミングで"PENDING"というstatusに遷移する。
Active Sinceは、その状態になったタイミングが記録されている。
ちなみにnode_load1
のグラフはこんな感じ。
FIRING
PENDINGの状態がalertルールのfor:
で設定した間(上記例で1min)継続すると、statusがFIRINGに遷移し、Prometheus的にこのメトリクス値が「異常」と判断される。
これでPrometheusのAlert画面を見ると、異常値があるかどうかを簡単に確認できる。
AlertManager
これで異常のハンドリングはできたけど、ユーザー(保守担当とか)がweb画面を見に行かないと異常はわからない。
Prometheus自体には異常時に通知する仕組みはないけど、AlertManagerを使って通知を行うことができる。
これはまたそのうち。。