

# CloudWatch 中的 CloudWatch Metrics Insights 查询警报
<a name="cloudwatch-metrics-insights-alarms"></a>

您可以为 Metrics Insights 查询创建告警。这有助于您获得跟踪多个资源的告警，而无需稍后更新。该查询可捕获新资源和发生变化的资源。例如，您可以创建一个告警来监视实例集的 CPU 利用率，该告警会自动评估您在创建告警后启动的新实例。

在为 CloudWatch 跨账户可观测性设置的监控账户中，Metris Insights 警报可以监控源账户中的资源和该监控账户本身中的资源。有关如何将警报查询限制在特定账户，以及如何按账户 ID 对结果进行分组的更多信息，请参阅 [CloudWatch Metrics Insights 中的查询组件和语法](cloudwatch-metrics-insights-querylanguage.md) 中的 `WHERE` 和 `GROUP BY` 部分。

**在警报查询中使用标签**

您可以在 Metrics Insights 查询上创建警报，这些查询使用 AWS 资源标签对指标进行筛选和分组。要将标签与警报结合使用，请在 [https://console.aws.amazon.com/connect/](https://console.aws.amazon.com/connect/) 上选择**设置**。在 **CloudWatch 设置**页面的**针对遥测启用资源标签**下，选择**启用**。上下文感知型警报可随资源变化，自动监控特定应用程序、环境或团队的相关指标。

例如，您可创建警报，对所有带有特定应用程序标签的 Amazon EC2 实例的 CPU 利用率进行监控。

```
SELECT MAX(CPUUtilization) FROM "AWS/EC2" WHERE tag.Application = 'Orders' AND tag.Environment = 'Prod'
```

基于标签的警报会随匹配标签的资源新增或移除自动适配，实现与运维架构相契合的动态监控。

**Contents**
+ [创建 Metrics Insights CloudWatch 警报](cloudwatch-metrics-insights-alarm-create.md)

# 创建 Metrics Insights CloudWatch 警报
<a name="cloudwatch-metrics-insights-alarm-create"></a>

**使用控制台为 Metrics Insights 查询创建告警**

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

1. 在导航窗格中，依次选择 **Metrics**（指标）、**All metrics**（所有指标）。

1. （可选）要运行预构建的示例查询，请选择 **Add query**（添加查询），然后选择要运行的查询。或者，您可以选择 **Editor**（编辑器）来编辑示例查询，然后选择 **Run**（运行）以运行修改后的查询。

1. 要创建您自己的查询，请选择**多来源查询**。您可以使用**构建器**视图、**编辑器**视图，也可以将二者结合起来使用。您可以随时在两个视图之间切换，并在两个视图中查看正在进行的工作。

   在 **Builder**（构建器）视图中，您可以浏览并选择指标命名空间、指标名称、筛选条件、分组和排序选项。对于其中每个选项，查询构建器都会为您提供您环境中的可选项列表，供您选择。

   在 **Editor**（编辑器）视图中，您可以开始编写查询。输入时，编辑器会根据您当前已输入的字符提供建议。

   例如，在为警报配置 Metrics Insights 查询语句时，您可通过标签对指标进行筛选和分组，实现更具针对性的监控。
   + 按标签筛选：通过 `WHERE tag.keyName = 'value'` 监控带有特定标签的资源

     ```
     SELECT MAX(CPUUtilization) FROM "AWS/EC2" WHERE tag.Environment = 'Prod'
     ```
   + 标签与维度结合：将标签筛选条件与现有指标维度结合使用

     ```
     SELECT AVG(Duration) FROM "AWS/Lambda" WHERE tag.Application = 'OrderService' AND FunctionName = 'process%'
     ```
**注意**  
使用标签时，仅当关联资源在警报评估时段内存在指定标签，该警报才会匹配对应指标。

1. 如果对查询感到满意，请选择 **Run**（运行）。

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

1. 在**条件**下面，指定以下内容：

   1. 对于 **Whenever *metric* is（每当指标）**，指定指标是必须大于、小于还是等于阈值。在**于...** 下面，指定阈值。

   1. 选择**其他配置**。对于**触发警报的数据点数**，指定必须有多少个评估期（数据点）处于 `ALARM` 状态才能触发警报。如果此处的两个值匹配，则会创建一个告警；如果多个连续评估期违例，该告警将变为 `ALARM`（告警）状态。

      要创建“M（最大为 N）”告警，为第一个值指定的数字应小于为第二个值指定的数字。有关更多信息，请参阅 [告警评估](alarm-evaluation.md)。

   1. 对于**缺失数据处理**，选择在缺失某些数据点时的警报行为。有关更多信息，请参阅 [配置 CloudWatch 告警处理缺失数据的方式](alarms-and-missing-data.md)。

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

1. 在**通知**下面，选择一个在警报处于 `ALARM`、`OK` 或 `INSUFFICIENT_DATA` 状态时通知的 SNS 主题。

   要使告警为相同告警状态或不同告警状态发送多个通知，请选择**添加通知**。

   要让警报不发送通知，请选择**删除**。

1. 要让告警执行 Auto Scaling、EC2 或 Systems Manager 操作，请选择相应的按钮，然后选择告警状态和要执行的操作。告警只有在进入“ALARM（告警）”状态时才能执行 Systems Manager 操作。有关 Systems Manager 操作的更多信息，请参阅[将 CloudWatch 配置为通过告警创建 OpsItems ](https://docs.aws.amazon.com/systems-manager/latest/userguide/OpsCenter-create-OpsItems-from-CloudWatch-Alarms.html)和[事件创建](https://docs.aws.amazon.com/incident-manager/latest/userguide/incident-creation.html)。
**注意**  
要创建执行 SSM Incident Manager 操作的告警，您必须具有特定的权限。有关更多信息，请参阅 [AWS Systems Manager Incident Manager 的基于身份的策略示例](https://docs.aws.amazon.com/incident-manager/latest/userguide/security_iam_id-based-policy-examples.html)。

1. 在完成后，选择**下一步**。

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

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

**通过 AWS CLI 基于 Metrics Insights 查询创建警报**

使用 `put-metric-alarm` 命令并在 `metrics` 参数中指定 Metrics Insights 查询。例如，以下命令将设置一个告警，如果任何实例的 CPU 利用率超过 50%，该告警将进入 ALARM 状态。

```
aws cloudwatch put-metric-alarm —alarm-name Prod-App-CPU-Alarm —evaluation-periods 1 —comparison-operator GreaterThanThreshold —metrics '[{"Id":"m1","Expression":"SELECT MAX(CPUUtilization) FROM \"AWS/EC2\" WHERE tag.Environment = '\''Prod'\'' AND tag.Application = '\''OrderService'\''", "Period":60}]' —threshold 80
```