アラートルール

アラートルールを使用すると、Prometheus 式言語の式に基づいてアラート条件を定義し、発生したアラートに関する通知を外部サービスに送信できます。アラート式が特定の時点で 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 に指示します。これは、アラートのフラッピング、データ損失による false resolution などの状況を防ぐために使用できます。keep_firing_for 句のないアラートルールは、条件が満たされない最初の評価で非アクティブになります(上記で説明したオプションの for 期間が満たされていると仮定します)。

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

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

テンプレート

ラベルと注釈の値は、コンソールテンプレート を使用してテンプレート化できます。$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="<alert name>", alertstate="<pending or firing>", <additional alert labels>} の形式の合成時系列も格納します。アラートが指定されたアクティブ(保留中または発生中)状態にある間、サンプル値は 1 に設定され、この状態がなくなったときにシリーズは無効とマークされます。

アラート通知の送信

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

このページの内容