アラートルール

アラートルールを使用すると、Prometheus Expression Languageの式に基づいてアラート条件を定義し、発報中のアラートに関する通知を外部サービスに送信できます。アラート式が特定の時点で1つ以上のベクトル要素に帰着する場合、その要素のラベルセットに対してアラートがアクティブであるとみなされます。

アラートルールの定義

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

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

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

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

オプションの `keep_firing_for` 句もあり、発報条件が最後に満たされた後、指定された期間このアラートを継続して発報するよう Prometheus に指示します。これは、アラートの点滅、データ損失による誤った解決などの状況を防ぐために使用できます。`keep_firing_for` 句のないアラートルールは、条件が満たされない最初の評価で非アクティブ化されます (上記で説明したオプションの `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="", }` の形式で合成時系列も保存します。アラートが指定されたアクティブ (保留中または発報中) 状態である限り、サンプル値は `1` に設定され、この状態でない場合は時系列は陳腐とマークされます。

アラート通知の送信

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

このページの内容