

# 在警报中使用 PromQL
<a name="CloudWatch-PromQL-Alarms"></a>

您可以使用 PromQL 查询来创建 CloudWatch 警报，以监控指标。PromQL 警报会评估 PromQL 表达式，并根据查询结果触发警报状态更改。

有关警报概念的信息，请参阅[概念](alarm-concepts.md)。

有关警报数据查询的信息，请参阅[告警数据查询](alarm-data-queries.md)。

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

有关警报限制的信息，请参阅[限制](alarm-limits.md)。

## 创建 PromQL 警报
<a name="CloudWatch-PromQL-Alarms-Create"></a>

您可以通过 CloudWatch 控制台、Amazon CLI 或 CloudWatch API 创建 PromQL 警报。

**通过控制台创建 PromQL 警报**

1. 打开 [CloudWatch 控制台](https://console.amazonaws.cn/cloudwatch/)。

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

1. 选择**Create alarm（创建警报）**。

1. 选择**选择指标**，然后选择 **PromQL** 选项卡。

1. 输入 PromQL 查询。查询必须返回警报的单个时间序列以进行评估。

1. 配置警报条件，包括阈值、评估期和要发出警报的数据点。

1. 配置警报操作，例如 Amazon SNS 通知。

1. 输入警报的名称和描述，然后选择**创建警报**。

您也可以在运行返回单个时间序列的查询后，直接通过 [在 Query Studio 中运行 PromQL 查询（预览版）](CloudWatch-PromQL-QueryStudio.md) 创建 PromQL 警报。

## 使用 PromQL 创建 CloudWatch 警报以进行异常检测
<a name="promql_alarm_anomaly_detection"></a>

您可以创建一个 PromQL 警报，当指标违反统计界限定义的预期范围时会触发该警报。警报查询将上限和下限组合成一个表达式，该表达式仅返回异常数据点。查询返回的任何时间序列均被视为违规。

以下示例表达式会检测检测广告请求指标在 60 分钟窗口内偏离中位数超过 3 个标准差的情况：

```
1 * {"app.ads.ad_requests"} > quantile_over_time(0.5, {"app.ads.ad_requests"}[60m] offset 1m)
    + 3 * stddev_over_time({"app.ads.ad_requests"}[60m] offset 1m)
or
1 * {"app.ads.ad_requests"} < clamp_min(
    quantile_over_time(0.5, {"app.ads.ad_requests"}[60m] offset 1m)
    - 3 * stddev_over_time({"app.ads.ad_requests"}[60m] offset 1m),
0)
```

此表达式适用于多个标签值，因此警报可以跟踪整个实例集中的异常情况。每个违规的时间序列都作为单独的贡献者进行跟踪。有关 PromQL 警报如何评估贡献者的更多信息，请参阅 [PromQL 警报](alarm-promql.md)。

您可以调整乘数和时间窗口，以匹配指标的行为。乘数越高，界限越宽，误报越少。较长的时间窗口会平滑掉短期峰值波动。对于不能为负值的指标，`clamp_min` 函数可防止下限变为负值。

有关使用 PromQL 构建异常检测范围的更多信息，请参阅[使用 PromQL 检测异常](CloudWatch_Anomaly_Detection.md#anomaly_detection_promql)。