

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Amazon CloudWatch 异常检测为自定义指标创建警报
<a name="create-alarms-for-custom-metrics-using-amazon-cloudwatch-anomaly-detection"></a>

*Ram Kandaswamy 和 Raheem Jiwani，Amazon Web Services*

## Summary
<a name="create-alarms-for-custom-metrics-using-amazon-cloudwatch-anomaly-detection-summary"></a>

在 Amazon Web Services (AWS) 云上，您可以使用亚马逊 CloudWatch 创建警报，用于监控指标并发送通知，或者在突破阈值时自动进行更改。

为避免受到[静态阈值](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ConsoleAlarms.html)的限制，您可以根据过去的模式创建警报，并在特定指标超出正常操作窗口时通知您。例如，您可以从 Amazon API Gateway 监控您的 API 的响应时间，并接收有关妨碍您满足服务水平协议（SLA）的异常的通知。

此模式描述了如何对自定义指标使用 CloudWatch 异常检测。该模式向您展示了如何在 Amazon L CloudWatch ogs Insights 中创建自定义指标或使用 AWS Lambda 函数发布自定义指标，然后使用亚马逊简单通知服务 (Amazon SNS) Simple Notification Service 设置异常检测和创建通知。

## 先决条件和限制
<a name="create-alarms-for-custom-metrics-using-amazon-cloudwatch-anomaly-detection-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account。
+ 现有 SNS 主题，可配置以用于发送电子邮件通知。有关此内容的更多信息，请参阅 Amazon SNS 文档中的 [Amazon SNS 入门](https://docs.aws.amazon.com/sns/latest/dg/sns-getting-started.html)。
+ 配置了[CloudWatch 日志](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_GettingStarted.html)的现有应用程序。

**限制**
+ CloudWatch 指标不支持毫秒的时间间隔。有关常规指标和自定义指标粒度的更多信息，请参阅 [Amazon CloudWatch FAQs](https://aws.amazon.com/cloudwatch/faqs/)。

## 架构
<a name="create-alarms-for-custom-metrics-using-amazon-cloudwatch-anomaly-detection-architecture"></a>

![CloudWatch 警报启动时使用 Amazon SNS 主题发送电子邮件通知。](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/d47e6f7f-e469-4cb9-b34b-8c4b78d71820/images/49f30340-9552-430a-893a-d0608bb09e38.png)


 下图显示了如下工作流：

1. 使用日志创建和更新的指标的 CloudWatch 日志将流式传输到 CloudWatch。

1. 警报根据阈值启动，并向 SNS 主题发送警报。

1. Amazon SNS 会向您发送一条电子邮件通知。

**技术堆栈 **
+ CloudWatch
+ AWS Lambda
+ Amazon SNS

## 工具
<a name="create-alarms-for-custom-metrics-using-amazon-cloudwatch-anomaly-detection-tools"></a>
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) 提供可靠、可扩展且灵活的监控解决方案。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 是一项计算服务，可帮助您运行代码，无需预调配或管理服务器。
+ [Amazon Simple Notiﬁcation Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) 是一项托管服务，提供从发布者至订阅用户的消息传输。

## 操作说明
<a name="create-alarms-for-custom-metrics-using-amazon-cloudwatch-anomaly-detection-epics"></a>

### 为自定义指标设置异常情况检测
<a name="set-up-anomaly-detection-for-a-custom-metric"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 选项 1 - 使用 Lambda 函数创建自定义指标。 | 下载`lambda_function.py`文件（附后），然后在 AWS 文档中替换[aws-lambda-developer-guide](https://github.com/awsdocs/aws-lambda-developer-guide/tree/main/sample-apps/blank-python/function)存储库中的示例`lambda_function.py`文件 GitHub。这为您提供了一个向日志发送自定义指标的 Lambda 函数示例。 CloudWatch Lambda 函数使用 Boto3 API 进行集成。 CloudWatch <br />运行 Lambda 函数后，您可以登录 AWS 管理控制台，打开控制台，发布的 CloudWatch 指标将在您发布的命名空间下可用。 | DevOps 工程师，AWS DevOps | 
| 选项 2-从 CloudWatch 日志组创建自定义指标。 | 登录 AWS 管理控制台，打开 CloudWatch 控制台，然后选择**日志组**。选择要为其创建警报的日志组。 <br />选择**操作**，然后选择**创建指标筛选条件**。对于**筛选条件模式**，输入要使用的筛选条件模式。有关更多信息，请参阅 CloudWatch 文档中的[过滤器和模式语法](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html)。 <br />若要测试过滤模式，请在**测试模式**下输入一个或多个日志事件。每个日志事件必须位于一行内，因为换行符用于在**日志事件**消息框中分隔日志事件。测试模式后，您可以在**指标详细信息**下输入指标的名称和值。 <br />有关创建自定义指标的更多信息和步骤，请参阅 CloudWatch 文档中的[为日志组创建指标筛选器](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CreateMetricFilterProcedure.html)。 | DevOps 工程师，AWS DevOps | 
| 为您的自定义指标创建警报。 | 在 CloudWatch 控制台上，选择**警报**，然后选择**创建警报**。选择**选择指标**，然后在搜索框中输入您之前创建的指标的名称。选择**图形化指标**选项卡，然后根据您的要求配置选项。<br />在**条件**下，选择**异常检测**，而不是**静态阈值**。这会显示一个基于两个标准默认差的波段。您可以设置阈值并根据需要进行调整。<br />选择**下一步**。波段是动态的，取决于数据点的质量。当您开始聚合更多数据时，波段和阈值会自动更新。  | DevOps 工程师，AWS DevOps | 
| 设置 Amazon SNS 通知。 | 在**通知**下方，选择警报处于 `ALARM`、`OK` 或 `INSUFFICIENT_DATA` 状态时通知的 SNS 主题。<br />要使告警为相同告警状态或不同告警状态发送多个通知，请选择**添加通知**。选择**下一步**。输入警报的名称和说明。名称只能包含 ASCII 字符。然后选择**下一步**。<br />在**预览和创建**下方确认信息和条件符合您的要求，然后选择**创建警报**。 | DevOps 工程师，AWS DevOps | 

## 相关资源
<a name="create-alarms-for-custom-metrics-using-amazon-cloudwatch-anomaly-detection-resources"></a>
+ [将自定义指标发布到 CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html)
+ [使用 CloudWatch 异常检测](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Anomaly_Detection.html)
+ [警报事件和 Amazon EventBridge](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-and-eventbridge.html)
+ [将自定义指标推送到 Cloud Watch 时应遵循哪些最佳做法？](https://www.youtube.com/watch?v=mVffHIzIL60)（视频）
+ [ CloudWatch 应用洞察简介](https://www.youtube.com/watch?v=PBO636_t9n0)（视频）
+ [使用 CloudWatch（视频）检测异常](https://www.youtube.com/watch?v=8umIX-pUy3k)

## 附件
<a name="attachments-d47e6f7f-e469-4cb9-b34b-8c4b78d71820"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/d47e6f7f-e469-4cb9-b34b-8c4b78d71820/attachments/attachment.zip)