zaki work log

作業ログやら生活ログやらなんやら

ものすごくざっくりとPrometheusのアラートルールを設定して動きを見てみる

Prometheusのアラートルールを設定する。
閾値を越えたらalert状態にするというもの。
この状態になった場合の通知はまた別途AlertManagerを使うが、その前段階の設定についてざっくりと確認してみた。

prometheus.io

環境やベースのPrometheusは以下の「CentOS上でバイナリ実行しているPrometheus」です。(非Kubernetes環境)

zaki-hmkc.hatenablog.com

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設定状態

f:id:zaki-hmkc:20201019211614p:plain

webアクセスして「Alert」押下すると、設定したalertとその状態が確認できる。

異常状態になるように負荷をかける

お手軽負荷試験ツールyesを使用。(負荷試験ツールではない)

$ yes > /dev/null

PENDING

しばらくするとload averageが0.8を超えだす。

f:id:zaki-hmkc:20201019212147p:plain

まずは閾値を越えたタイミングで"PENDING"というstatusに遷移する。
Active Sinceは、その状態になったタイミングが記録されている。

ちなみにnode_load1のグラフはこんな感じ。

f:id:zaki-hmkc:20201019212847p:plain

FIRING

f:id:zaki-hmkc:20201019212520p:plain

PENDINGの状態がalertルールのfor:で設定した間(上記例で1min)継続すると、statusがFIRINGに遷移し、Prometheus的にこのメトリクス値が「異常」と判断される。

これでPrometheusのAlert画面を見ると、異常値があるかどうかを簡単に確認できる。

AlertManager

これで異常のハンドリングはできたけど、ユーザー(保守担当とか)がweb画面を見に行かないと異常はわからない。
Prometheus自体には異常時に通知する仕組みはないけど、AlertManagerを使って通知を行うことができる。

prometheus.io

これはまたそのうち。。