

# REL06-BP02 定义与计算指标（聚合）
<a name="rel_monitor_aws_resources_notification_aggregation"></a>

 从工作负载组件收集指标和日志，并从中计算相关的聚合指标。这些指标为工作负载提供了广泛而深入的可观测性，并可以显著提高韧性态势。

 可观测性不仅仅是从工作负载组件中收集指标以及能够查看指标和针对指标发出警报。其最终目的是对工作负载的行为进行全面的了解。此类行为信息来自工作负载中的所有组件，包括它们所依赖的云服务、精心制定的日志和指标。这些数据使您能够监督工作负载的整体行为，并可以非常详细地了解每个组件与每个工作单元的交互情况。

 **期望结果：**
+  可以从工作负载组件和 AWS 服务依赖关系中收集日志，然后将其发布到一个便于访问和处理的中心位置。
+  日志包含高保真和准确的时间戳。
+  日志包含有关处理上下文的相关信息，例如跟踪标识符、用户或账户标识符以及远程 IP 地址。
+  可以从日志中创建聚合指标，这些指标从高层次视角表示工作负载的行为。
+  可以查询聚合的日志，以获得有关工作负载的深入和相关的见解，并确定实际和潜在的问题。

 **常见反模式：**
+  您未从运行工作负载的计算实例或工作负载使用的云服务中收集相关日志或指标。
+  您忽略了与业务关键绩效指标（KPI）相关的日志和指标的收集。
+  您单独分析与工作负载相关的遥测数据，而没有采用聚合和关联。
+  您让指标和日志过快过期，这会阻碍趋势分析和识别反复出现的问题。

 **建立这些最佳实践的好处：**您可以检测更多异常情况，并使工作负载的不同组件之间的事件和指标相关联。您可以根据日志中包含的信息，从工作负载组件中创建见解，而这些信息通常仅在指标中不可用。通过大规模查询日志，您可以更快地确定失败原因。

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

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

 确定与您的工作负载及其组件相关的遥测数据来源。这些数据不仅来自发布指标的组件，例如您的操作系统（OS）和应用程序运行时（例如 Java），还来自应用程序和云服务日志。例如，Web 服务器通常会记录每个请求以及诸如时间戳、处理延迟、用户 ID、远程 IP 地址、路径和查询字符串等详细信息。这些日志中的详细程度有助于您执行详细的查询，并生成原本可能无法得到的指标。

 使用适当的工具和流程收集指标和日志。在 Amazon EC2 实例上运行的应用程序生成的日志可以由 [Amazon CloudWatch 代理](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html)等代理收集，并发布到 [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) 等中央存储服务。[AWS Lambda](https://aws.amazon.com/lambda/) 和 [Amazon Elastic Container Service](https://aws.amazon.com/ecs/) 等 AWS 托管式计算服务会自动将日志发布到 CloudWatch Logs。为工作负载使用的 AWS 存储和处理服务启用日志收集，如 [Amazon CloudFront](https://aws.amazon.com/cloudfront/)、[Amazon S3](https://aws.amazon.com/s3/)、[弹性负载均衡](https://aws.amazon.com/elasticloadbalancing/)和 [Amazon API Gateway](https://aws.amazon.com/api-gateway/)。

 使用*[维度](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Dimension)* 丰富遥测数据，维度有助于您更清楚地看到行为规律，并将相关问题隔离到相关组件组中。添加后，您可以更详细地观察组件行为，检测相关的故障，并采取适当的补救措施。有用维度的示例包括可用区、EC2 实例 ID 和容器任务或容器组（pod）ID。

 收集指标和日志后，您可以编写查询并从中生成聚合指标，从而为正常和异常行为提供有用的见解。例如，您可以使用 [Amazon CloudWatch Logs Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html) 从应用程序日志中得出自定义指标，使用 [Amazon CloudWatch Metrics Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/query_with_cloudwatch-metrics-insights.html) 大规模查询您的指标，使用 [Amazon CloudWatch Container Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html) 从容器化应用程序和微服务中收集、聚合和汇总指标和日志，或者，如果您使用的是 AWS Lambda 函数，则可以使用 [Amazon CloudWatch Lambda 洞察](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Lambda-Insights.html)。要创建聚合错误率指标，可以在每次在组件日志中发现错误响应或消息时递增计数器，或者计算现有错误率指标的聚合值。可以使用这些数据来生成显示*尾部行为* 的直方图，例如性能最差的请求或进程。还可以使用 CloudWatch Logs [anomaly detection](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/LogsAnomalyDetection.html) 等解决方案实时扫描这些数据，来发现异常规律。这些见解可以放在控制面板上，以便根据您的需求和偏好进行整理。

 查询日志有助于您了解工作负载组件如何处理特定的请求，并揭示影响工作负载韧性的请求规律或其它上下文。根据您对应用程序和其它组件行为的了解，提前研究和准备查询可能很有用，这样您就可以更轻松地根据需要运行它们。例如，使用 [CloudWatch Logs Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html)，您能够以交互方式搜索和分析存储在 CloudWatch Logs 中的日志数据。还可以使用 [Amazon Athena](https://aws.amazon.com/athena/) 查询来自多个来源（包括[许多 AWS 服务](https://docs.aws.amazon.com/athena/latest/ug/querying-aws-service-logs.html)）的日志，数据量可达 PB 级。

 在定义日志保留策略时，请考虑历史日志的价值。历史日志有助于确定工作负载性能的长期使用情况和行为规律、回归以及改进领域。永久删除的日志以后无法分析。然而，历史日志的价值往往会随着时间推移而减少。选择的策略应能够适当平衡您的需求，并符合您可能需要遵守的任何法律或合同要求。

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

1.  为您的可观测性数据选择收集、存储、分析和显示机制。

1.  在工作负载的适当组件上安装和配置指标和日志收集器（例如，在 Amazon EC2 实例上和[边车容器](https://kubernetes.io/docs/concepts/workloads/pods/sidecar-containers/)中）。将这些收集器配置为在意外停止时自动重新启动。为收集器启用磁盘或内存缓冲，这样，临时发布失败就不会影响应用程序或导致数据丢失。

1.  在您用作工作负载一部分的 AWS 服务上启用日志记录，并在需要时将这些日志转发到您选择的存储服务。有关详细说明，请参阅相应服务的用户或开发人员指南。

1.  定义与基于遥测数据的工作负载相关的操作指标。这些指标可能基于从工作负载组件发出的直接指标，其中可能包括与业务 KPI 相关的指标，也可能基于聚合计算的结果，例如总和、比率、百分位数或直方图。使用日志分析器计算这些指标，并根据需要将其放在控制面板上。

1.  根据需要准备相应的日志查询，来分析工作负载组件、请求或事务行为。

1.  为组件日志定义并启用日志保留策略。当日志的时间超过策略允许的时间时，定期删除日志。

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

 **相关最佳实践：**
+  [REL06-BP01 为工作负载监控全部组件（生成）](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_monitor_aws_resources_monitor_resources.html) 
+  [REL06-BP03 发送通知（实时处理和报警）](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_monitor_aws_resources_notification_monitor.html) 
+  [REL06-BP04 自动响应（实时处理和警报）](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_monitor_aws_resources_automate_response_monitor.html) 
+  [REL06-BP05 分析日志](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_monitor_aws_resources_storage_analytics.html) 
+  [REL06-BP06 定期审核监控范围和指标](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_monitor_aws_resources_review_monitoring.html) 
+  [REL06-BP07 对系统中的请求进行端到端跟踪监控](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_monitor_aws_resources_end_to_end.html) 

 **相关文档：**
+  [说明 Amazon CloudWatch 的工作原理](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_architecture.html) 
+  [Amazon Managed Prometheus](https://docs.aws.amazon.com/prometheus/latest/userguide/what-is-Amazon-Managed-Service-Prometheus.html) 
+  [Amazon Managed Grafana](https://docs.aws.amazon.com/grafana/latest/userguide/what-is-Amazon-Managed-Service-Grafana.html)。
+  [Analyzing log data with CloudWatch Logs Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html) 
+  [Amazon CloudWatch Lambda 洞察](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Lambda-Insights.html) 
+  [Amazon CloudWatch Container Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html) 
+  [使用 CloudWatch Metrics Insights 查询您的指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/query_with_cloudwatch-metrics-insights.html) 
+  [适用于 OpenTelemetry 的 AWS Distro](https://aws.amazon.com/otel/) 
+  [Amazon CloudWatch Logs Insights Sample Queries](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax-examples.html) 
+  [Debugging with Amazon CloudWatch Synthetics and AWS X-Ray](https://aws.amazon.com/blogs/devops/debugging-with-amazon-cloudwatch-synthetics-and-aws-x-ray/) 
+  [Searching and Filtering Log Data](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/MonitoringLogData.html) 
+  [Sending Logs Directly to Amazon S3](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Sending-Logs-Directly-To-S3.html) 
+  [Amazon Builders' Library：检测分布式系统的运营可见性](https://aws.amazon.com/builders-library/instrumenting-distributed-systems-for-operational-visibility/) 

 **相关讲习会：**
+  [One Observability 讲习会](https://observability.workshop.aws/) 

 **相关工具：**
+  [AWS Distro for OpenTelemetry (GitHub)](https://aws-otel.github.io/) 