

# OPS04-BP01 实施应用程序遥测
<a name="ops_telemetry_application_telemetry"></a>

 应用程序遥测是实现工作负载可观测性的基础。您的应用程序应该发送遥测数据，提供对应用程序状态以及所实现业务成果的洞察。从故障排除到衡量新功能的影响，应用程序遥测可以为您构建、操作和演进工作负载的方法提供信息。 

 应用程序遥测数据包括指标和日志。指标是诊断信息，例如您的脉搏和体温。所有指标结合在一起，用于描述应用程序的状态。收集一段时间的指标，以便用于制定基准和检测异常。日志是应用程序发送的消息，说明其内部状态或所发生的事件。所记录事件的例子包括错误代码、事务标识符以及用户操作。 

 **期望结果：** 
+  应用程序发送指标和日志，提供对其运行状况以及所取得业务成果的洞察。 
+  工作负载中所有应用程序的指标和日志集中存储。 

 **常见反模式：** 
+  您的应用程序无法发出遥测。出现问题时，只能通过客户获知。 
+  客户反映您的应用程序没有响应。由于没有遥测，如果不亲自使用应用程序来了解当前的用户体验，就无法确认问题的存在，也无法确定问题的特征。 

 **建立此最佳实践的好处：** 
+  您可以了解应用程序的运行状况、用户体验以及所取得的业务成果。 
+  您可以更快地对应用程序运行状况中的更改做出反应。 
+  您可以了解应用程序运行状况趋势。 
+  您可以做出明智的决定来改进应用程序。 
+  您可以更快地检测并解决应用程序问题。 

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

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

 实施应用程序遥测由三个步骤组成：确定存储遥测数据的位置，确定描述应用程序状态的遥测数据，以及指示应用程序发送遥测数据。 

 例如，电子商务公司采用了基于微服务的架构。作为其架构设计流程的一部分，他们确定了可以帮助了解各个微服务状态的应用程序遥测。例如，用户购物车服务可以针对商品添加到购物车、放弃购物车以及将商品添加到购物车所用时间长度等事件，发送遥测数据。所有微服务将记录错误、警告和事务信息。遥测数据可以发送到 Amazon CloudWatch 进行存储和分析。 

 **实施步骤** 

 第一步是针对工作负载中的应用程序，确定用于遥测数据存储的集中位置。如果您还没有现有平台， [Amazon CloudWatch](https://aws.amazon.com/cloudwatch) 会提供遥测数据收集、控制面板、分析和事件生成功能。 

 若要确定您需要哪些遥测数据，可以从以下问题开始着手： 
+  我的应用程序是否正常运行？ 
+  我的应用程序是否实现了业务成果？ 

   您的应用程序应该会发送日志和指标，综合起来即可解答这些问题。如果您无法利用现有的应用程序遥测解答这些问题，请与业务和工程设计利益相关方合作，创建可以做到这一点的遥测列表。在确定和开发新应用程序遥测的过程中，您可以请求 AWS 账户团队向您提供专家技术建议。 

   在确定其他应用程序遥测之后，与工程设计利益相关方合作来检测应用程序。 [适用于 OpenTelemetry 的 AWS Distro](https://aws-otel.github.io/) 提供收集应用程序遥测数据的 API、库和代理。 [此示例展示了如何使用自定义指标检测 JavaScript 应用程序](https://aws-otel.github.io/docs/getting-started/js-sdk/metric-manual-instr)。 

   客户如果希望了解 AWS 提供的可观测性服务，可以亲自参加 [可观测性研讨会](https://catalog.workshops.aws/observability/en-US) ，或者请求 AWS 账户团队的支持来提供指导。此研讨会引导您了解 AWS 上的可观测性解决方案，并提供如何使用这些解决方案的动手实践示例。 

   如需更深入地了解应用程序遥测，请阅读 Amazon Builders' Library 中的 [检测分布式系统的运营可见性](https://aws.amazon.com/builders-library/instrumenting-distributed-systems-for-operational-visibility/) 文章。它说明了 Amazon 如何检测应用程序，并可供您用作开发自己的检测准则的指南。 

 **实施计划的工作量级别：** 中 

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

 **相关最佳实践：** 

[OPS04-BP02 实施和配置工作负载遥测](ops_telemetry_workload_telemetry.md) – 应用程序遥测是工作负载遥测的组件。为了理解工作负载的整体运行状况，您需要了解组成工作负载的单独应用程序的运行状况。

[OPS04-BP03 实施用户活动遥测](ops_telemetry_customer_telemetry.md) – 用户活动遥测通常是应用程序遥测的子集。添加商品到购物车、点击流或者已完成事务等用户活动可以提供对用户体验的洞察。

[OPS04-BP04 实施依赖项遥测](ops_telemetry_dependency_telemetry.md) – 依赖项检查与应用程序遥测相关，可以在应用程序中检测。如果您的应用程序依赖于外部依赖项，例如 DNS 或数据库，则应用程序可以发送有关可访问性、超时和其他事件的指标和日志。

[OPS04-BP05 实施事务跟踪](ops_telemetry_dist_trace.md) – 跨工作负载跟踪事务需要各个应用程序发送有关如何处理共享事件的信息。单独应用程序处理这些事件的方式通过其应用程序遥测发送。

[OPS08-BP02 定义工作负载指标](ops_workload_health_design_workload_metrics.md) – 工作负载指标是工作负载运行状况的主要指标。主要应用程序指标是工作负载指标的一部分。

 **相关文档：** 
+  [AWS Builders Library – 检测分布式系统的运营可见性](https://aws.amazon.com/builders-library/instrumenting-distributed-systems-for-operational-visibility/) 
+  [适用于 OpenTelemetry 的 AWS Distro](https://aws-otel.github.io/) 
+  [AWS Well-Architected 卓越运营白皮书 – 设计遥测](https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/design-telemetry.html) 
+  [使用筛选条件根据日志事件创建指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/MonitoringLogData.html) 
+  [使用 Amazon CloudWatch 实施日志记录和监控](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/welcome.html) 
+  [使用适用于 OpenTelemetry 的 AWS Distro 监控应用程序运行状况和性能](https://aws.amazon.com/blogs/opensource/monitoring-application-health-and-performance-with-aws-distro-for-opentelemetry/) 
+  [新增 – 如何使用 Amazon CloudWatch 代理更好地监控自定义应用程序指标](https://aws.amazon.com/blogs/devops/new-how-to-better-monitor-your-custom-application-metrics-using-amazon-cloudwatch-agent/) 
+  [AWS 上的可观测性](https://aws.amazon.com/products/management-and-governance/use-cases/monitoring-and-observability/) 
+  [场景 – 发布指标到 CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/PublishMetrics.html) 
+  [开始构建 – 如何高效地监控应用程序](https://aws.amazon.com/startups/start-building/how-to-monitor-applications/) 
+  [将 CloudWatch 与 AWS SDK 结合使用](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/sdk-general-information-section.html) 

 **相关视频：** 
+  [AWS re:Invent 2021 – 开源方式的可观测性](https://www.youtube.com/watch?v=vAnIhIwE5hY) 
+  [使用 CloudWatch 代理从 Amazon EC2 实例收集指标和日志](https://www.youtube.com/watch?v=vAnIhIwE5hY) 
+  [如何为 AWS 工作负载轻松设置应用程序监控 – AWS 在线技术讲座](https://www.youtube.com/watch?v=LKCth30RqnA) 
+  [掌握无服务器应用程序的可观测性 – AWS 在线技术讲座](https://www.youtube.com/watch?v=CtsiXhiAUq8) 
+  [AWS 上的开源可观测性 – AWS 虚拟研讨会](https://www.youtube.com/watch?v=vAnIhIwE5hY) 

 **相关示例：** 
+  [AWS 日志记录和监控示例资源](https://github.com/aws-samples/logging-monitoring-apg-guide-examples) 
+  [AWS 解决方案：Amazon CloudWatch 监控框架](https://aws.amazon.com/solutions/implementations/amazon-cloudwatch-monitoring-framework/?did=sl_card&trk=sl_card) 
+  [AWS 解决方案：集中式日志记录](https://aws.amazon.com/solutions/implementations/centralized-logging/) 
+  [可观测性研讨会](https://catalog.workshops.aws/observability/en-US) 