アラートルール

アラートルールを使用すると、Prometheus式言語の式に基づいてアラート条件を定義し、発生したアラートに関する通知を外部サービスに送信できます。 アラート式が特定の時点において1つ以上のベクトル要素という結果になった場合、アラートはこれらの要素のラベルセットに対してアクティブとみなされます。

アラートルールの定義

アラートルールは、Prometheusでは記録ルールと同じ方法で設定されます。

アラートを含むルールのファイル例は次のとおりです。

groups:
- name: example
  rules:
  - alert: HighRequestLatency
    expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5
    for: 10m
    labels:
      severity: page
    annotations:
      summary: High request latency

オプションのfor句により、Prometheusは新しい式出力ベクトル要素を最初に検出してから、その要素に対してアラートを発生しているとカウントするまでに、一定時間待機します。 この場合、Prometheusはアラートが発生する前に、各評価において10分間アラートがアクティブな状態を継続していることを確認します。 アクティブであるが、まだ発生していない要素は、保留状態にあります。 for句のないアラートルールは、最初の評価でアクティブになります。

labels句を使用すると、アラートに添付する追加のラベルのセットを指定できます。 既存の競合するラベルは上書きされます。 ラベル値はテンプレート化できます。

annotations句は、アラートの説明やランブックへのリンクなど、より長い追加情報を格納するために使用できる一連の情報ラベルを指定します。 注釈値はテンプレート化できます。

テンプレート化

ラベルと注釈の値は、コンソールテンプレートを使用してテンプレート化できます。 $labels変数には、アラートインスタンスのラベルのキーと値のペアが保持されます。 設定された外部ラベルには、$externalLabels変数を介してアクセスできます。 $value変数には、アラートインスタンスの評価値が保持されます。

# To insert a firing element's label values:
{{ $labels.<labelname> }}
# To insert the numeric expression value of the firing element:
{{ $value }}

groups:
- name: example
  rules:

  # Alert for any instance that is unreachable for >5 minutes.
  - alert: InstanceDown
    expr: up == 0
    for: 5m
    labels:
      severity: page
    annotations:
      summary: "Instance {{ $labels.instance }} down"
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."

  # Alert for any instance that has a median request latency >1s.
  - alert: APIHighRequestLatency
    expr: api_http_request_latencies_second{quantile="0.5"} > 1
    for: 10m
    annotations:
      summary: "High request latency on {{ $labels.instance }}"
      description: "{{ $labels.instance }} has a median request latency above 1s (current value: {{ $value }}s)"

実行時におけるアラートの検査

どのアラートがアクティブ(保留中または発生中)か手動で検査するには、Prometheusインスタンスの「アラート」タブに移動します。 これにより、各定義済みアラートが現在アクティブになっている正確なラベルセットが表示されます。

保留中および発生中のアラートの場合、PrometheusはALERTS{alertname="<アラート名>", alertstate="<pendingまたはfiring>", <追加のアラートラベル>}の形式の合成時系列も保存します。 サンプル値は、アラートが指定されたアクティブ状態(保留中または発生中)である限り1に設定され、そうでなくなった場合は時系列は失効としてマークされます。

アラート通知の送信

Prometheusのアラートルールは、*現在*何が壊れているかを把握するのに優れていますが、完全な通知ソリューションではありません。単純なアラート定義に加えて、要約、通知レート制限、サイレンシング、アラートの依存関係を追加するには、別のレイヤーが必要です。 Prometheusのエコシステムでは、Alertmanagerがこの役割を担います。 したがって、Prometheusはアラート状態に関する情報をAlertmanagerインスタンスに定期的に送信するように設定できます。Alertmanagerインスタンスは、適切な通知の送信を処理します。
Prometheusは、サービスディスカバリ統合を介して利用可能なAlertmanagerインスタンスを自動的に検出するように設定できます。

このドキュメントはオープンソースです。 問題の報告やプルリクエストを送信して、改善にご協力ください。