

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Managed Service for Prometheus でアラートマネージャーを使用してアラートレシーバーにアラートを転送する
<a name="AMP-alertmanager-receiver"></a>

アラートは、アラートルールによって生成されると、アラートマネージャーに送信されます。アラートマネージャーは、アラートの重複排除、メンテナンス中のアラートの禁止、必要に応じたグループ化などの機能を実行します。次に、アラートをメッセージとして*アラートレシーバー*に転送します。オペレーターへの通知、自動応答、または他の方法でのアラートへの応答ができるアラートレシーバーを設定できます。

Amazon Simple Notiﬁcation Service (Amazon SNS) と PagerDuty を Amazon Managed Service for Prometheus でアラートレシーバーとして設定できます。以下のトピックでは、アラートレシーバーを作成して設定する方法について説明します。

**Topics**
+ [Amazon SNS をアラートレシーバーとして使用する](AMP-alertmanager-receiver-createtopic.md)
+ [PagerDuty をアラートレシーバーとして使用する](AMP-alertmanager-pagerduty.md)

# Amazon SNS をアラートレシーバーとして使用する
<a name="AMP-alertmanager-receiver-createtopic"></a>

既存の Amazon SNS トピックを Amazon Managed Service for Prometheus のアラートレシーバーとして使用することも、新しいトピックを作成することもできます。**[標準]** タイプのトピックを使用することをお勧めします。このタイプでは、トピックから E メール、SMS、HTTP にアラートを転送できます。

