アラートルールを使用すると、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インスタンスを自動的に検出するように設定できます。
このドキュメントはオープンソースです。 問題の報告やプルリクエストを送信して、改善にご協力ください。