

# REL06-BP03 发送通知（实时处理和报警）
<a name="rel_monitor_aws_resources_notification_monitor"></a>

当组织检测到潜在问题时，会向相应的人员和系统发送实时通知和警报，以便快速有效地处理这些问题。

 **期望的结果：** 通过根据服务和应用程序指标配置相关警报，可对运维事件做出快速响应。当超出警报阈值时，相应的人员和系统会收到通知，以便解决潜在的问题。 

 **常见反模式：** 
+ 配置的警报阈值过高，导致无法发送重要通知。
+ 配置的警报阈值过低，导致通知过多，而重要警报无法得到处理。
+  使用情况发生变化时不更新警报及其阈值。 
+  对于最好通过自动操作来处理的警报，向人员发送通知而不是生成自动操作，从而导致发送的通知过多。 

 **建立此最佳实践的好处：** 通过向相应的人员和系统发送实时通知和警报，可以及早发现问题并快速处理运维方面的意外事件。 

 **未建立这种最佳实践的情况下暴露的风险等级：** 高 

## 实施指导
<a name="implementation-guidance"></a>

 工作负载应配备实时处理和报警功能，从而更及时地检测到可能影响应用程序可用性的问题，并充当自动响应的触发器。组织可以通过使用定义的指标创建警报来执行实时处理和报警，以便在发生重大事件或指标超过阈值时收到通知。 

 [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) 让您可以基于静态阈值、异常检测和其他标准创建 [指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html) 和复合警报（使用 CloudWatch 警报）。有关您可以使用 CloudWatch 配置的警报类型的详细信息，请参阅 [CloudWatch 文档的警报部分](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)。 

 您可以为团队自定义包含 AWS 资源指标和警报的视图 – 使用 [CloudWatch 控制面板](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。通过 CloudWatch 控制台中的可自定义主页，您可以在单一视图中监控多个区域的资源。 

 警报可以执行一项或多项操作，例如，向 [Amazon SNS 主题](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/US_SetupSNS.html)发送通知，执行 [Amazon EC2](https://aws.amazon.com/ec2/) 操作或 [Amazon EC2 Auto Scaling](https://aws.amazon.com/ec2/autoscaling/) 操作，或者 [创建 OpsItem](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) （在 AWS Systems Manager 中）。 

 Amazon CloudWatch 使用 [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) 在警报状态发生变化时发送通知，提供从发布者（生产者）到订阅用户（消费者）的信息传递。有关设置 Amazon SNS 通知的详细信息，请参阅 [配置 Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-configuring.html)。 

 CloudWatch 会在以下情况下发送 [EventBridge](https://aws.amazon.com/eventrbridge/) [事件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-and-eventbridge.html) ：每当创建、更新、删除 CloudWatch 警报或者其状态发生变化时。您可以结合使用 EventBridge 与这些事件来创建执行操作的规则，例如，每当警报状态发生变化时通知您，或者使用 [Systems Manager 自动化](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-automation.html)功能自动触发账户中的事件。 

** 何时应使用 EventBridge？何时应使用 Amazon SNS？ **

 EventBridge 和 Amazon SNS 都可用于开发事件驱动型应用程序，您可以根据自己的具体需求进行选择。 

 如果您想构建一个能对来自您自己的应用程序、SaaS 应用程序和 AWS 服务的事件做出反应的应用程序，建议使用 Amazon EventBridge。EventBridge 是唯一一项直接与第三方 SaaS 合作伙伴集成的基于事件的服务。EventBridge 还可以自动从 200 多个 AWS 服务中摄取事件，而无需开发人员在自己的账户中创建任何资源。 

 EventBridge 使用已定义的基于 JSON 的事件结构，有助于您创建应用于整个事件主体的规则，以便选择要转发到 [目标](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-targets.html)的事件。EventBridge 目前支持将 20 多种 AWS 服务作为目标，包括 [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)、[Amazon SQS](https://aws.amazon.com/sqs/)、Amazon SNS、[Amazon Kinesis Data Streams](https://aws.amazon.com/kinesis/data-streams/)和 [Amazon Data Firehose](https://aws.amazon.com/kinesis/data-firehose/)。 

 对于需要高扇出（数千或数百万个端点）的应用程序，建议使用 Amazon SNS。我们常见的一种模式是，客户将 Amazon SNS 用作规则的目标，来筛选所需的事件并扇出到多个端点。 

 消息是非结构化的，可以是任何格式。Amazon SNS 支持将消息转发到六种目标，包括 Lambda、Amazon SQS、HTTP/S 端点、SMS、移动推送和电子邮件。 Amazon SNS [典型延迟不超过 30 毫秒](https://aws.amazon.com/sns/faqs/)。许多 AWS 服务配置为发送 Amazon SNS 消息（超过 30 个服务，包括 Amazon EC2、[Amazon S3](https://aws.amazon.com/s3/)和 [Amazon RDS](https://aws.amazon.com/rds/)）。 

### 实施步骤
<a name="implementation-steps"></a>

1.  使用 [Amazon CloudWatch 警报](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)来创建警报。 

   1.  指标警报可监控单个 CloudWatch 指标或依赖于 CloudWatch 指标的表达式。这种警报会根据在若干时间间隔内，指标或表达式的值与阈值的比较结果，启动一项或多项操作。这些操作可能包括：向 [Amazon SNS 主题](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/US_SetupSNS.html)发送通知，执行 [Amazon EC2](https://aws.amazon.com/ec2/) 操作或 [Amazon EC2 Auto Scaling](https://aws.amazon.com/ec2/autoscaling/) 操作，或者 [创建 OpsItem](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) （在 AWS Systems Manager 中）。 

   1.  复合警报由一个规则表达式组成，该规则表达式考虑了您创建的其他警报的警报条件。只有满足所有规则条件，复合警报才会进入警报状态。复合警报的规则表达式中指定的警报可以包括指标警报和其他复合警报。复合警报可以在状态发生变化时发送 Amazon SNS 通知，并且可以在进入警报状态时创建 Systems Manager [OpsItem](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) ，但无法执行 Amazon EC2 或 Auto Scaling 操作。 

1.  设置 [Amazon SNS 通知](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/US_SetupSNS.html)。创建 CloudWatch 警报时，可以包括 Amazon SNS 主题，以便在警报状态发生变化时发送通知。 

1.  [在 EventBridge 中创建规则](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-get-started.html) 以便与指定的 CloudWatch 警报匹配。每条规则都支持多个目标，包括 Lambda 函数。例如，您可以定义一个警报，该警报在可用磁盘空间不足时启动，它会通过 EventBridge 规则触发 Lambda 函数来清理空间。有关 EventBridge 目标的详细信息，请参阅 [EventBridge 目标](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-targets.html)。 

## 资源
<a name="resources"></a>

 **相关的 Well-Architected 最佳实践：** 
+  [REL06-BP01 为工作负载监控全部组件（生成）](rel_monitor_aws_resources_monitor_resources.md) 
+  [REL06-BP02 定义与计算指标（聚合）](rel_monitor_aws_resources_notification_aggregation.md) 
+  [REL12-BP01 使用行动手册调查故障](rel_testing_resiliency_playbook_resiliency.md) 

 **相关文档：** 
+ [ Amazon CloudWatch ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)
+ [ CloudWatch Logs Insights ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html)
+  [使用 Amazon CloudWatch 警报](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html) 
+  [使用 Amazon CloudWatch 控制面板](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html) 
+  [使用 Amazon CloudWatch 指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html) 
+ [ 设置 Amazon SNS 通知 ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/US_SetupSNS.html)
+ [ CloudWatch 异常检测 ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Anomaly_Detection.html)
+ [ CloudWatch Logs 数据保护 ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/protect-sensitive-log-data-types.html)
+ [ Amazon EventBridge ](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)
+ [ Amazon Simple Notification Service ](https://aws.amazon.com/sns/)

 **相关视频：** 
+ [ re:Invent 2022 可观测性视频 ](https://www.youtube.com/results?search_query=reinvent+2022+observability)
+ [AWS re:Invent 2022 – Amazon 的可观测性最佳实践 ](https://www.youtube.com/watch?v=zZPzXEBW4P8)

 **相关示例：** 
+  [One Observability Workshop](https://observability.workshop.aws/) 
+ [ Amazon EventBridge 通过 Amazon CloudWatch 警报对 AWS Lambda 进行反馈控制 ](https://serverlessland.com/patterns/cdk-closed-loop-serverless-control-pattern)