

# 根据警报更改执行操作
<a name="Acting_Alarm_Changes"></a>

CloudWatch 可以在发生两种类型的警报更改时通知用户：警报状态更改和警报配置更新。

当告警在进行评估时，其状态可能会变为其他状态，例如“ALARM”或“OK”。对于监控多个时间序列的 Metrics Insights 告警，每个时间序列（影响因素）只能处于“ALARM”或“OK”状态，绝不能处于 INSUFFICIENT\$1DATA 状态。这是因为只有在数据存在的情况下，时间序列才会存在。

此外，每当警报状态更改以及创建、删除或更新警报时，CloudWatch 都会将事件发送到 Amazon EventBridge。您可以编写 EventBridge 规则，从而在 EventBridge 收到这些事件时执行操作或通知您。

有关告警操作的更多信息，请参阅 [告警操作](alarm-actions.md)。

**Topics**
+ [将警报更改通知用户](Notify_Users_Alarm_Changes.md)
+ [从警报中调用 Lambda 函数](alarms-and-actions-Lambda.md)
+ [从警报启动 CloudWatch 调查](Start-Investigation-Alarm.md)
+ [停止、终止、重启或恢复 EC2 实例](UsingAlarmActions.md)
+ [告警事件和 EventBridge](cloudwatch-and-eventbridge.md)

# 将警报更改通知用户
<a name="Notify_Users_Alarm_Changes"></a>

本节说明了如何使用 AWS User Notifications 或 Amazon Simple Notification Service，来让用户收到有关警报更改的通知。

## 设置 AWS User Notifications
<a name="Alarm_User_Notifications"></a>

