背景
Prometheusというものが、メトリクスを保存したり、保存したメトリクスを返してくれるものだと理解していたが、アラートについてはさっぱりよく分かっていなかった。 AlertManagerと関連して理解つつあるので、まとめておく。
アラート機能とは
以下の記事の記載がわかりやすい。
アラート機能は、監視対象のデータがあらかじめ設定しておいた条件に合致した場合、メールやインスタントメッセージ、チャットなどを使って管理者にその旨を通知したり、指定しておいた外部サービスのAPIを呼び出すというものだ。
ここで大事なのが、「Prometheusでアラート生成を行えるが、それをどこかに通知するにはAlertManagerが必要」ということである。
設定方法
つまり、PrometheusとAlertManagerの両方を設定・デプロイしないといけないということだ(Prometheus Operatorを使用する想定)。 ということで実際の設定を記す。
AlertManagerの設定
- AlertManagerリソースを作成
- アラート設定を作成してAlertManagerリソースと紐付け
- 以下3つがある
- 設定ファイルをSecretに埋め込む
- AlertManagerリソースと同じnamespaceにAlertmanagerConfigリソースを作成する。
spec.alertmanagerConfiguration
を使って指定する spec.alertmanagerConfigSelector
とspec.alertmanagerConfigNamespaceSelector
を定義して、AlertmanagerConfigs オブジェクトを選択
- 以下3つがある
Prometheusの設定
- Prometheus と AlertManagerの紐付け
- Prometheusリソースで
spec.alerting.alertmanagers
で設定。AlertManagerのServiceを指定する。
- Prometheusリソースで
- Prometheus でアラートを生成する条件を設定
- いわゆるアラートルール
- ルールというからには結果が bool になる条件式を設定する。
- それが true になるとメトリクスとして Promehteus に保存される。
- その条件式は Prometheus Query で記述され、Queryを発行する間隔値も設定できる。
- PrometheusRuleリソースを作成
- Prometheusリソースで
spec.ruleSelector
でPrometheusRuleリソースを指定 - recording rulesという便利機能を使える: https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/
- いわゆるアラートルール
- ルールが発火したら、Prometheus Serverから AlertManagerインスタンスに自動で送られるっぽい