アラートマネージャーのレシーバーとして使用する新しい Amazon SNS トピックを作成するには、「[ステップ 1: トピックを作成する](https://docs.aws.amazon.com/sns/latest/dg/sns-getting-started.html#step-create-queue)」の手順に従います。トピックのタイプとして、必ず **[標準]** を選択してください。

その Amazon SNS トピックにメッセージが送信されるたびに E メールを受信するには、「[ステップ 2: トピックに対するサブスクリプションを作成する](https://docs.aws.amazon.com/sns/latest/dg/sns-getting-started.html#step-send-message)」の手順に従います。

新規または既存の Amazon SNS トピックを使用するかどうかにかかわらず、以下のタスクを完了するには、Amazon SNS トピックの Amazon リソースネーム (ARN) が必要です。

**Topics**
+ [Amazon SNS トピックにアラートメッセージを送信するためのアクセス許可を Amazon Managed Service for Prometheus に付与する](AMP-alertmanager-receiver-AMPpermission.md)
+ [Amazon SNS トピックにメッセージを送信するようにアラートマネージャーを設定する](AMP-alertmanager-receiver-config.md)
+ [Amazon SNS にメッセージを JSON として送信するようにアラートマネージャーを設定する](AMP-alertmanager-receiver-JSON.md)
+ [アラートのメッセージを他の送信先に送信するように Amazon SNS を設定する](AMP-alertmanager-SNS-otherdestinations.md)
+ [Amazon SNS メッセージ検証ルールを理解する](AMP-alertmanager-receiver-validation-truncation.md)

# Amazon SNS トピックにアラートメッセージを送信するためのアクセス許可を Amazon Managed Service for Prometheus に付与する
<a name="AMP-alertmanager-receiver-AMPpermission"></a>

Amazon SNS トピックにメッセージを送信するには、Amazon Managed Service for Prometheus にアクセス許可を付与する必要があります。次のポリシーステートメントは、そのアクセス許可を付与します。これには、*混乱した代理*問題と呼ばれるセキュリティ問題の防止に役立つ `Condition` ステートメントが含まれています。`Condition` ステートメントは、Amazon SNS トピックへのアクセスを制限し、この特定のアカウントと Amazon Managed Service for Prometheus ワークスペースからのオペレーションのみを許可します。混乱した代理に関する問題の詳細については、「[サービス間での不分別な代理処理の防止](#cross-service-confused-deputy-prevention)」を参照してください。

**Amazon SNS トピックにメッセージを送信するためのアクセス許可を Amazon Managed Service for Prometheus に付与するには**

1. Amazon SNS コンソールの[https://console.aws.amazon.com/sns/v3/home](https://console.aws.amazon.com/sns/v3/home)を開いてください。

1. ナビゲーションペインで、**[トピック]** を選択します。

1. Amazon Managed Service for Prometheus で使用しているトピックの名前を選択します。

1. **[編集]** を選択します。

1. **[アクセスポリシー]** を選択し、次のポリシーステートメントを既存のポリシーに追加します。

   ```
   {
       "Sid": "Allow_Publish_Alarms",
       "Effect": "Allow",
       "Principal": {
           "Service": "aps.amazonaws.com"
       },
       "Action": [
           "sns:Publish",
           "sns:GetTopicAttributes"
       ],
       "Condition": {
           "ArnEquals": {
               "aws:SourceArn": "workspace_ARN"
           },
           "StringEquals": {
               "AWS:SourceAccount": "account_id"
           }
       },
       "Resource": "arn:aws:sns:region:account_id:topic_name"
   }
   ```

   [オプション] Amazon SNS トピックでサービス側の暗号化 (SSE) が有効になっている場合は、トピックの暗号化に使用されるキーの AWS KMS キーポリシーに `kms:GenerateDataKey*`および アクセス`kms:Decrypt`許可を追加して、Amazon Managed Service for Prometheus がこの暗号化されたトピックにメッセージを送信できるようにする必要があります。

   例えば、以下をポリシーに追加できます。

   ```
   {
     "Statement": [{
       "Effect": "Allow",
       "Principal": {
         "Service": "aps.amazonaws.com"
       },
       "Action": [
         "kms:GenerateDataKey*",
         "kms:Decrypt"
       ],
       "Resource": "*"
     }]
   }
   ```

   詳細については、「[SNS トピックに対するAWS KMS アクセス許可](https://docs.aws.amazon.com/sns/latest/dg/sns-key-management.html#sns-what-permissions-for-sse)」を参照してください。

1. **[変更を保存]** を選択します。

**注記**  
 デフォルトでは、Amazon SNS は `AWS:SourceOwner` に条件を設定したアクセスポリシーを作成します。詳細については、「[SNS アクセスポリシー](https://docs.aws.amazon.com/sns/latest/dg/sns-access-policy-use-cases.html#source-account-versus-source-owner)」を参照してください。

**注記**  
IAM は、[最も制限の厳しいポリシーを優先](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)するルールに従います。SNS トピックに、ドキュメント化された Amazon SNS ポリシーブロックよりも制限の厳しいポリシーブロックがある場合、トピックポリシーのアクセス許可は付与されません。ポリシーを評価して何が許可されているかを確認するには、「[ポリシーの評価論理](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)」を参照してください。

## オプトインリージョンの SNS トピック設定
<a name="AMP-alertmanager-sns-regional-config"></a>

`aps.amazonaws.com` を使用して、Amazon Managed Service for Prometheus ワークスペースと同じ で Amazon SNS トピックを設定できます。 AWS リージョン 非オプトインリージョン (us-east-1 など) の SNS トピックをオプトインリージョン (af-south-1 など) で使用するには、リージョンサービスプリンシパル形式を使用する必要があります。リージョンサービスの原則では、*us-east-1* を、使用する非オプトインリージョン (**aps.*us-east-1*.amazonaws.com**) に置き換えます。

次の表に、オプトインリージョンとそれに対応するリージョンサービスプリンシパルを示します。


**オプトインリージョンとそのリージョンサービスプリンシパル**  

| リージョン名 | リージョン | リージョンサービスプリンシパル | 
| --- | --- | --- | 
| アフリカ (ケープタウン) | af-south-1 | af-south-1.aps.amazonaws.com | 
| アジアパシフィック (香港) | ap-east-1 | ap-east-1.aps.amazonaws.com | 
| アジアパシフィック (タイ) | ap-southeast-7 | ap-southeast-7.aps.amazonaws.com | 
| 欧州 (ミラノ) | eu-south-1 | eu-south-1.aps.amazonaws.com | 
| 欧州 (チューリッヒ) | eu-central-2 | eu-central-2.aps.amazonaws.com | 
| 中東 (UAE) | me-central-1 | me-central-1.aps.amazonaws.com | 
| アジアパシフィック (マレーシア) | ap-southeast-5 | ap-southeast-5.aps.amazonaws.com | 

オプトインリージョンを有効にする方法については、 Amazon Web Services 全般のリファレンスの「*IAM ユーザーガイド*」の「[AWS リージョンの管理](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-regions.html)」を参照してください。

これらのオプトインリージョンに Amazon SNS トピックを設定するときは、正しいリージョンサービスプリンシパルを使用して、リージョン間のアラート配信を有効にしてください。

## サービス間での不分別な代理処理の防止
<a name="cross-service-confused-deputy-prevention"></a>

混乱した代理問題は、アクションを実行するためのアクセス許可を持たないエンティティが、より特権のあるエンティティにアクションの実行を強制できてしまう場合に生じる、セキュリティ上の問題です。では AWS、サービス間のなりすましにより、混乱した代理問題が発生する可能性があります。サービス間でのなりすましは、1 つのサービス (*呼び出し元サービス*) が、別のサービス (*呼び出し対象サービス*) を呼び出すときに発生する可能性があります。呼び出し元サービスは、本来ならアクセスすることが許可されるべきではない方法でその許可を使用して、別のお客様のリソースに対する処理を実行するように操作される場合があります。これを防ぐために、 AWS には、アカウント内のリソースへのアクセス権が付与されたサービスプリンシパルですべてのサービスのデータを保護するために役立つツールが用意されています。

リソースポリシーで [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) および [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) グローバル条件コンテキストキーを使用して、Amazon Managed Service for Prometheus が Amazon SNS に付与するリソースへのアクセス許可を制限することをお勧めします。両方のグローバル条件コンテキストキーを同じポリシーステートメントで使用する場合は、`aws:SourceAccount` 値と、`aws:SourceArn` 値に含まれるアカウントが、同じアカウント ID を示している必要があります。

`aws:SourceArn` の値は、Amazon Managed Service for Prometheus ワークスペースの ARN でなければなりません。

混乱した代理問題から保護するための最も効果的な方法は、リソースの完全な ARN を指定して `aws:SourceArn` グローバル条件コンテキストキーを使用することです。リソースの完全な ARN が不明な場合や、複数のリソースを指定する場合は、`aws:SourceArn` グローバルコンテキスト条件キーを使用して、ARN の未知部分をワイルドカード (`*`) で表します。例えば、`arn:aws:servicename::123456789012:*` です。

「[Amazon SNS トピックにアラートメッセージを送信するためのアクセス許可を Amazon Managed Service for Prometheus に付与する](#AMP-alertmanager-receiver-AMPpermission)」に記載されているポリシーは、Amazon Managed Service for Prometheus で `aws:SourceArn` および `aws:SourceAccount` グローバル条件コンテキストキーを使用して、混乱した代理問題を防止する方法を示しています。

# Amazon SNS トピックにメッセージを送信するようにアラートマネージャーを設定する
<a name="AMP-alertmanager-receiver-config"></a>

**標準**タイプの (新規または既存の) Amazon SNS トピックを作成したら、これをアラートレシーバーとしてアラートマネージャー設定に追加できます。アラートマネージャーは、設定したアラートレシーバーにアラートを転送できます。そのためには、Amazon SNS トピックの Amazon リソースネーム (ARN) を知っている必要があります。

Amazon SNS のレシーバー設定の詳細については、Prometheus の構成に関するドキュメントの「[<sns\$1configs>](https://prometheus.io/docs/alerting/latest/configuration/#sns_configs)」を参照してください。

**サポートされないプロパティ**

Amazon Managed Service for Prometheus では、アラートのレシーバーとして Amazon SNS がサポートされています。ただし、サービスの制約により、Amazon SNS レシーバーのすべてのプロパティがサポートされるわけではありません。以下のプロパティは、Amazon Managed Service for Prometheus のアラートマネージャー設定ファイルでは使用できません。
+ `api_url:` - `api_url` は Amazon Managed Service for Prometheus によって自動的に設定されるため、このプロパティは使用できません。
+ `Http_config` - このプロパティは、外部プロキシを設定できるようにするものです。Amazon Managed Service for Prometheus では、この機能は現在サポートされていません。

また、SigV4 設定にはリージョンプロパティを含める必要があります。リージョンプロパティを指定しない場合、認可リクエストを行うための十分な情報が Amazon Managed Service for Prometheus に提供されません。

**Amazon SNS トピックをレシーバーとしてアラートマネージャーを構成するには**

1. 既存のアラートマネージャー設定ファイルを使用している場合は、テキストエディタでそのファイルを開きます。

1. `receivers` ブロックに Amazon SNS 以外の現在のレシーバーがある場合は、それらを削除します。複数の Amazon SNS トピックをレシーバーとして構成するには、各トピックを `receivers` ブロック内の個別の `sns_config` ブロックに追加します。

1. `receivers` セクションに次の YAML ブロックを追加します。

   ```
   - name: name_of_receiver
     sns_configs:
       - sigv4:
           region: AWS リージョン
         topic_arn: ARN_of_SNS_topic
         subject: yoursubject
         attributes:
           key: yourkey
           value: yourvalue
   ```

`subject` を指定しない場合、デフォルトでは、ラベル名と値を使用するデフォルトテンプレートから件名が生成されますが、この値は SNS には長すぎる可能性があります。件名に適用されるテンプレートを変更するには、このガイドの「[Amazon SNS にメッセージを JSON として送信するようにアラートマネージャーを設定する](AMP-alertmanager-receiver-JSON.md)」を参照してください。

この後は、アラートマネージャー設定ファイルを Amazon Managed Service for Prometheus にアップロードする必要があります。詳細については、「[Amazon Managed Service for Prometheus にアラートマネージャー設定ファイルをアップロードする](AMP-alertmanager-upload.md)」を参照してください。

# Amazon SNS にメッセージを JSON として送信するようにアラートマネージャーを設定する
<a name="AMP-alertmanager-receiver-JSON"></a>

Amazon Managed Service for Prometheus アラートマネージャーは、デフォルトでは、メッセージをプレーンテキストリスト形式で出力します。これは、他のサービスで解析しにくい場合があります。代わりに、アラートを JSON 形式で送信するようにアラートマネージャーを設定できます。JSON を使用すると、 AWS Lambda またはウェブフック受信エンドポイントで Amazon SNS のダウンストリームのメッセージを簡単に処理できます。デフォルトのテンプレートを使用する代わりに、メッセージの内容を JSON で出力するカスタムテンプレートを定義すると、ダウンストリーム関数での解析が容易になります。

アラートマネージャーから Amazon SNS に JSON 形式でメッセージを出力するには、アラートマネージャーの設定を更新して、`template_files` ルートセクション内に次のコードを含めます。

```
default_template: |
   {{ define "sns.default.message" }}{{ "{" }}"receiver": "{{ .Receiver }}","status": "{{ .Status }}","alerts": [{{ range $alertIndex, $alerts := .Alerts }}{{ if $alertIndex }}, {{ end }}{{ "{" }}"status": "{{ $alerts.Status }}"{{ if gt (len $alerts.Labels.SortedPairs) 0 -}},"labels": {{ "{" }}{{ range $index, $label := $alerts.Labels.SortedPairs }}{{ if $index }}, {{ end }}"{{ $label.Name }}": "{{ $label.Value }}"{{ end }}{{ "}" }}{{- end }}{{ if gt (len $alerts.Annotations.SortedPairs ) 0 -}},"annotations": {{ "{" }}{{ range $index, $annotations := $alerts.Annotations.SortedPairs }}{{ if $index }}, {{ end }}"{{ $annotations.Name }}": "{{ $annotations.Value }}"{{ end }}{{ "}" }}{{- end }},"startsAt": "{{ $alerts.StartsAt }}","endsAt": "{{ $alerts.EndsAt }}","generatorURL": "{{ $alerts.GeneratorURL }}","fingerprint": "{{ $alerts.Fingerprint }}"{{ "}" }}{{ end }}]{{ if gt (len .GroupLabels) 0 -}},"groupLabels": {{ "{" }}{{ range $index, $groupLabels := .GroupLabels.SortedPairs }}{{ if $index }}, {{ end }}"{{ $groupLabels.Name }}": "{{ $groupLabels.Value }}"{{ end }}{{ "}" }}{{- end }}{{ if gt (len .CommonLabels) 0 -}},"commonLabels": {{ "{" }}{{ range $index, $commonLabels := .CommonLabels.SortedPairs }}{{ if $index }}, {{ end }}"{{ $commonLabels.Name }}": "{{ $commonLabels.Value }}"{{ end }}{{ "}" }}{{- end }}{{ if gt (len .CommonAnnotations) 0 -}},"commonAnnotations": {{ "{" }}{{ range $index, $commonAnnotations := .CommonAnnotations.SortedPairs }}{{ if $index }}, {{ end }}"{{ $commonAnnotations.Name }}": "{{ $commonAnnotations.Value }}"{{ end }}{{ "}" }}{{- end }}{{ "}" }}{{ end }}
   {{ define "sns.default.subject" }}[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}]{{ end }}
```

**注記**  
このテンプレートは、英数字データから JSON を作成します。データに特殊文字が含まれている場合は、このテンプレートを使用する前にそれらをエンコードしてください。

このテンプレートが送信通知で使用されるようにするには、次のように `alertmanager_config` ブロックでテンプレートを参照します。

```
alertmanager_config: |
  global:
  templates:
    - 'default_template'
```

**注記**  
このテンプレートは、メッセージ本文全体を JSON として出力するものです。このテンプレートにより、メッセージ本文全体が上書きされます。この特定のテンプレートを使用する場合、メッセージ本文をオーバーライドすることはできません。手動で行ったオーバーライドは、テンプレートよりも優先されます。

詳細については、以下を参照してください。
+ アラートマネージャー設定ファイルについては、「[Amazon Managed Service for Prometheus でアラートを管理およびルーティングするためのアラートマネージャー設定を作成します。](AMP-alertmanager-config.md)」を参照してください。
+ 設定ファイルのアップロードについては、「[Amazon Managed Service for Prometheus にアラートマネージャー設定ファイルをアップロードする](AMP-alertmanager-upload.md)」を参照してください。

# アラートのメッセージを他の送信先に送信するように Amazon SNS を設定する
<a name="AMP-alertmanager-SNS-otherdestinations"></a>

Amazon Managed Service for Prometheus は、Amazon Simple Notification Service (Amazon SNS) にのみアラートメッセージを送信できます。E メール、ウェブフック、Slack、OpsGenie などの他の送信先にメッセージを送信するには、これらのエンドポイントにメッセージを転送するように Amazon SNS を設定する必要があります。

以下のセクションでは、他の送信先にアラートを転送するように Amazon SNS を設定する方法について説明します。

**Topics**
+ [E メール](#AMP-alertmanager-SNS-otherdestinations-email)
+ [ウェブフック](#AMP-alertmanager-SNS-otherdestinations-webhook)
+ [Slack](#AMP-alertmanager-SNS-otherdestinations-Slack)
+ [OpsGenie](#AMP-alertmanager-SNS-otherdestinations-OpsGenie)

## E メール
<a name="AMP-alertmanager-SNS-otherdestinations-email"></a>

E メールにメッセージを出力するように Amazon SNS トピックを構成するには、サブスクリプションを作成します。Amazon SNS コンソールで、**[サブスクリプション]** タブを選択して、**[サブスクリプション]** リストページを開きます。**[サブスクリプションの作成]** を選択し、**[E メール]** を選択します。Amazon SNS から、指定した E メールアドレスに確認メールが送信されます。確認を受け入れると、サブスクライブしたトピックから Amazon SNS 通知を E メールとして受信できます。詳細については、「[Amazon SNS トピックへサブスクライブする](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html)」を参照してください。

## ウェブフック
<a name="AMP-alertmanager-SNS-otherdestinations-webhook"></a>

ウェブフックエンドポイントにメッセージを出力するように Amazon SNS トピックを構成するには、サブスクリプションを作成します。Amazon SNS コンソールで、**[サブスクリプション]** タブを選択して、**[サブスクリプション]** リストページを開きます。**[サブスクリプションの作成]** を選択し、**[HTTP/HTTPS]** を選択します。サブスクリプションを作成したら、確認手順に従ってサブスクリプションをアクティブにする必要があります。アクティブになると、HTTP エンドポイントで Amazon SNS 通知が受信されます。詳細については、「[Amazon SNS トピックへサブスクライブする](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html)」を参照してください。Slack ウェブフックを使用してさまざまな宛先にメッセージを発行する方法の詳細については、「[ウェブフックを使用して Amazon SNS メッセージを Amazon Chime、Slack、または Microsoft Teams に発行するにはどうすればよいですか?](https://aws.amazon.com/premiumsupport/knowledge-center/sns-lambda-webhooks-chime-slack-teams/)」を参照してください。

## Slack
<a name="AMP-alertmanager-SNS-otherdestinations-Slack"></a>

Slack にメッセージを出力するように Amazon SNS トピックを構成するには、2 つの方法があります。Slack による E メールからチャンネルへの統合を使用すると、Slack で E メールメッセージを受け取って Slack チャンネルに転送できます。または、Lambda 関数を使用して、Amazon SNS 通知を Slack に書き換えることができます。E メールを slack チャネルに転送する方法の詳細については、[「Slack Webhook AWS の SNS トピックサブスクリプションの確認](https://stackoverflow.com/questions/49341187/confirming-aws-sns-topic-subscription-for-slack-webhook)」を参照してください。Lambda 関数を作成して Amazon SNS メッセージを Slack に変換する方法の詳細については、「[How to integrate Amazon Managed Service for Prometheus with Slack](https://aws.amazon.com/blogs/mt/how-to-integrate-amazon-managed-service-for-prometheus-with-slack/)」を参照してください。

## OpsGenie
<a name="AMP-alertmanager-SNS-otherdestinations-OpsGenie"></a>

OpsGenie にメッセージを出力するように Amazon SNS トピックを構成する方法については、「[Integrate Opsgenie with Incoming Amazon SNS](https://support.atlassian.com/opsgenie/docs/integrate-opsgenie-with-incoming-amazon-sns/)」を参照してください。

# Amazon SNS メッセージ検証ルールを理解する
<a name="AMP-alertmanager-receiver-validation-truncation"></a>

Amazon Simple Notification Service (Amazon SNS) では、メッセージが特定の基準を満たしている必要があります。これらの標準を満たしていないメッセージは、受信時に変更されます。アラートメッセージは、以下のルールに基づいて、Amazon SNS レシーバーにより必要に応じて検証、切り捨て、または変更されます。
+ メッセージに UTF 以外の文字が含まれている場合。
  + メッセージは「**Error - not a valid UTF-8 encoded string**」に置き換えられます。
  + キーが **[truncated]** で値が **[true]** のメッセージ属性が 1 つ追加されます。
  + キーが **[modified]** で値が **[Message: Error - not a valid UTF-8 encoded string]** のメッセージ属性が 1 つ追加されます。
+ メッセージが空の場合。
  + メッセージは **[Error - Message should not be empty]** に置き換えられます。
  + キーが **[modified]** で値が **[Message: Error - Message should not be empty]** のメッセージ属性が 1 つ追加されます。
+ メッセージが切り捨てられた場合。
  + メッセージは切り捨てられたコンテンツになります。
  + キーが **[truncated]** で値が **[true]** のメッセージ属性が 1 つ追加されます。
  + キーが [modified] で値が **[Message: Error - Message has been truncated from *X* KB, because it exceeds the 256 KB size limit]** のメッセージ属性が 1 つ追加されます。
+ 件名にコントロール文字または非 ASCII 文字が含まれています。
  + サブジェクトにコントロール文字または非 ASCII 文字が含まれている場合、SNS はサブジェクトを **[Error - contains control- or non-ASCII characters]** に置き換えます。
  + SNS E メールの件名の場合は、改行 (`\n`) などのコントロール文字を削除します。
+ 件名が ASCII でない場合。
  + 件名は **[Error - contains non printable ASCII characters]** に置き換えられます。
  + キーが **[modified]** で値が **[Subject: Error - contains non-printable ASCII characters]** のメッセージ属性が 1 つ追加されます。
+ 件名が切り捨てられた場合。
  + 件名は切り捨てられたコンテンツになります。
  + キーが **[modified]** で値が **[Subject: Error - Subject has been truncated from *X* characters, because it exceeds the 100 character size limit]** のメッセージ属性が 1 つ追加されます。
+ メッセージ属性のキー/値が無効な場合。
  + 無効なメッセージ属性は削除されます。
  + キーが **[modified]** で値が **[MessageAttribute: Error - *X* of the message attributes have been removed because of invalid MessageAttributeKey or MessageAttributeValue]** のメッセージ属性が 1 つ追加されます。
+ メッセージ属性が切り捨てられた場合。
  + 余分なメッセージ属性は削除されます。
  + キーが **[modified]** で値が **[MessageAttribute: Error - *X* of the message attributes have been removed, because it exceeds the 256KB size limit]** のメッセージ属性が 1 つ追加されます。

# PagerDuty をアラートレシーバーとして使用する
<a name="AMP-alertmanager-pagerduty"></a>

PagerDuty に直接アラートを送信するように Amazon Managed Service for Prometheus を設定できます。この統合では、PagerDuty 統合キーを に保存 AWS Secrets Manager し、Amazon Managed Service for Prometheus にシークレットを読み取るアクセス許可を付与する必要があります。

PagerDuty の統合により、自動化されたインシデント対応ワークフローが可能になり、重要なアラートが適切なチームメンバーに適切なタイミングで届くようになります。PagerDuty をアラートレシーバーとして使用すると、PagerDuty のエスカレーションポリシー、オンコールスケジューリング、インシデント管理機能を活用して、アラートを迅速に確認して解決できます。この統合は、サービスの可用性を維持し、SLA 要件を満たすためにシステムの問題への迅速な対応が不可欠な本番環境に特に役立ちます。詳細については、*PagerDuty ウェブサイト*の「[PagerDuty ナレッジベース](https://support.pagerduty.com/)」を参照してください。

## PagerDuty 設定オプション
<a name="AMP-alertmanager-pagerduty-configuration-options"></a>




| オプション | 説明 | 必須 | 
| --- | --- | --- | 
|  `routing_key`  |  サービス上の統合用 PagerDuty ルーティングキー。これを Secrets Manager ARN として指定する必要があります  |  はい  | 
|  `service_key`  |  サービス上の統合用 PagerDuty サービスキー。これを Secrets Manager ARN として指定する必要があります  |  はい (イベント API v1 の場合)  | 
|  `client`  |  通知機能のクライアント ID  |  いいえ  | 
|  `client_url`  |  通知の送信者へのバックリンク  |  いいえ  | 
|  `description`  |  インテントの説明  |  いいえ  | 
|  `details`  |  インシデントに関する詳細を提供する任意のキーと値のペアのセット  |  いいえ  | 
|  `severity`  |  インシデントの重要度  |  いいえ  | 
|  `class`  |  イベントのクラスまたはタイプ  |  いいえ  | 
|  `component`  |  イベントを担当するソースマシンのコンポーネント  |  いいえ  | 
|  `group`  |  コンポーネントの論理グループ  |  いいえ  | 
|  `source`  |  影響を受けるシステムの一意の場所  |  いいえ  | 

**注記**  
`url`、`service_key_file`、`routing_key_file`、`http_config` オプションはサポートされていません。

以下のトピックでは、Amazon Managed Service for Prometheus で PagerDuty をアラートレシーバーとして設定する方法について説明します。

**Topics**
+ [PagerDuty 設定オプション](#AMP-alertmanager-pagerduty-configuration-options)
+ [AWS Secrets Manager および アクセス許可を設定する](AMP-alertmanager-pagerduty-permissions.md)
+ [PagerDuty にアラートを送信するようにアラートマネージャーを設定する](AMP-alertmanager-pagerduty-configure-alertmanager.md)

# AWS Secrets Manager および アクセス許可を設定する
<a name="AMP-alertmanager-pagerduty-permissions"></a>

PagerDuty にアラートを送信する前に、PagerDuty 統合キーを安全に保存し、必要なアクセス許可を設定する必要があります。このプロセスでは AWS Secrets Manager、 でシークレットを作成し、カスタマーマネージド AWS Key Management Service (AWS KMS) キーを使用して暗号化し、シークレットとその暗号化キーの両方にアクセスするために必要なアクセス許可を Amazon Managed Service for Prometheus に付与します。次の手順では、この設定プロセスの各ステップについて説明します。

**Secrets Manager for PagerDuty でシークレットを作成するには**  
PagerDuty をアラートレシーバーとして使用するには、PagerDuty 統合キーを Secrets Manager に保存する必要があります。以下の手順に従ってください。

1. [Secrets Manager コンソール](https://console.aws.amazon.com/secretsmanager/)を開きます。

1. **新しいシークレットを保存** を選択します。

1. **[Secret type] (シークレットタイプ)** で、**[Other type of secret]** (他の種類のシークレット) を選択します。

1. **[キーと値のペア]** には、PagerDuty 統合キーをシークレット値として入力します。これは、PagerDuty 統合のルーティングキーまたはサービスキーです。

1. [**次へ**] を選択します。

1. シークレットの名前と説明を入力して **[次へ]** を選択します。

1. 必要に応じてローテーション設定を行い、**[次へ]** を選択します。

1. 設定を確認し、**[保存]** を選択します。

1. シークレットを作成したら、その ARN を書き留めます。アラートマネージャーを設定するときに必要になります。

**シークレットをカスタマーマネージド AWS KMS キーで暗号化するには**

シークレットとその暗号化キーにアクセスするためのアクセス許可を Amazon Managed Service for Prometheus に付与する必要があります。

1. **シークレットリソースポリシー**: [Secrets Manager コンソール](https://console.aws.amazon.com/secretsmanager/)でシークレットを開きます。

   1. **[リソースのアクセス許可]** を選択します。

   1. **[アクセス許可の編集]** を選択します。

   1. 次のポリシーステートメントを追加します。ステートメントで、*強調表示された値* を特定の値に置き換えます。

      ```
      {
        "Effect": "Allow",
        "Principal": {
          "Service": "aps.amazonaws.com"
        },
        "Action": "secretsmanager:GetSecretValue",
        "Resource": "*",
        "Condition": {
          "ArnEquals": {
            "aws:SourceArn": "arn:aws:aps:aws-region:123456789012:workspace/WORKSPACE_ID"
          },
          "StringEquals": {
            "aws:SourceAccount": "123456789012"
          }
        }
      }
      ```

   1. **[保存]** を選択します。

1. **KMS キーポリシー**: [AWS KMS コンソール](https://console.aws.amazon.com/kms)で AWS KMS キーを開きます。

   1. **[キーポリシー]** を選択します。

   1. **[編集]** を選択します。

   1. 次のポリシーステートメントを追加します。ステートメントで、*強調表示された値* を特定の値に置き換えます。

      ```
      {
        "Effect": "Allow",
        "Principal": {
          "Service": "aps.amazonaws.com"
        },
        "Action": "kms:Decrypt",
        "Resource": "*",
        "Condition": {
          "ArnEquals": {
            "aws:SourceArn": "arn:aws:aps:aws-region:123456789012:workspace/WORKSPACE_ID"
          },
          "StringEquals": {
            "aws:SourceAccount": "123456789012"
          }
        }
      }
      ```

   1. **[保存]** を選択します。

**次のステップ** – 次のトピック、[PagerDuty にアラートを送信するようにアラートマネージャーを設定する](AMP-alertmanager-pagerduty-configure-alertmanager.md) に進みます。

# PagerDuty にアラートを送信するようにアラートマネージャーを設定する
<a name="AMP-alertmanager-pagerduty-configure-alertmanager"></a>

PagerDuty にアラートを送信するようにアラートマネージャーを設定するには、アラートマネージャーの定義を更新する必要があります。これは、 AWS マネジメントコンソール、 AWS CLI、または AWS SDKsを使用して実行できます。

**Example アラートマネージャーの設定**  
以下は、PagerDuty にアラートを送信するアラートマネージャー設定の例です。この例では、*強調表示された値*を特定の値に置き換えます。  

```
alertmanager_config: |
  route:
    receiver: 'pagerduty-receiver'
    group_by: ['alertname']
    group_wait: 30s
    group_interval: 5m
    repeat_interval: 1h
  receivers:
    - name: 'pagerduty-receiver'
      pagerduty_configs:
      - routing_key: 
          aws_secrets_manager:
            secret_arn: 'arn:aws:secretsmanager:aws-region:123456789012:secret:YOUR_SECRET_NAME'
            secret_key: 'YOUR_SECRET_KEY'
            refresh_interval: 5m
        description: '{{ .CommonLabels.alertname }}'
        severity: 'critical'
        details:
          firing: '{{ .Alerts.Firing | len }}'
          status: '{{ .Status }}'
          instance: '{{ .CommonLabels.instance }}'
```

**Example AWS CLI**  
以下は、アラートマネージャーの定義を更新するために使用される AWS CLI コマンドです。この例では、*強調表示された値*を特定の値に置き換えます。  

```
aws amp put-alert-manager-definition \
  --workspace-id WORKSPACE_ID \
  --data file://alertmanager-config.yaml
```

## PagerDuty 統合のトラブルシューティング
<a name="AMP-alertmanager-pagerduty-troubleshooting"></a>

アラートが PagerDuty に送信されていない場合は、次の項目を確認してください。
+ シークレットが存在し、正しい PagerDuty 統合キーが含まれていることを確認します。
+ シークレットがカスタマー管理の KMS キーで暗号化されていることを確認します。
+ シークレットと KMS キーの両方のリソースポリシーが、Amazon Managed Service for Prometheus に必要なアクセス許可を付与していることを確認します。
+ アラートマネージャー設定の ARN がシークレットを正しく参照していることを確認します。
+ PagerDuty アカウントで PagerDuty 統合キーが有効でアクティブであることを確認します。

Amazon Managed Service for Prometheus は、トラブルシューティングに役立つ Amazon CloudWatch Logs と以下の CloudWatch メトリクスをサポートします。詳細については、「[CloudWatch Logs で Amazon Managed Service for Prometheus イベントをモニタリングする](CW-logs.md)」および「[CloudWatch メトリクスを使用して Amazon Managed Service for Prometheus のリソースモニタリングする](AMP-CW-usage-metrics.md)」を参照してください。CloudWatch メトリクス
+ `SecretFetchFailure`
+ `AlertManagerNotificationsThrottledByIntegration`
+ `AlertManagerNotificationsFailedByIntegration`