Amazon Managed Service for Prometheus アラートマネージャー
はじめに
Amazon Managed Service for Prometheus (AMP) は、「Recording ルール」と「Alerting ルール」という 2 種類のルールをサポートしています。 これらのルールは既存の Prometheus サーバーからインポートでき、定期的に評価されます。
Alerting ルール を使用すると、PromQL としきい値に基づいてアラート条件を定義できます。 Alerting ルールの値がしきい値を超えると、Amazon Managed Service for Prometheus の Alert Manager に通知が送信されます。 これは、スタンドアロンの Prometheus の Alert Manager と同様の機能を提供します。 アラートは、Prometheus の Alerting ルールがアクティブになったときの結果です。
アラートルールファイル
Amazon Managed Service for Prometheus のアラートルールは、スタンドアロンの Prometheus と同じ形式の YAML 形式のルールファイルで定義されます。お客様は Amazon Managed Service for Prometheus ワークスペースに複数のルールファイルを持つことができます。ワークスペースは、Prometheus メトリクスの保存とクエリに専用の論理的な空間です。
ルー ルファイルは通常、以下のフィールドを持ちます:
groups:
- name:
rules:
- alert:
expr:
for:
labels:
annotations:
Groups: 定期的に順番に実行されるルールのコレクション
Name: グループの名前
Rules: グループ内のルール
Alert: アラートの名前
Expr: アラートをトリガーする式
For: アラートの式が発火状態に更新される前に閾値を超えている最小期間
Labels: アラートに付加される追加のラベル
Annotations: 説明やリンクなどの文脈的な詳細
サンプルのルールファイルは以下のようになります
groups:
- name: test
rules:
- record: metric:recording_rule
expr: avg(rate(container_cpu_usage_seconds_total[5m]))
- name: alert-test
rules:
- alert: metric:alerting_rule
expr: avg(rate(container_cpu_usage_seconds_total[5m])) > 0
for: 2m
アラートマネージャー設定ファイル
Amazon Managed Service for Prometheus のアラートマネージャーは、YAML 形式の設定ファイルを使用してアラート(受信サービス用)を設定します。これは、スタンドアロンの Prometheus のアラートマネージャー設定ファイルと同じ構造です。設定ファイルは、アラートマネージャーとテンプレート作成のための 2 つの主要なセクションで構成されています。
-
template_files には、アラートのアノテーションとラベルのテンプレートが含まれており、便宜上
$value
、$labels
、$externalLabels
、$externalURL
変数として公開されています。$labels
変数はアラートインスタンスのラベルのキー/値ペアを保持します。設定された外部ラベルは$externalLabels
変数を通じてアクセスできます。$value
変数はアラートインスタンスの評価された値を保持します。.Value
、.Labels
、.ExternalLabels
、.ExternalURL
はそれぞれアラート値、アラートラベル、グローバルに設定された外部ラベル、外部 URL(--web.external-url
で設定)を含んでいます。 -
alertmanager_config には、スタンドアロンの Prometheus のアラートマネージャー設定ファイルと同じ構造を使用するアラートマネージャーの設定が含まれています。
template_files と alertmanager_config の両方を含むサンプルのアラートマネージャー設定ファイルは以下のようになります。
template_files:
default_template: |
{{ define "sns.default.subject" }}[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}]{{ end }}
{{ define "__alertmanager" }}AlertManager{{ end }}
{{ define "__alertmanagerURL" }}{{ .ExternalURL }}/#/alerts?receiver={{ .Receiver | urlquery }}{{ end }}
alertmanager_config: |
global:
templates:
- 'default_template'
route:
receiver: default
receivers:
- name: 'default'
sns_configs:
- topic_arn: arn:aws:sns:us-east-2:accountid:My-Topic
sigv4:
region: us-east-2
attributes:
key: severity
value: SEV2