您可以使用 [AWS User Notifications](https://docs.aws.amazon.com/notifications/latest/userguide/what-is-service.html) 来设置传输渠道，以用于接收有关 CloudWatch 警报状态更改和配置更改事件的通知。当事件与指定的规则匹配时，会收到通知。您可以通过多个渠道接收事件通知，包括电子邮件、[AWS Chatbot](https://docs.aws.amazon.com/chatbot/latest/adminguide/what-is.html) 聊天通知或 [AWS 控制台移动应用程序推送通知](https://docs.aws.amazon.com/consolemobileapp/latest/userguide/managing-notifications.html)。您还可以在 [控制台通知中心](https://console.aws.amazon.com/notifications) 中查看通知。用户通知支持聚合，这可以减少在具体事件期间收到的通知数量。

您使用 AWS User Notifications 创建的通知配置不会计入您可以为每个目标警报状态配置的操作数量限制。当 AWS 用户通知服务对发送给 Amazon EventBridge 的事件进行匹配时，除非您指定高级筛选条件来将特定的警报或模式列入允许列表或拒绝列表，否则会针对您账户和选定区域中的所有警报发送通知。

以下高级筛选条件示例将对名为 `ServerCpuTooHigh` 的警报从“正常”变为“警报”的警报状态更改进行匹配。

```
{
"detail": {
    "alarmName": ["ServerCpuTooHigh"],
    "previousState": { "value": ["OK"] },
    "state": { "value": ["ALARM"] }
  }
}
```

您可以使用警报在 EventBridge 事件中发布的任何属性来创建筛选条件。有关更多信息，请参阅 [告警事件和 EventBridge](cloudwatch-and-eventbridge.md)。

## 设置 Amazon SNS 通知
<a name="US_SetupSNS"></a>

您可以使用 Amazon Simple Notification Service 来发送应用程序到应用程序（A2A）消息和应用程序对人（A2P）消息，包括手机短信（SMS）和电子邮件。有关更多信息，请参阅 [Amazon SNS 事件目标](https://docs.aws.amazon.com/sns/latest/dg/sns-event-destinations.html)。

对于警报可能处于的每种状态，您都可以将警报配置为向某个 SNS 主题发送消息。您为给定警报状态配置的每个 Amazon SNS 主题，都将计入您可以为该警报和状态配置的操作数量限制。您可以从账户中的任何警报向同一 Amazon SNS 主题发送消息，并为应用程序（A2A）和个人（A2P）消费端使用相同的 Amazon SNS 主题。由于此配置是在警报级别进行的，因此只有您配置的警报才会向所选的 Amazon SNS 主题发送消息。

首先，创建一个主题，然后订阅此主题。您可以选择将测试消息发布到此主题。有关示例，请参阅[使用 AWS 管理控制台 设置 Amazon SNS 主题](#set-up-sns-topic-console)。有关更多信息，请参阅 [Amazon SNS 入门](https://docs.aws.amazon.com/sns/latest/dg/sns-getting-started.html)。

或者，如果您计划使用 AWS 管理控制台来创建 CloudWatch 警报，则可跳过此过程，因为您可在创建警报时创建主题。

 创建 CloudWatch 警报时，您可以为任何警报目标状态添加操作。为您想要收到通知的状态添加 Amazon SNS 通知，然后选择您在上一步中创建的 Amazon SNS 主题，从而在警报进入选定状态时发送电子邮件通知。

**注意**  
在创建 Amazon SNS 主题时，您可以选择将其设为*标准主题*或 *FIFO 主题*。CloudWatch 定会将所有告警通知发布到这两种类型的主题。但是，即使您使用 FIFO 主题，在极少数情况下，CloudWatch 也会不按顺序将通知发送到该主题。如果您使用 FIFO 主题，告警会将告警通知的消息组 ID 设置为告警的 ARN 的哈希值。

**Topics**
+ [防止混淆代理安全问题](#SNS_Confused_Deputy)
+ [使用 AWS 管理控制台 设置 Amazon SNS 主题](#set-up-sns-topic-console)
+ [使用 AWS CLI 设置 SNS 主题](#set-up-sns-topic-cli)

### 防止混淆代理安全问题
<a name="SNS_Confused_Deputy"></a>

混淆代理问题是一个安全性问题，即不具有某操作执行权限的实体可能会迫使具有更高权限的实体执行该操作。在 AWS 中，跨服务模拟可能会导致混淆代理问题。一个服务（*呼叫服务*）调用另一项服务（*所谓的服务*）时，可能会发生跨服务模拟。可以操纵调用服务，使用其权限以在其他情况下该服务不应有访问权限的方式对另一个客户的资源进行操作。为防止这种情况，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)、[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceorgid](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceorgid) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceorgpaths](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceorgpaths) 全局条件上下文键，以限制 Amazon SNS 为其他服务提供的资源访问权限。使用 `aws:SourceArn` 来仅将一个资源与跨服务访问相关联。使用 `aws:SourceAccount` 来让该账户中的任何资源与跨服务使用相关联。使用 `aws:SourceOrgID` 来允许某组织内的任何账户中的任何资源与跨服务使用相关联。使用 `aws:SourceOrgPaths` 来将 AWS Organizations 路径内账户中的任何资源与跨服务使用相关联。有关使用和了解路径的更多信息，请参阅《IAM 用户指南》中的 [aws:SourceOrgPaths](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceorgpaths)。

防范混淆代理问题最有效的方法是使用 `aws:SourceArn` 全局条件上下文键和资源的完整 ARN。如果不知道资源的完整 ARN，或者正在指定多个资源，请针对 ARN 未知部分使用带有通配符字符（`*`）的 `aws:SourceArn` 全局上下文条件键。例如 `arn:aws:servicename:*:123456789012:*`。

如果 `aws:SourceArn` 值不包含账户 ID，例如 Amazon S3 桶 ARN，您必须使用 `aws:SourceAccount` 和 `aws:SourceArn` 来限制权限。

要防范大规模混淆代理问题，请在基于资源的策略中将 `aws:SourceOrgID` 或 `aws:SourceOrgPaths` 全局条件上下文键与资源的组织 ID 或组织路径一起使用。包含 `aws:SourceOrgID` 或 `aws:SourceOrgPaths` 键的策略将自动包含正确的账户，并且当您在组织中添加、删除或移动账户时，无需手动更新策略。

`aws:SourceArn` 的值必须是发送通知的警报的 ARN。

以下示例演示如何在 CloudWatch 中使用 `aws:SourceArn` 和 `aws:SourceAccount` 全局条件上下文键来防范混淆代理问题。

```
{
    "Statement": [{
        "Effect": "Allow",
        "Principal": {
            "Service": "cloudwatch.amazonaws.com"
        },
        "Action": "SNS:Publish",
        "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic",
        "Condition": {
            "ArnLike": {
                "aws:SourceArn": "arn:aws:cloudwatch:us-east-2:111122223333:alarm:*"
            },
            "StringEquals": {
                "aws:SourceAccount": "111122223333"
            }
        }
    }]
}
```

如果警报 ARN 包含任何非 ASCII 字符，请仅使用 `aws:SourceAccount` 全局条件键限制权限。

### 使用 AWS 管理控制台 设置 Amazon SNS 主题
<a name="set-up-sns-topic-console"></a>

首先，创建一个主题，然后订阅此主题。您可以选择将测试消息发布到此主题。

**创建 SNS 主题**

1. 通过 [https://console.aws.amazon.com/sns/v3/home](https://console.aws.amazon.com/sns/v3/home) 打开 Amazon SNS 控制台。

1. 在 Amazon SNS 控制面板上的 **Common actions（常用操作）**下，选择 **Create Topic（创建主题）**。

1. 在 **Create new topic（创建新主题）**对话框中，为 **Topic name（主题名称）**输入主题的名称（例如 **my-topic**）。

1. 选择 **Create topic（创建主题）**。

1. 复制下一个任务的 **Topic ARN（主题 ARN）**（例如 arn:aws:sns:us-east-1:111122223333:my-topic）。

**订阅 SNS 主题**

1. 通过 [https://console.aws.amazon.com/sns/v3/home](https://console.aws.amazon.com/sns/v3/home) 打开 Amazon SNS 控制台。

1. 在导航窗格中，依次选择 **Subscriptions（订阅）**、**Create subscription（创建订阅）**。

1. 在 **Create subscription（创建订阅）**对话框中，为 **Topic ARN（主题 ARN）**粘贴在上一任务中创建的主题 ARN。

1. 对于**协议**，选择**电子邮件**。

1. 对于 **Endpoint（端点）**，输入一个可用于接收通知的电子邮件地址，然后选择 **Create subscription（创建订阅）**。

1. 从您的电子邮件应用程序中，打开来自 AWS 通知的消息并确认您的订阅。

   您的 Web 浏览器将显示来自 Amazon SNS 的确认响应。

**向 SNS 主题发布测试消息**

1. 通过 [https://console.aws.amazon.com/sns/v3/home](https://console.aws.amazon.com/sns/v3/home) 打开 Amazon SNS 控制台。

1. 在导航窗格中，选择 **Topics（主题）**。

1. 在 **Topics（主题）**页面上，选择一个主题，然后选择 **Publish to topic（发布到主题）**。

1. 在 **Publish（发布消息）**页面中，为 **Subject（主题）**输入消息的主题行，并为 **Message（消息）**输入简短的消息。

1. 选择 **Publish Message（发布消息）**。

1. 查看电子邮件，确认您已收到消息。

### 使用 AWS CLI 设置 SNS 主题
<a name="set-up-sns-topic-cli"></a>

首先，您创建一个 SNS 主题，然后将一条消息直接发布到该主题，以测试您是否正确配置了该主题。

**设置 SNS 主题**

1. 使用 [create-topic](https://docs.aws.amazon.com/cli/latest/reference/sns/create-topic.html) 命令创建主题，如下所示。

   ```
   1. aws sns create-topic --name my-topic
   ```

   Amazon SNS 返回具有以下格式的主题 ARN：

   ```
   1. {
   2.     "TopicArn": "arn:aws:sns:us-east-1:111122223333:my-topic"
   3. }
   ```

1. 使用 [subscribe](https://docs.aws.amazon.com/cli/latest/reference/sns/subscribe.html) 命令以通过您的电子邮件地址订阅该主题。如果订阅请求成功，您将收到一封确认电子邮件。

   ```
   1. aws sns subscribe --topic-arn arn:aws:sns:us-east-1:111122223333:my-topic --protocol email --notification-endpoint my-email-address
   ```

   Amazon SNS 将返回以下内容：

   ```
   1. {
   2.     "SubscriptionArn": "pending confirmation"
   3. }
   ```

1. 从您的电子邮件应用程序中，打开来自 AWS 通知的消息并确认您的订阅。

   您的 Web 浏览器将显示来自 Amazon Simple Notification Service 的确认响应。

1. 使用 [list-subscriptions-by-topic](https://docs.aws.amazon.com/cli/latest/reference/sns/list-subscriptions-by-topic.html) 命令检查订阅。

   ```
   1. aws sns list-subscriptions-by-topic --topic-arn arn:aws:sns:us-east-1:111122223333:my-topic
   ```

   Amazon SNS 将返回以下内容：

   ```
    1. {
    2.   "Subscriptions": [
    3.     {
    4.         "Owner": "111122223333",
    5.         "Endpoint": "me@mycompany.com",
    6.         "Protocol": "email",
    7.         "TopicArn": "arn:aws:sns:us-east-1:111122223333:my-topic",
    8.         "SubscriptionArn": "arn:aws:sns:us-east-1:111122223333:my-topic:64886986-bf10-48fb-a2f1-dab033aa67a3"
    9.     }
   10.   ]
   11. }
   ```

1. （可选）使用 [publish](https://docs.aws.amazon.com/cli/latest/reference/sns/publish.html) 命令向主题发布测试消息。

   ```
   1. aws sns publish --message "Verification" --topic arn:aws:sns:us-east-1:111122223333:my-topic
   ```

   Amazon SNS 将返回以下内容。

   ```
   1. {
   2.     "MessageId": "42f189a0-3094-5cf6-8fd7-c2dde61a4d7d"
   3. }
   ```

1. 查看电子邮件，确认您已收到消息。

## 警报状态更改时的 Amazon SNS 通知架构
<a name="alarm-sns-schema"></a>

本节列举了警报状态更改时向 Amazon SNS 主题发送的通知的架构。

**指标警报状态更改时的架构**

```
{
  "AlarmName": "string",
  "AlarmDescription": "string",
  "AWSAccountId": "string",
  "AlarmConfigurationUpdatedTimestamp": "string",
  "NewStateValue": "string",
  "NewStateReason": "string",
  "StateChangeTime": "string",
  "Region": "string",
  "AlarmArn": "string",
  "OldStateValue": "string",
  "OKActions": ["string"],
  "AlarmActions": ["string"],
  "InsufficientDataActions": ["string"],
  "Trigger": {
    "MetricName": "string",
    "Namespace": "string",
    "StatisticType": "string",
    "Statistic": "string",
    "Unit": "string or null",
    "Dimensions": [
      {
        "value": "string",
        "name": "string"
      }
    ],
    "Period": "integer",
    "EvaluationPeriods": "integer",
    "DatapointsToAlarm": "integer",
    "ComparisonOperator": "string",
    "Threshold": "number",
    "TreatMissingData": "string",
    "EvaluateLowSampleCountPercentile": "string or null"
  }
}
```

**复合指标警报状态更改时的架构**

```
{
  "AlarmName": "string",
  "AlarmDescription": "string",
  "AWSAccountId": "string",
  "NewStateValue": "string",
  "NewStateReason": "string",
  "StateChangeTime": "string",
  "Region": "string",
  "AlarmArn": "string",
  "OKActions": [String],
  "AlarmActions": [String],
  "InsufficientDataActions": [String],
  "OldStateValue": "string",
  "AlarmRule": "string",
  "TriggeringChildren": [String]
}
```

# 从警报中调用 Lambda 函数
<a name="alarms-and-actions-Lambda"></a>

CloudWatch 警报可保证在给定状态变化时异步调用 Lambda 函数，但以下情况除外：
+ 当该函数不存在时。
+ 当 CloudWatch 未被授权调用该 Lambda 函数时。

如果 CloudWatch 无法访问 Lambda 服务或消息因其他原因被拒绝，CloudWatch 会不断重试，直到调用成功。Lambda 将消息加入队列并处理执行重试。有关这种执行模式的更多信息，包括有关 Lambda 如何处理错误的信息，请参阅《AWS Lambda 开发人员指南》中的 [Asynchronous invocation](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html)。

可以调用同一账户中的 Lambda 函数，也可以调用其他 AWS 账户中的 Lambda 函数。

当您指定一个警报以调用 Lambda 函数作为警报操作时，您可以选择指定函数名称、函数别名或函数的特定版本。

当您将一个 Lambda 函数指定为警报操作时，必须为该函数创建一个资源策略，以允许 CloudWatch 服务主体调用该函数。

一种方法是使用 AWS CLI，如下例所示：

```
aws lambda add-permission \
--function-name my-function-name \
--statement-id AlarmAction \
--action 'lambda:InvokeFunction' \
--principal lambda.alarms.cloudwatch.amazonaws.com \
--source-account 111122223333 \
--source-arn arn:aws:cloudwatch:us-east-1:111122223333:alarm:alarm-name
```

或者，您可以创建一个类似于以下示例之一的策略，然后将其分配给该函数。

以下示例指定警报所在的账户，因此只有该账户（111122223333）中的警报才能调用该函数。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "default",
    "Statement": [{
        "Sid": "AlarmAction",
        "Effect": "Allow",
        "Principal": {
            "Service": "lambda.alarms.cloudwatch.amazonaws.com"
        },
        "Action": "lambda:InvokeFunction",
        "Resource": "arn:aws:lambda:us-east-1:444455556666:function:function-name",
        "Condition": {
            "StringEquals": {
                "AWS:SourceAccount": "111122223333"
            }
        }
    }]
}
```

------

以下示例的范围较窄，仅允许指定账户中的指定警报调用该函数。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "default",
  "Statement": [
    {
      "Sid": "AlarmAction",
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.alarms.cloudwatch.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:us-east-1:444455556666:function:function-name",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "111122223333",
          "AWS:SourceArn": "arn:aws:cloudwatch:us-east-1:111122223333:alarm:alarm-name"
        }
      }
    }]
}
```

------

我们不建议创建未指定来源账户的策略，因为此类策略容易受到混淆代理问题的影响。

## 将 Lambda 指标添加到 CloudWatch 调查中
<a name="Lambda-metrics-investigation"></a>

您可以将 Lambda 指标添加到处于活动状态的 CloudWatch 调查中。在调查问题时，Lambda 指标可以提供有关函数性能和行为的宝贵洞察。例如，如果您正在调查应用程序性能问题，则持续时间、错误率或节流等 Lambda 指标可能有助于确定根本原因。

要将 Lambda 指标添加到 CloudWatch 调查中，请执行以下操作：

1. 通过 [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) 打开 AWS Lambda 控制台。

1. 在**监控**部分中，找到该指标。

1. 打开指标的上下文菜单，依次选择**调查**、**添加到调查中**。然后，在**调查**窗格中，选择调查名称。

## 从 CloudWatch 发送到 Lambda 的事件对象
<a name="Lambda-action-payload"></a>

当您将一个 Lambda 函数配置为警报操作时，CloudWatch 会在调用 Lambda 函数时向该函数传送一个 JSON 有效负载。此 JSON 有效负载用作函数的事件对象。您可以从此 JSON 对象中提取数据并将其用于您的函数。以下是指标警报中事件对象的示例。

```
{
  'source': 'aws.cloudwatch',
  'alarmArn': 'arn:aws:cloudwatch:us-east-1:444455556666:alarm:lambda-demo-metric-alarm',
  'accountId': '444455556666',
  'time': '2023-08-04T12:36:15.490+0000',
  'region': 'us-east-1',
  'alarmData': {
    'alarmName': 'lambda-demo-metric-alarm',
    'state': {
      'value': 'ALARM',
      'reason': 'test',
      'timestamp': '2023-08-04T12:36:15.490+0000'
    },
    'previousState': {
      'value': 'INSUFFICIENT_DATA',
      'reason': 'Insufficient Data: 5 datapoints were unknown.',
      'reasonData': '{"version":"1.0","queryDate":"2023-08-04T12:31:29.591+0000","statistic":"Average","period":60,"recentDatapoints":[],"threshold":5.0,"evaluatedDatapoints":[{"timestamp":"2023-08-04T12:30:00.000+0000"},{"timestamp":"2023-08-04T12:29:00.000+0000"},{"timestamp":"2023-08-04T12:28:00.000+0000"},{"timestamp":"2023-08-04T12:27:00.000+0000"},{"timestamp":"2023-08-04T12:26:00.000+0000"}]}',
      'timestamp': '2023-08-04T12:31:29.595+0000'
    },
    'configuration': {
      'description': 'Metric Alarm to test Lambda actions',
      'metrics': [
        {
          'id': '1234e046-06f0-a3da-9534-EXAMPLEe4c',
          'metricStat': {
            'metric': {
              'namespace': 'AWS/Logs',
              'name': 'CallCount',
              'dimensions': {
                'InstanceId': 'i-12345678'
              }
            },
            'period': 60,
            'stat': 'Average',
            'unit': 'Percent'
          },
          'returnData': True
        }
      ]
    }
  }
}
```

以下是复合警报中事件对象的示例。

```
{
  'source': 'aws.cloudwatch',
  'alarmArn': 'arn:aws:cloudwatch:us-east-1:111122223333:alarm:SuppressionDemo.Main',
  'accountId': '111122223333',
  'time': '2023-08-04T12:56:46.138+0000',
  'region': 'us-east-1',
  'alarmData': {
    'alarmName': 'CompositeDemo.Main',
    'state': {
      'value': 'ALARM',
      'reason': 'arn:aws:cloudwatch:us-east-1:111122223333:alarm:CompositeDemo.FirstChild transitioned to ALARM at Friday 04 August, 2023 12:54:46 UTC',
      'reasonData': '{"triggeringAlarms":[{"arn":"arn:aws:cloudwatch:us-east-1:111122223333:alarm:CompositeDemo.FirstChild","state":{"value":"ALARM","timestamp":"2023-08-04T12:54:46.138+0000"}}]}',
      'timestamp': '2023-08-04T12:56:46.138+0000'
    },
    'previousState': {
      'value': 'ALARM',
      'reason': 'arn:aws:cloudwatch:us-east-1:111122223333:alarm:CompositeDemo.FirstChild transitioned to ALARM at Friday 04 August, 2023 12:54:46 UTC',
      'reasonData': '{"triggeringAlarms":[{"arn":"arn:aws:cloudwatch:us-east-1:111122223333:alarm:CompositeDemo.FirstChild","state":{"value":"ALARM","timestamp":"2023-08-04T12:54:46.138+0000"}}]}',
      'timestamp': '2023-08-04T12:54:46.138+0000',
      'actionsSuppressedBy': 'WaitPeriod',
      'actionsSuppressedReason': 'Actions suppressed by WaitPeriod'
    },
    'configuration': {
      'alarmRule': 'ALARM(CompositeDemo.FirstChild) OR ALARM(CompositeDemo.SecondChild)',
      'actionsSuppressor': 'CompositeDemo.ActionsSuppressor',
      'actionsSuppressorWaitPeriod': 120,
      'actionsSuppressorExtensionPeriod': 180
    }
  }
}
```

# 从警报启动 CloudWatch 调查
<a name="Start-Investigation-Alarm"></a>

可以从警报，或从 CloudWatch 警报历史记录的过去两周内的任何时间点启动调查。

有关 CloudWatch 调查的更多信息，请参阅 [CloudWatch 调查](Investigations.md)。

## 先决条件
<a name="w2aac19c25b7c17b7"></a>

从 CloudWatch 警报启动 CloudWatch 调查之前，必须为函数创建资源策略，以允许 CloudWatch 服务主体启动调查。要使用 AWS CLI 执行此操作，请使用类似于以下示例的命令：

```
aws aiops put-investigation-group-policy \
    --identifier arn:aws:aiops:us-east-1:111122223333:investigation-group/investigation_group_id \
    --policy "{\"Version\":\"2008-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"aiops.alarms.cloudwatch.amazonaws.com\"},\"Action\":[\"aiops:CreateInvestigation\",\"aiops:CreateInvestigationEvent\"],\"Resource\":\"*\",\"Condition\":{\"StringEquals\":{\"aws:SourceAccount\":\"111122223333\"},\"ArnLike\":{\"aws:SourceArn\":\"arn:aws:cloudwatch:us-east-1:111122223333:alarm:*\"}}}]}" \
    --region eu-north-1
```

将示例值替换为您的 AWS 账户 ID、区域和调查组 ID。

**从 CloudWatch 警报启动调查**

1. 通过 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 打开 CloudWatch 控制台。

1. 在左侧导航窗格中，依次选择**警报**和**所有警报**。

1. 选择警报的名称。

1. 在警报历史记录中选择要调查的时间段。

1. 依次选择**调查**、**启动新的调查**。

1. 在**新调查标题**中，输入调查的名称。然后选择**开始调查**。

   CloudWatch 调查助手会启动并扫描您的遥测数据，查找可能与这种情况相关的数据。

1. 在 CloudWatch 控制台的导航窗格中，选择**调查**，然后选择您刚刚启动的调查名称。

   **调查发现**部分以自然语言显示警报状态及其触发原因的摘要。

1. （可选）在警报图表中，右键单击，然后选择深入查看警报或其监视的指标。

1. 在屏幕右侧，选择**建议**选项卡。

   随即显示 CloudWatch 调查发现的其他遥测数据清单，内含可能与调查有关的遥测数据。这些调查发现可能包括其他指标和 CloudWatch Logs Insights 查询结果。CloudWatch 调查根据警报运行了这些查询。
   + 对于每个调查发现，选择**添加到调查发现**或**放弃**。

     选择**添加到调查发现**后，遥测数据会添加到**调查发现**部分，CloudWatch 调查功能会使用此信息来指导其进一步的扫描和建议。
   + 对于 CloudWatch Logs Insights 查询结果，要更改或编辑查询并重新运行，请打开结果的上下文（右键单击）菜单，然后选择**在 Logs Insights 中打开**。有关更多信息，请参阅[使用 CloudWatch Logs Insights 分析日志数据](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html)。

     要运行不同的查询，进入 Logs Insights 页面时，选择使用查询助手，就能够使用自然语言来形成查询。有关更多信息，请参阅[使用自然语言生成和更新 CloudWatch Logs Insights 查询](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatchLogs-Insights-Query-Assist.html)。
   + （可选）如果您知道另一项 AWS 服务中的遥测数据可能适用于此调查，请转到该服务的控制台，将该遥测数据添加到此调查中。

1. CloudWatch 调查还可能将假设添加到**建议**选项卡的列表中。这些假设由调查得出，以自然语言显示。

   对于每个假设，选择**添加到调查发现**或**放弃**。

1. 您认为已经完成调查并找到了问题的根本原因时，请选择**概述**选项卡，然后选择**调查摘要**。然后，CloudWatch 调查会以自然语言汇总由调查得出的重要调查发现和假设。

# 停止、终止、重启或恢复 EC2 实例
<a name="UsingAlarmActions"></a>

利用 Amazon CloudWatch 告警操作，您可创建自动停止、终止、重启或恢复 EC2 实例的告警。当不再需要某个实例运行时，您可使用停止或终止操作来帮助您节省资金。如果发生了系统损害，您可使用重启和恢复操作自动重启这些实例或将它们恢复到新硬件上。

在许多情况下，您可能需要自动终止或停止实例。例如，您可能拥有专用于批工资单处理作业或科学计算任务的实例，这些实例在运行一段时间后就完成了其工作。与其让这些实例空闲（并产生费用），不如将其停止或终止以帮助节省开支。使用停止警报操作和终止警报操作的主要区别是，停止的警报可以在以后需要运行时轻松重启。您还可以保留相同的实例 ID 和根卷。而终止的实例则无法重新启动。如此就必须启动一个新的实例。

您可以向为 Amazon EC2 每个实例指标设置的任何告警添加停止、终止或重启操作，这些指标包括 Amazon CloudWatch 提供的基本和详细监控指标（在亚马逊云科技/EC2 命名空间中），以及包含“InstanceId=”维度的任何自定义指标，只要 InstanceId 值引用有效运行的 Amazon EC2 实例。您还可以将恢复操作添加到针对任何 Amazon EC2 每个实例指标设置的告警中，但以下情况除外：`StatusCheckFailed_Instance`。

**重要**  
如果缺失指标数据点，则在 Amazon EC2 指标上配置的警报可能会暂时进入 INSUFFICIENT\$1DATA 状态。这种情况很少见，但在指标报告中断时可能会发生，即使在 Amazon EC2 实例运行正常的情况下也是如此。对于配置为采取停止、终止、重启或恢复操作的 Amazon EC2 指标的警报，我们建议您将这些警报配置为将缺失的数据视为 `missing`，并使这些警报仅在处于 ALARM 状态时被触发。  
有关如何配置 CloudWatch 对已设置警报的缺失指标执行操作的更多信息，请参阅 [配置 CloudWatch 告警处理缺失数据的方式](alarms-and-missing-data.md)。

要设置可重启、停止或终止实例的 CloudWatch 告警操作，您必须使用服务相关的 IAM 角色 *AWSServiceRoleForCloudWatchEvents*。AWSServiceRoleForCloudWatchEvents IAM 角色允许 AWS 代表您执行告警操作。

要为 CloudWatch Events 创建服务相关角色，请使用以下命令：

```
aws iam create-service-linked-role --aws-service-name events.amazonaws.com
```

**控制台支持**  
您可使用 CloudWatch 控制台或 Amazon EC2 控制台创建告警。本文档中的程序使用 CloudWatch 控制台。有关使用 Amazon EC2 控制台的过程，请参阅《*Amazon EC2 用户指南*》中的[创建停止、终止、重启或恢复实例的警报](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UsingAlarmActions.html)。

**权限**  
如果您使用 AWS Identity and Access Management (IAM) 账户来创建或修改执行 EC2 操作或 Systems Manager OpsItem 操作的告警，您必须拥有 `iam:CreateServiceLinkedRole` 权限。

**Topics**
+ [在 Amazon CloudWatch 告警中添加停止操作](#AddingStopActions)
+ [在 Amazon CloudWatch 告警中添加终止操作](#AddingTerminateActions)
+ [在 Amazon CloudWatch 告警中添加重启操作](#AddingRebootActions)
+ [在 Amazon CloudWatch 告警中添加恢复操作](#AddingRecoverActions)
+ [查看已触发的告警和操作的历史记录](#ViewAlarmHistory)

## 在 Amazon CloudWatch 告警中添加停止操作
<a name="AddingStopActions"></a>

可以创建当达到一定阈值后停止 Amazon EC2 实例的警报。例如，您可能运行了开发或测试实例而偶尔忘记将其关闭。可以创建当平均 CPU 使用率低于 10% 达 24 小时时触发的警报，同时告知其为空闲并不再使用。可以根据需要调整阈值、时长和时间段，还可以添加 SNS 通知，以便您在触发警报后能够收到电子邮件。

可以停止或终止将 Amazon Elastic Block Store 卷用作根设备的 Amazon EC2 实例，但只能终止将实例存储用作根设备的实例。

**使用 Amazon CloudWatch 控制台创建停止空闲实例的告警**

1. 访问 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)，打开 CloudWatch 控制台。

1. 在导航窗格中，依次选择 **Alarms（警报）**和 **All alarms（所有警报）**。

1. 选择**创建警报**。

1. 选择 **Select Metric（选择指标）**。

1. 对于 **AWS 命名空间**，请选择 **EC2**。

1. 执行以下操作：

   1. 选择 **Per-Instance Metrics**（每个实例的指标）。

   1. 选择包含正确实例和 **CPUUtilization** 指标的行中的复选框。

   1. 选择**绘成图表的指标**选项卡。

   1. 对于统计数据，选择 **Average（平均值）**。

   1. 选择时间段（例如 **1 Hour**）。

   1. 选择**选择指标**。

1. 在 **Conditions**（条件）下，执行以下操作：

   1. 选择 **Static**（静态）。

   1. 在 **Whenever CPUUtilization is**（每当 CPUUtilization）下，选择 **Lower**（降低）。

   1. 对于 **than**（比较），键入 **10**。

   1. 选择**下一步**。

   1. 在 **Notification** 下，为 **Send notification to** 选择一个现有 SNS 主题或创建一个新 SNS 主题。

      要创建 SNS 主题，请选择 **New list（新列表）**。对于**发送通知到**，键入 SNS 主题的名称（例如“Stop\$1EC2\$1Instance”）。对于 **Email list (电子邮件列表)**，请键入警报变为 `ALARM` 状态时将通知发送到的电子邮件地址列表（以逗号分隔）。将向每个电子邮件地址发送一封主题订阅确认电子邮件。您必须先确认订阅，然后才能将通知发送到电子邮件地址。

   1. 选择 **Add EC2 Action**（添加 EC2 操作）。

   1. 对于 **Alarm state trigger**（告警状态触发器），选择 **In alarm**（在告警中）。对于 **Take the following action**（请执行以下操作），选择 **Stop this instance**（停止此实例）。

   1. 选择**下一步**。

   1. 输入警报的名称和说明。名称只能包含 ASCII 字符。然后选择**下一步**。

   1. 在 **Preview and create** 下面，确认具有所需的信息和条件，然后选择 **Create alarm**。

## 在 Amazon CloudWatch 告警中添加终止操作
<a name="AddingTerminateActions"></a>

可以创建当达到一定阈值时自动终止 EC2 实例的警报 (只要该实例未启用终止保护)。例如，某个实例已经完成工作，您不再需要此实例而希望将其终止。如果可能在之后使用该实例，则应该选择停止而不是终止。有关为实例启用和禁用终止保护的信息，请参阅《Amazon EC2 用户指南》**中的[为实例启用终止保护](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_ChangingDisableAPITermination.html)。

**使用 Amazon CloudWatch 控制台创建终止空闲实例的告警**

1. 通过以下网址打开 CloudWatch 控制台：[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在导航窗格中，依次选择 **Alarms** 和 **Create Alarm**。

1. 对于 **Select Metric** 步骤，执行以下操作：

   1. 在 **EC2 Metrics** 下，选择 **Per-Instance Metrics**。

   1. 选择包含实例和 **CPUUtilization** 指标的行。

   1. 对于统计数据，选择 **Average（平均值）**。

   1. 选择时间段（例如 **1 Hour**）。

   1. 选择**下一步**。

1. 对于 **Define Alarm** 步骤，执行以下操作：

   1. 在 **Alarm Threshold** 下，键入警报的唯一名称 (例如“Terminate EC2 instance”) 和警报的描述 (例如“Terminate EC2 instance when CPU is idle for too long”)。警报名称必须仅包含 ASCII 字符。

   1. 在**每当**下，为 **是**选择 **<** 并键入 **10**。对于**对于**，键入 **24** 作为连续时段数。

      **Alarm Preview（告警预览）**下会显示阈值的图形表示。

   1. 在 **Notification** 下，为 **Send notification to** 选择一个现有 SNS 主题或创建一个新 SNS 主题。

      要创建 SNS 主题，请选择 **New list（新列表）**。对于**发送通知到**，键入 SNS 主题的名称（例如“Terminate\$1EC2\$1Instance”）。对于 **Email list (电子邮件列表)**，请键入警报变为 `ALARM` 状态时将通知发送到的电子邮件地址列表（以逗号分隔）。将向每个电子邮件地址发送一封主题订阅确认电子邮件。您必须先确认订阅，然后才能将通知发送到电子邮件地址。

   1. 选择 **EC2 Action**。

   1. 对于**每当此警报**，请选择**状态为“警报”**。对于 **Take this action**，选择 **Terminate this instance**。

   1. 选择**创建警报**。

## 在 Amazon CloudWatch 告警中添加重启操作
<a name="AddingRebootActions"></a>

您可创建监控 Amazon EC2 实例并自动重启此实例的 Amazon CloudWatch 警报。在实例运行状况检查失败时，推荐重启警报操作（与恢复警报操作相反，该操作适合系统运行状况检查失败的情况）。实例重启相当于操作系统重启。在许多情况下，只需要几分钟时间即可重启您的实例。重启实例时，其仍驻留在相同的物理主机上，因此您的实例将保留其公有 DNS 名称、私有 IP 地址及其实例存储卷上的任何数据。

重启实例不会启动新的实例计费时间，这与停止并重新启动您的实例不同。有关重新启动实例的更多信息，请参阅《Amazon EC2 用户指南》**中的[重启实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-reboot.html)。

**重要**  
为了避免重启操作与恢复操作之间的竞争情况，请避免为重启警报和恢复警报设置相同的评估期。我们建议您将重启警报设置为 3 个 1 分钟的评估期。

**使用 Amazon CloudWatch 控制台创建重启实例的告警**

1. 通过以下网址打开 CloudWatch 控制台：[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在导航窗格中，依次选择 **Alarms** 和 **Create Alarm**。

1. 对于 **Select Metric** 步骤，执行以下操作：

   1. 在 **EC2 Metrics** 下，选择 **Per-Instance Metrics**。

   1. 选择包含实例和 **StatusCheckFailed\$1Instance** 指标的行。

   1. 对于统计数据，选择 **Minimum**。

   1. 选择时间段（例如 **1 Minute**）。

   1. 选择**下一步**。

1. 对于 **Define Alarm** 步骤，执行以下操作：

   1. 在 **Alarm Threshold** 下，键入警报的唯一名称 (例如“Reboot EC2 instance”) 和警报的描述 (例如“Reboot EC2 instance when health checks fail”)。警报名称必须仅包含 ASCII 字符。

   1. 在**每当**下，为**是**选择 **>** 并键入 **0**。对于**对于**，键入 **3** 作为连续时段数。

      **Alarm Preview（告警预览）**下会显示阈值的图形表示。

   1. 在 **Notification** 下，为 **Send notification to** 选择一个现有 SNS 主题或创建一个新 SNS 主题。

      要创建 SNS 主题，请选择 **New list（新列表）**。对于**发送通知到**，键入 SNS 主题的名称（例如“Reboot\$1EC2\$1Instance”）。对于 **Email list (电子邮件列表)**，请键入警报变为 `ALARM` 状态时将通知发送到的电子邮件地址列表（以逗号分隔）。将向每个电子邮件地址发送一封主题订阅确认电子邮件。您必须先确认订阅，然后才能将通知发送到电子邮件地址。

   1. 选择 **EC2 Action**。

   1. 对于**每当此警报**，请选择**状态为“警报”**。对于 **Take this action**，选择 **Reboot this instance**。

   1. 选择**创建警报**。

## 在 Amazon CloudWatch 告警中添加恢复操作
<a name="AddingRecoverActions"></a>

您可以创建 Amazon CloudWatch 警报用于监控 Amazon EC2 实例，并且在实例受损（由于发生底层硬件故障或需要 AWS 参与才能修复的问题）时自动恢复实例。无法恢复终止的实例。恢复的实例与原始实例相同，包括实例 ID、私有 IP 地址、弹性 IP 地址以及所有实例元数据。

当 `StatusCheckFailed_System` 告警触发且恢复操作启动时，您在创建告警及相关恢复操作时所选择的 Amazon SNS 主题将向您发出通知。在实例恢复过程中，实例将在重启时迁移，并且内存中的所有数据都将丢失。当该过程完成后，会向您已配置警报的 SNS 主题发布信息。任何订阅此 SNS 主题的用户都将收到一封电子邮件通知，其中包括恢复尝试的状态以及任何进一步的指示。您会注意到，实例在已恢复的实例上重启。

恢复操作仅适用于 `StatusCheckFailed_System`，而不能用于 `StatusCheckFailed_Instance`。

导致系统状态检查出现故障的问题示例包括：
+ 网络连接丢失
+ 系统电源损耗
+ 物理主机上的软件问题
+ 物理主机上影响到网络连接状态的硬件问题

只有某些实例类型支持恢复操作。有关支持的实例类型和其他要求的更多信息，请参阅[恢复实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html)和[要求](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html#requirements-for-recovery)。

**重要**  
为了避免重启操作与恢复操作之间的竞争情况，请避免为重启警报和恢复警报设置相同的评估期。我们建议您将恢复警报设置为 2 个 1 分钟的评估期，并将重启警报设置为 3 个 1 分钟的评估期。

**使用 Amazon CloudWatch 控制台创建恢复实例的告警**

1. 访问 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)，打开 CloudWatch 控制台。

1. 在导航窗格中，依次选择 **Alarms（警报）**和 **All alarms（所有警报）**。

1. 选择**创建警报**。

1. 选择**选择指标**并执行以下操作：

   1. 选择**EC2 指标**、**每个实例的指标**。

   1. 选择包含实例和 **StatusCheckFailed\$1System** 指标的行，然后选择**选择指标**。

   1. 对于统计数据，选择 **Minimum**。

   1. 选择时间段（例如 **1 Minute**）。
**重要**  
为了避免重启操作与恢复操作之间的竞争情况，请避免为重启警报和恢复警报设置相同的评估期。我们建议您将恢复警报设置为 2 个 1 分钟的评估期。

1. 对于**条件**，执行以下操作：

   1. 在**阈值类型**下，选择**静态**。

   1. 在**每当**下，选择**大于**，然后对于**比...** 输入 **0**。

   1. 选择**其他配置**，然后在**待警报的数据点**中指定 2 个（**共** 2 个）。

1. 选择**下一步**。

1. 在**通知**下，执行以下操作：

   1. 对于 **Alarm state trigger**（告警状态触发器），选择 **In alarm**（在告警中）。

   1. 对于**发送通知到如下 SNS 主题**，选择一个现有 SNS 主题或创建一个新 SNS 主题。

   1. 选择 **Add EC2 Action**（添加 EC2 操作）。

   1. 对于 **Alarm state trigger**（告警状态触发器），选择 **In alarm**（在告警中）。

   1. 对于**请执行以下操作**，选择**恢复此实例**。

   1. 选择**下一步**。

1. 对于**警报名称**，输入警报的唯一名称（例如，**Recover EC2 instance**）和警报描述（例如，**Recover EC2 instance when health checks fail**）。警报名称必须仅包含 ASCII 字符。

1. 选择**下一步**。

1. 选择**创建警报**。

## 查看已触发的告警和操作的历史记录
<a name="ViewAlarmHistory"></a>

您可以在 Amazon CloudWatch 控制台中查看警报和操作历史记录。Amazon CloudWatch 会保留最近 30 天的警报和操作历史记录。

**要查看已触发的警报和操作的历史记录**

1. 通过 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 打开 CloudWatch 控制台。

1. 在导航窗格中，选择 **Alarms (警报)**，然后选择一个警报。

1. 要查看最近的状态转换以及时间和指标值，请选择**详细信息**。

1. 要查看最近的历史记录条目，请选择 **History (历史记录)**。

# 告警事件和 EventBridge
<a name="cloudwatch-and-eventbridge"></a>

每当 CloudWatch 告警被创建、更新、删除或更改告警状态时，CloudWatch 都会将事件发送到 Amazon EventBridge。您可以使用 EventBridge 和这些事件来编写规则，这些规则会在告警更改状态时采取措施，例如通知您。有关更多信息，请参阅[什么是 Amazon EventBridge？](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html)

CloudWatch 保证向 EventBridge 传送告警状态更改事件。

## 告警状态更改事件
<a name="CloudWatch-state-change-events"></a>

本节旨在介绍告警状态发生变化时发送到 EventBridge 的示例事件。选择选项卡可查看不同类型的告警状态更改事件。

------
#### [ Single Metric Alarm ]

单个指标告警更改状态时生成的事件。这些事件包含带有告警评估结果的 `state` 和 `previousState` 字段。

```
{
    "version": "0",
    "id": "c4c1c1c9-6542-e61b-6ef0-8c4d36933a92",
    "detail-type": "CloudWatch Alarm State Change",
    "source": "aws.cloudwatch",
    "account": "123456789012",
    "time": "2019-10-02T17:04:40Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:cloudwatch:us-east-1:123456789012:alarm:ServerCpuTooHigh"
    ],
    "detail": {
        "alarmName": "ServerCpuTooHigh",
        "configuration": {
            "description": "Goes into alarm when server CPU utilization is too high!",
            "metrics": [
                {
                    "id": "30b6c6b2-a864-43a2-4877-c09a1afc3b87",
                    "metricStat": {
                        "metric": {
                            "dimensions": {
                                "InstanceId": "i-12345678901234567"
                            },
                            "name": "CPUUtilization",
                            "namespace": "AWS/EC2"
                        },
                        "period": 300,
                        "stat": "Average"
                    },
                    "returnData": true
                }
            ]
        },
        "previousState": {
            "reason": "Threshold Crossed: 1 out of the last 1 datapoints [0.0666851903306472 (01/10/19 13:46:00)] was not greater than the threshold (50.0) (minimum 1 datapoint for ALARM -> OK transition).",
            "reasonData": "{\"version\":\"1.0\",\"queryDate\":\"2019-10-01T13:56:40.985+0000\",\"startDate\":\"2019-10-01T13:46:00.000+0000\",\"statistic\":\"Average\",\"period\":300,\"recentDatapoints\":[0.0666851903306472],\"threshold\":50.0}",
            "timestamp": "2019-10-01T13:56:40.987+0000",
            "value": "OK"
        },
        "state": {
            "reason": "Threshold Crossed: 1 out of the last 1 datapoints [99.50160229693434 (02/10/19 16:59:00)] was greater than the threshold (50.0) (minimum 1 datapoint for OK -> ALARM transition).",
            "reasonData": "{\"version\":\"1.0\",\"queryDate\":\"2019-10-02T17:04:40.985+0000\",\"startDate\":\"2019-10-02T16:59:00.000+0000\",\"statistic\":\"Average\",\"period\":300,\"recentDatapoints\":[99.50160229693434],\"threshold\":50.0}",
            "timestamp": "2019-10-02T17:04:40.989+0000",
            "value": "ALARM"
        },
        "muteDetail": {
            "mutedByArn": "arn:aws:cloudwatch:us-east-1:1234567890:alarm-mute-rule:testMute",
            "muteWindowStart": "2026-01-01T10:00:00.000+0000",
            "muteWindowEnd": "2026-01-01T12:00:00.000+0000"
        }
    }
}
```

------
#### [ Metric Math Alarm ]

指标数学告警更改状态时生成的事件。这些事件包含 `configuration` 字段中的数学表达式详细信息。

```
{
    "version": "0",
    "id": "2dde0eb1-528b-d2d5-9ca6-6d590caf2329",
    "detail-type": "CloudWatch Alarm State Change",
    "source": "aws.cloudwatch",
    "account": "123456789012",
    "time": "2019-10-02T17:20:48Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:cloudwatch:us-east-1:123456789012:alarm:TotalNetworkTrafficTooHigh"
    ],
    "detail": {
        "alarmName": "TotalNetworkTrafficTooHigh",
        "configuration": {
            "description": "Goes into alarm if total network traffic exceeds 10Kb",
            "metrics": [
                {
                    "expression": "SUM(METRICS())",
                    "id": "e1",
                    "label": "Total Network Traffic",
                    "returnData": true
                },
                {
                    "id": "m1",
                    "metricStat": {
                        "metric": {
                            "dimensions": {
                                "InstanceId": "i-12345678901234567"
                            },
                            "name": "NetworkIn",
                            "namespace": "AWS/EC2"
                        },
                        "period": 300,
                        "stat": "Maximum"
                    },
                    "returnData": false
                },
                {
                    "id": "m2",
                    "metricStat": {
                        "metric": {
                            "dimensions": {
                                "InstanceId": "i-12345678901234567"
                            },
                            "name": "NetworkOut",
                            "namespace": "AWS/EC2"
                        },
                        "period": 300,
                        "stat": "Maximum"
                    },
                    "returnData": false
                }
            ]
        },
        "previousState": {
            "reason": "Unchecked: Initial alarm creation",
            "timestamp": "2019-10-02T17:20:03.642+0000",
            "value": "INSUFFICIENT_DATA"
        },
        "state": {
            "reason": "Threshold Crossed: 1 out of the last 1 datapoints [45628.0 (02/10/19 17:10:00)] was greater than the threshold (10000.0) (minimum 1 datapoint for OK -> ALARM transition).",
            "reasonData": "{\"version\":\"1.0\",\"queryDate\":\"2019-10-02T17:20:48.551+0000\",\"startDate\":\"2019-10-02T17:10:00.000+0000\",\"period\":300,\"recentDatapoints\":[45628.0],\"threshold\":10000.0}",
            "timestamp": "2019-10-02T17:20:48.554+0000",
            "value": "ALARM"
        },
        "muteDetail": {
            "mutedByArn": "arn:aws:cloudwatch:us-east-1:1234567890:alarm-mute-rule:testMute",
            "muteWindowStart": "2026-01-01T10:00:00.000+0000",
            "muteWindowEnd": "2026-01-01T12:00:00.000+0000"
        }
    }
}
```

------
#### [ Anomaly Detection Alarm ]

异常检测告警更改状态时生成的事件。这些事件包含 `reasonData` 字段的上限和下限阈值。

```
{
    "version": "0",
    "id": "daafc9f1-bddd-c6c9-83af-74971fcfc4ef",
    "detail-type": "CloudWatch Alarm State Change",
    "source": "aws.cloudwatch",
    "account": "123456789012",
    "time": "2019-10-03T16:00:04Z",
    "region": "us-east-1",
    "resources": ["arn:aws:cloudwatch:us-east-1:123456789012:alarm:EC2 CPU Utilization Anomaly"],
    "detail": {
        "alarmName": "EC2 CPU Utilization Anomaly",
        "state": {
            "value": "ALARM",
            "reason": "Thresholds Crossed: 1 out of the last 1 datapoints [0.0 (03/10/19 15:58:00)] was less than the lower thresholds [0.020599444741798756] or greater than the upper thresholds [0.3006915352732461] (minimum 1 datapoint for OK -> ALARM transition).",
            "reasonData": "{\"version\":\"1.0\",\"queryDate\":\"2019-10-03T16:00:04.650+0000\",\"startDate\":\"2019-10-03T15:58:00.000+0000\",\"period\":60,\"recentDatapoints\":[0.0],\"recentLowerThresholds\":[0.020599444741798756],\"recentUpperThresholds\":[0.3006915352732461]}",
            "timestamp": "2019-10-03T16:00:04.653+0000"
        },
        "previousState": {
            "value": "OK",
            "reason": "Thresholds Crossed: 1 out of the last 1 datapoints [0.166666666664241 (03/10/19 15:57:00)] was not less than the lower thresholds [0.0206719426210418] or not greater than the upper thresholds [0.30076870222143803] (minimum 1 datapoint for ALARM -> OK transition).",
            "reasonData": "{\"version\":\"1.0\",\"queryDate\":\"2019-10-03T15:59:04.670+0000\",\"startDate\":\"2019-10-03T15:57:00.000+0000\",\"period\":60,\"recentDatapoints\":[0.166666666664241],\"recentLowerThresholds\":[0.0206719426210418],\"recentUpperThresholds\":[0.30076870222143803]}",
            "timestamp": "2019-10-03T15:59:04.672+0000"
        },
        "muteDetail": {
            "mutedByArn": "arn:aws:cloudwatch:us-east-1:1234567890:alarm-mute-rule:testMute",
            "muteWindowStart": "2026-01-01T10:00:00.000+0000",
            "muteWindowEnd": "2026-01-01T12:00:00.000+0000"
        },
        "configuration": {
            "description": "Goes into alarm if CPU Utilization is out of band",
            "metrics": [{
                "id": "m1",
                "metricStat": {
                    "metric": {
                        "namespace": "AWS/EC2",
                        "name": "CPUUtilization",
                        "dimensions": {
                            "InstanceId": "i-12345678901234567"
                        }
                    },
                    "period": 60,
                    "stat": "Average"
                },
                "returnData": true
            }, {
                "id": "ad1",
                "expression": "ANOMALY_DETECTION_BAND(m1, 0.8)",
                "label": "CPUUtilization (expected)",
                "returnData": true
            }]
        }
    }
}
```

------
#### [ Composite Alarm ]

复合指标告警更改状态时生成的事件。这些事件包含 `actionsSuppressedBy` 和 `actionsSuppressedReason` 字段中的抑制信息。

```
{
    "version": "0",
    "id": "d3dfc86d-384d-24c8-0345-9f7986db0b80",
    "detail-type": "CloudWatch Alarm State Change",
    "source": "aws.cloudwatch",
    "account": "123456789012",
    "time": "2022-07-22T15:57:45Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:cloudwatch:us-east-1:123456789012:alarm:ServiceAggregatedAlarm"
    ],
    "detail": {
        "alarmName": "ServiceAggregatedAlarm",
        "state": {
            "actionsSuppressedBy": "WaitPeriod",
            "actionsSuppressedReason": "Actions suppressed by WaitPeriod",
            "value": "ALARM",
            "reason": "arn:aws:cloudwatch:us-east-1:123456789012:alarm:SuppressionDemo.EventBridge.FirstChild transitioned to ALARM at Friday 22 July, 2022 15:57:45 UTC",
            "reasonData": "{\"triggeringAlarms\":[{\"arn\":\"arn:aws:cloudwatch:us-east-1:123456789012:alarm:ServerCpuTooHigh\",\"state\":{\"value\":\"ALARM\",\"timestamp\":\"2022-07-22T15:57:45.394+0000\"}}]}",
            "timestamp": "2022-07-22T15:57:45.394+0000"
        },
        "previousState": {
            "value": "OK",
            "reason": "arn:aws:cloudwatch:us-east-1:123456789012:alarm:SuppressionDemo.EventBridge.Main was created and its alarm rule evaluates to OK",
            "reasonData": "{\"triggeringAlarms\":[{\"arn\":\"arn:aws:cloudwatch:us-east-1:123456789012:alarm:TotalNetworkTrafficTooHigh\",\"state\":{\"value\":\"OK\",\"timestamp\":\"2022-07-14T16:28:57.770+0000\"}},{\"arn\":\"arn:aws:cloudwatch:us-east-1:123456789012:alarm:ServerCpuTooHigh\",\"state\":{\"value\":\"OK\",\"timestamp\":\"2022-07-14T16:28:54.191+0000\"}}]}",
            "timestamp": "2022-07-22T15:56:14.552+0000"
        },
        "configuration": {
            "alarmRule": "ALARM(ServerCpuTooHigh) OR ALARM(TotalNetworkTrafficTooHigh)",
            "actionsSuppressor": "ServiceMaintenanceAlarm",
            "actionsSuppressorWaitPeriod": 120,
            "actionsSuppressorExtensionPeriod": 180
        },
        "muteDetail": {
            "mutedByArn": "arn:aws:cloudwatch:us-east-1:1234567890:alarm-mute-rule:testMute",
            "muteWindowStart": "2026-01-01T10:00:00.000+0000",
            "muteWindowEnd": "2026-01-01T12:00:00.000+0000"
        }
    }
}
```

------
#### [ Multi Time Series Alarm ]

 告警贡献者或告警更改状态时生成的事件。告警贡献者状态更改事件包含告警贡献者的 ID 和属性以及最近突破阈值的数据点。告警状态更改事件会提供有关导致告警状态发生变化的贡献者的数量及其状态原因的概要信息。

**告警贡献者示例**

```
{
  "version": "0",
  "id": "6d226bbc-07f0-9a31-3359-1736968f8ded",
  "detail-type": "CloudWatch Alarm Contributor State Change",
  "source": "aws.cloudwatch",
  "account": "123456789012",
  "time": "2025-12-01T13:42:04Z",
  "region": "us-east-1",
  "resources": [
    "arn:aws:cloudwatch:us-east-1:123456789012:alarm:DynamoDBInsightsAlarm"
  ],
  "detail": {
    "alarmName": "DynamoDBInsightsAlarm",
    "alarmContributor": {
      "id": "6d442278dba546f6",
      "attributes": {
        "TableName": "example-dynamodb-table-name"
      }
    },
    "state": {
      "value": "ALARM",
      "reason": "Threshold Crossed: 1 datapoint was less than the threshold (1.0). The most recent datapoint which crossed the threshold: [0.0 (01/12/25 13:34:00)].",
      "timestamp": "2025-12-01T13:42:04.919+0000"
    },
    "configuration": {
      "metrics": [
        {
          "id": "m1",
          "expression": "SELECT AVG(ConsumedWriteCapacityUnits) FROM \"AWS/DynamoDB\" GROUP BY TableName ORDER BY MAX() DESC",
          "returnData":true,
          "period": 60
        }
      ],
      "description": "Metrics Insights alarm for DynamoDB ConsumedWriteCapacity per TableName"
    },
    "muteDetail": {
        "mutedByArn": "arn:aws:cloudwatch:us-east-1:1234567890:alarm-mute-rule:testMute",
        "muteWindowStart": "2026-01-01T10:00:00.000+0000",
        "muteWindowEnd": "2026-01-01T12:00:00.000+0000"
    }
  }
}
```

**告警示例**

```
{
  "version": "0",
  "id": "80ddd249-dedf-7c4d-0708-0eb78132dd78",
  "detail-type": "CloudWatch Alarm State Change",
  "source": "aws.cloudwatch",
  "account": "123456789012",
  "time": "2025-12-01T13:42:04Z",
  "region": "us-east-1",
  "resources": [
    "arn:aws:cloudwatch:us-east-1:123456789012:alarm:DynamoDBInsightsAlarm"
  ],
  "detail": {
    "alarmName": "DynamoDBInsightsAlarm",
    "state": {
      "value": "ALARM",
      "reason": "6 out of 6 time series evaluated to ALARM",
      "timestamp": "2025-12-01T13:42:04.919+0000"
    },
    "previousState": {
      "value": "INSUFFICIENT_DATA",
      "reason": "Unchecked: Initial alarm creation",
      "timestamp": "2025-12-01T13:40:50.600+0000"
    },
    "configuration": {
      "metrics": [
        {
          "id": "m1",
          "expression": "SELECT AVG(ConsumedWriteCapacityUnits) FROM \"AWS/DynamoDB\" GROUP BY TableName ORDER BY MAX() DESC",
          "returnData": true,
          "period": 60
        }
      ],
      "description": "Metrics Insights alarm for DynamoDB ConsumedWriteCapacity per TableName"
    }
  }
}
```

------

## 告警配置更改事件
<a name="CloudWatch-config-change-events"></a>

本节旨在介绍告警配置发生变化时发送到 EventBridge 的示例事件。配置更改包括创建、更新或删除告警。

------
#### [ Creation Events ]

创建新告警时生成的事件。这些事件包含 `configuration` 字段中的初始告警配置，并且 `operation` 设置为“创建”。

**复合告警示例**

```
{
    "version": "0",
    "id": "91535fdd-1e9c-849d-624b-9a9f2b1d09d0",
    "detail-type": "CloudWatch Alarm Configuration Change",
    "source": "aws.cloudwatch",
    "account": "123456789012",
    "time": "2022-03-03T17:06:22Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:cloudwatch:us-east-1:123456789012:alarm:ServiceAggregatedAlarm"
    ],
    "detail": {
        "alarmName": "ServiceAggregatedAlarm",
        "operation": "create",
        "state": {
            "value": "INSUFFICIENT_DATA",
            "timestamp": "2022-03-03T17:06:22.289+0000"
        },
        "configuration": {
            "alarmRule": "ALARM(ServerCpuTooHigh) OR ALARM(TotalNetworkTrafficTooHigh)",
            "alarmName": "ServiceAggregatedAlarm",
            "description": "Aggregated monitor for instance",
            "actionsEnabled": true,
            "timestamp": "2022-03-03T17:06:22.289+0000",
            "okActions": [],
            "alarmActions": [],
            "insufficientDataActions": []
        }
    }
}
```

**具有抑制器的复合告警示例**

```
{
    "version": "0",
    "id": "454773e1-09f7-945b-aa2c-590af1c3f8e0",
    "detail-type": "CloudWatch Alarm Configuration Change",
    "source": "aws.cloudwatch",
    "account": "123456789012",
    "time": "2022-07-14T13:59:46Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:cloudwatch:us-east-1:123456789012:alarm:ServiceAggregatedAlarm"
    ],
    "detail": {
        "alarmName": "ServiceAggregatedAlarm",
        "operation": "create",
        "state": {
            "value": "INSUFFICIENT_DATA",
            "timestamp": "2022-07-14T13:59:46.425+0000"
        },
        "configuration": {
            "alarmRule": "ALARM(ServerCpuTooHigh) OR ALARM(TotalNetworkTrafficTooHigh)",
            "actionsSuppressor": "ServiceMaintenanceAlarm",
            "actionsSuppressorWaitPeriod": 120,
            "actionsSuppressorExtensionPeriod": 180,
            "alarmName": "ServiceAggregatedAlarm",
            "actionsEnabled": true,
            "timestamp": "2022-07-14T13:59:46.425+0000",
            "okActions": [],
            "alarmActions": [],
            "insufficientDataActions": []
        }
    }
}
```

------
#### [ Update Events ]

修改现有告警时生成的事件。这些事件同时包含 `configuration` 和 `previousConfiguration` 字段，可显示具体更改的内容。

**指标告警示例**

```
{
    "version": "0",
    "id": "bc7d3391-47f8-ae47-f457-1b4d06118d50",
    "detail-type": "CloudWatch Alarm Configuration Change",
    "source": "aws.cloudwatch",
    "account": "123456789012",
    "time": "2022-03-03T17:06:34Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:cloudwatch:us-east-1:123456789012:alarm:ServerCpuTooHigh"
    ],
    "detail": {
        "alarmName": "ServerCpuTooHigh",
        "operation": "update",
        "state": {
            "value": "INSUFFICIENT_DATA",
            "timestamp": "2022-03-03T17:06:13.757+0000"
        },
        "configuration": {
            "evaluationPeriods": 1,
            "threshold": 80,
            "comparisonOperator": "GreaterThanThreshold",
            "treatMissingData": "ignore",
            "metrics": [
                {
                    "id": "86bfa85f-b14c-ebf7-8916-7da014ce23c0",
                    "metricStat": {
                        "metric": {
                            "namespace": "AWS/EC2",
                            "name": "CPUUtilization",
                            "dimensions": {
                                "InstanceId": "i-12345678901234567"
                            }
                        },
                        "period": 300,
                        "stat": "Average"
                    },
                    "returnData": true
                }
            ],
            "alarmName": "ServerCpuTooHigh",
            "description": "Goes into alarm when server CPU utilization is too high!",
            "actionsEnabled": true,
            "timestamp": "2022-03-03T17:06:34.267+0000",
            "okActions": [],
            "alarmActions": [],
            "insufficientDataActions": []
        },
        "previousConfiguration": {
            "evaluationPeriods": 1,
            "threshold": 70,
            "comparisonOperator": "GreaterThanThreshold",
            "treatMissingData": "ignore",
            "metrics": [
                {
                    "id": "d6bfa85f-893e-b052-a58b-4f9295c9111a",
                    "metricStat": {
                        "metric": {
                            "namespace": "AWS/EC2",
                            "name": "CPUUtilization",
                            "dimensions": {
                                "InstanceId": "i-12345678901234567"
                            }
                        },
                        "period": 300,
                        "stat": "Average"
                    },
                    "returnData": true
                }
            ],
            "alarmName": "ServerCpuTooHigh",
            "description": "Goes into alarm when server CPU utilization is too high!",
            "actionsEnabled": true,
            "timestamp": "2022-03-03T17:06:13.757+0000",
            "okActions": [],
            "alarmActions": [],
            "insufficientDataActions": []
        }
    }
}
```

**具有抑制器的指标告警示例**

```
    {
    "version": "0",
    "id": "4c6f4177-6bd5-c0ca-9f05-b4151c54568b",
    "detail-type": "CloudWatch Alarm Configuration Change",
    "source": "aws.cloudwatch",
    "account": "123456789012",
    "time": "2022-07-14T13:59:56Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:cloudwatch:us-east-1:123456789012:alarm:ServiceAggregatedAlarm"
    ],
    "detail": {
        "alarmName": "ServiceAggregatedAlarm",
        "operation": "update",
        "state": {
            "actionsSuppressedBy": "WaitPeriod",
            "value": "ALARM",
            "timestamp": "2022-07-14T13:59:46.425+0000"
        },
        "configuration": {
            "alarmRule": "ALARM(ServerCpuTooHigh) OR ALARM(TotalNetworkTrafficTooHigh)",
            "actionsSuppressor": "ServiceMaintenanceAlarm",
            "actionsSuppressorWaitPeriod": 120,
            "actionsSuppressorExtensionPeriod": 360,
            "alarmName": "ServiceAggregatedAlarm",
            "actionsEnabled": true,
            "timestamp": "2022-07-14T13:59:56.290+0000",
            "okActions": [],
            "alarmActions": [], Remove 
            "insufficientDataActions": []
        },
        "previousConfiguration": {
            "alarmRule": "ALARM(ServerCpuTooHigh) OR ALARM(TotalNetworkTrafficTooHigh)",
            "actionsSuppressor": "ServiceMaintenanceAlarm",
            "actionsSuppressorWaitPeriod": 120,
            "actionsSuppressorExtensionPeriod": 180,
            "alarmName": "ServiceAggregatedAlarm",
            "actionsEnabled": true,
            "timestamp": "2022-07-14T13:59:46.425+0000",
            "okActions": [],
            "alarmActions": [],
            "insufficientDataActions": []
        }
    }
}
```

------
#### [ Deletion Events ]

删除告警时生成的事件。这些事件包含最终的告警配置，并且 `operation` 设置为“删除”。

**指标数学告警示例**

```
{
    "version": "0",
    "id": "f171d220-9e1c-c252-5042-2677347a83ed",
    "detail-type": "CloudWatch Alarm Configuration Change",
    "source": "aws.cloudwatch",
    "account": "123456789012",
    "time": "2022-03-03T17:07:13Z",
    "region": "us-east-*",
    "resources": [
        "arn:aws:cloudwatch:us-east-1:123456789012:alarm:TotalNetworkTrafficTooHigh"
    ],
    "detail": {
        "alarmName": "TotalNetworkTrafficTooHigh",
        "operation": "delete",
        "state": {
            "value": "INSUFFICIENT_DATA",
            "timestamp": "2022-03-03T17:06:17.672+0000"
        },
        "configuration": {
            "evaluationPeriods": 1,
            "threshold": 10000,
            "comparisonOperator": "GreaterThanThreshold",
            "treatMissingData": "ignore",
            "metrics": [{
                    "id": "m1",
                    "metricStat": {
                        "metric": {
                            "namespace": "AWS/EC2",
                            "name": "NetworkIn",
                            "dimensions": {
                                "InstanceId": "i-12345678901234567"
                            }
                        },
                        "period": 300,
                        "stat": "Maximum"
                    },
                    "returnData": false
                },
                {
                    "id": "m2",
                    "metricStat": {
                        "metric": {
                            "namespace": "AWS/EC2",
                            "name": "NetworkOut",
                            "dimensions": {
                                "InstanceId": "i-12345678901234567"
                            }
                        },
                        "period": 300,
                        "stat": "Maximum"
                    },
                    "returnData": false
                },
                {
                    "id": "e1",
                    "expression": "SUM(METRICS())",
                    "label": "Total Network Traffic",
                    "returnData": true
                }
            ],
            "alarmName": "TotalNetworkTrafficTooHigh",
            "description": "Goes into alarm if total network traffic exceeds 10Kb",
            "actionsEnabled": true,
            "timestamp": "2022-03-03T17:06:17.672+0000",
            "okActions": [],
            "alarmActions": [],
            "insufficientDataActions": []
        }
    }
}
```

**带有抑制器的指标数学告警示例**

```
{
    "version": "0",
    "id": "e34592a1-46c0-b316-f614-1b17a87be9dc",
    "detail-type": "CloudWatch Alarm Configuration Change",
    "source": "aws.cloudwatch",
    "account": "123456789012",
    "time": "2022-07-14T14:00:01Z",
    "region": "us-east-*",
    "resources": [
        "arn:aws:cloudwatch:us-east-1:123456789012:alarm:ServiceAggregatedAlarm"
    ],
    "detail": {
        "alarmName": "ServiceAggregatedAlarm",
        "operation": "delete",
        "state": {
            "actionsSuppressedBy": "WaitPeriod",
            "value": "ALARM",
            "timestamp": "2022-07-14T13:59:46.425+0000"
        },
        "configuration": {
            "alarmRule": "ALARM(ServerCpuTooHigh) OR ALARM(TotalNetworkTrafficTooHigh)",
            "actionsSuppressor": "ServiceMaintenanceAlarm",
            "actionsSuppressorWaitPeriod": 120,
            "actionsSuppressorExtensionPeriod": 360,
            "alarmName": "ServiceAggregatedAlarm",
            "actionsEnabled": true,
            "timestamp": "2022-07-14T13:59:56.290+0000",
            "okActions": [],
            "alarmActions": [],
            "insufficientDataActions": []
        }
    }
}
```

------