Amazon Managed Service for Prometheus Alert Manager
はじめに
Amazon Managed Service for Prometheus (AMP) は、「Recording rules」と「Alerting rules」の 2 種類のルールをサポートしており、既存の Prometheus サーバーからインポートして定期的に評価できます。
アラートルールを使用すると、PromQL としきい値に基づいてアラート条件を定義できます。アラートルールの値がしきい値を超えると、Amazon Managed Service for Prometheus の Alert manager に通知が送信されます。これは、スタンドアロン Prometheus の Alert manager と同様の機能を提供します。アラートは、Prometheus のアラートルールがアクティブになったときの結果です。
アラートルールファイル
Amazon Managed Service for Prometheus のアラートルールは、YAML 形式のルールファイルで定義されます。これは、スタンドアロン Prometheus のルールファイルと同じ形式に従います。お客様は、Amazon Managed Service for Prometheus ワークスペースに複数のルールファイルを持つことができます。ワークスペースは、Prometheus メトリクスの保存とクエリに専用の論理的なスペースです。
ルールファイルには通常、次のフィールドがあります。
groups:
- name:
rules:
- alert:
expr:
for:
labels:
annotations:
Groups: A collection of rules that are run sequentially at a regular interval
Name: Name of the group
Rules: The rules in a group
Alert: Name of the alert
Expr: The expression for the alert to trigger
For: Minimum duration for an alert’s expression to be exceeding threshold before updating to a firing status
Labels: Any additional labels attached to the alert
Annotations: Contextual details such as a description or link
サンプルのルールファイルは以下のようになります。
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
Alert Manager 設定ファイル
Amazon Managed Service for Prometheus Alert Manager は、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
アラートの重要な側面
Amazon Managed Service for Prometheus の Alert Manager 設定ファ イルを作成する際に注意すべき 3 つの重要な点があります。
- グループ化: これは、類似したアラートを単一の通知に集約するのに役立ちます。障害や停止の影響範囲が大きく、多くのシステムに影響を与え、複数のアラートが同時に発火する場合に便利です。また、カテゴリ別にグループ化する場合にも使用できます (例: ノードアラート、Pod アラート)。アラートマネージャー設定ファイルの route ブロックを使用して、このグループ化を設定できます。
- 抑制: これは、すでにアクティブで発火している類似のアラートのスパムを回避するために、特定の通知を抑制する方法です。inhibit_rules ブロックを使用して、抑制ルールを記述できます。
- サイレンシング: アラートは、メンテナンスウィンドウや計画的な停止中など、指定された期間ミュートできます。受信したアラートは、アラートをサイレンシングする前に、すべての等価性または正規表現の一致が検証されます。PutAlertManagerSilences API を使用して、サイレンシングを作成できます。
Amazon Simple Notification Service (SNS) を通じてアラートをルーティングする
現在、Amazon Managed Service for Prometheus Alert Manager は Amazon SNS をサポートしています。これは唯一のレシーバーです。alertmanager_config ブロックの重要なセクションは receivers であり、これにより顧客はアラートを受信するように Amazon SNS を設定できます。次のセクションは、receivers ブロックのテンプレートとして使用できます。
- name: name_of_receiver
sns_configs:
- sigv4:
region: <AWS_Region>
topic_arn: <ARN_of_SNS_topic>
subject: somesubject
attributes:
key: <somekey>
value: <somevalue>
Amazon SNS 設定は、明示的にオーバーライドされない限り、デフォルトとして次のテンプレートを使用します。
{{ define "sns.default.message" }}{{ .CommonAnnotations.SortedPairs.Values | join " " }}
{{ if gt (len .Alerts.Firing) 0 -}}
Alerts Firing:
{{ template "__text_alert_list" .Alerts.Firing }}
{{- end }}
{{ if gt (len .Alerts.Resolved) 0 -}}
Alerts Resolved:
{{ template "__text_alert_list" .Alerts.Resolved }}
{{- end }}
{{- end }}
追加リファレンス: 通知テンプレートの例