ふくしま

ソフトウェアエンジニア

Prometheusとアラートが何かを掴みつつある話

背景

Prometheusというものが、メトリクスを保存したり、保存したメトリクスを返してくれるものだと理解していたが、アラートについてはさっぱりよく分かっていなかった。 AlertManagerと関連して理解つつあるので、まとめておく。

アラート機能とは

以下の記事の記載がわかりやすい。

Prometheusのクエリ機能とアラート機能

アラート機能は、監視対象のデータがあらかじめ設定しておいた条件に合致した場合、メールやインスタントメッセージ、チャットなどを使って管理者にその旨を通知したり、指定しておいた外部サービスのAPIを呼び出すというものだ。

ここで大事なのが、「Prometheusでアラート生成を行えるが、それをどこかに通知するにはAlertManagerが必要」ということである。

設定方法

つまり、PrometheusとAlertManagerの両方を設定・デプロイしないといけないということだ(Prometheus Operatorを使用する想定)。 ということで実際の設定を記す。

AlertManagerの設定

  • AlertManagerリソースを作成
  • アラート設定を作成してAlertManagerリソースと紐付け
    • 以下3つがある
      • 設定ファイルをSecretに埋め込む
      • AlertManagerリソースと同じnamespaceにAlertmanagerConfigリソースを作成する。spec.alertmanagerConfiguration を使って指定する
      • spec.alertmanagerConfigSelectorspec.alertmanagerConfigNamespaceSelector を定義して、AlertmanagerConfigs オブジェクトを選択

Prometheusの設定

  • Prometheus と AlertManagerの紐付け
    • Prometheusリソースで spec.alerting.alertmanagers で設定。AlertManagerのServiceを指定する。
  • 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インスタンスに自動で送られるっぽい

参考