

# OPS 4  如何设计工作负载以便自己了解其状态？
<a name="w2aac19b5b7b5"></a>

 将工作负载设计成能够提供所有组件（例如指标、日志和跟踪信息）的必要信息，以便您了解其内部状态。这让您能够在适当的时候提供有效的响应。 

**Topics**
+ [OPS04-BP01 实施应用程序遥测](ops_telemetry_application_telemetry.md)
+ [OPS04-BP02 实施和配置工作负载遥测](ops_telemetry_workload_telemetry.md)
+ [OPS04-BP03 实施用户活动遥测](ops_telemetry_customer_telemetry.md)
+ [OPS04-BP04 实施依赖项遥测](ops_telemetry_dependency_telemetry.md)
+ [OPS04-BP05 实施事务跟踪](ops_telemetry_dist_trace.md)

# 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) 

# OPS04-BP02 实施和配置工作负载遥测
<a name="ops_telemetry_workload_telemetry"></a>

 设计和配置工作负载，使其能够发出关于其内部状态和当前状态的信息，例如 API 调用量、HTTP 状态代码和扩展事件。使用这些信息帮助确定需要在什么时候响应。 

 使用 [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/) 等服务聚合工作负载组件中的日志和指标（例如， [AWS CloudTrail 的 API 日志](https://aws.amazon.com/cloudtrail/)， [AWS Lambda 指标](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html)， [Amazon VPC 流日志](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)和 [其他服务](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/aws-services-sending-logs.html)）。 

 **常见反模式：** 
+  您的客户抱怨性能不佳。您最近没有更改应用程序，因此您怀疑是工作负载组件的问题。由于没有遥测，您无法分析，难以确定是哪个或哪些组件导致了性能不佳。 
+  无法访问您的应用程序。由于没有遥测，难以确定是否是网络问题。 

 **建立此最佳实践的好处：** 了解工作负载的内部情况可让您能够在必要时做出响应。 

 **未建立此最佳实践暴露的风险等级：** 高 

## 实施指导
<a name="implementation-guidance"></a>
+  实施日志和指标遥测：构建工作负载，使其能够提供其内部状态和业务成果实现情况的信息。使用这些信息来确定需要在什么时候响应。 
  +  [使用 Amazon CloudWatch 获得对 VM 更好的可观测性 – AWS 在线技术讲座](https://youtu.be/1Ck_me4azMw) 
  +  [Amazon CloudWatch 的工作原理](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_architecture.html) 
  +  [什么是 Amazon CloudWatch？](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) 
  +  [使用 Amazon CloudWatch 指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html) 
  +  [什么是 Amazon CloudWatch Logs？](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) 
    +  实施和配置工作负载遥测：设计和配置工作负载，使其能够发出关于其内部状态和当前状态的信息（例如 API 调用量、HTTP 状态代码和扩展事件）。 
      +  [Amazon CloudWatch 指标和维度参考](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CW_Support_For_AWS.html) 
      +  [AWS CloudTrail](https://aws.amazon.com/cloudtrail/) 
      +  [什么是 AWS CloudTrail？](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) 
      +  [VPC 流日志](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html) 

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

 **相关文档：** 
+  [AWS CloudTrail](https://aws.amazon.com/cloudtrail/) 
+  [Amazon CloudWatch 文档](https://docs.aws.amazon.com/cloudwatch/index.html) 
+  [Amazon CloudWatch 指标和维度参考](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CW_Support_For_AWS.html) 
+  [Amazon CloudWatch 的工作原理](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_architecture.html) 
+  [使用 Amazon CloudWatch 指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html) 
+  [VPC 流日志](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html) 
+  [什么是 AWS CloudTrail？](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) 
+  [什么是 Amazon CloudWatch Logs？](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) 
+  [什么是 Amazon CloudWatch？](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) 

 **相关视频：** 
+  [AWS 上的应用程序性能管理](https://www.youtube.com/watch?v=5T4stR-HFas) 
+  [使用 Amazon CloudWatch 获得对 VM 更好的可观测性](https://youtu.be/1Ck_me4azMw) 
+  [使用 Amazon CloudWatch 获得对 VM 更好的可观测性 – AWS 在线技术讲座](https://youtu.be/1Ck_me4azMw) 

# OPS04-BP03 实施用户活动遥测
<a name="ops_telemetry_customer_telemetry"></a>

 构建应用程序代码，使其能够发出关于用户活动的信息，例如点击流或者开始、放弃和完成的事务。使用这些信息来帮助了解应用程序的使用方式和使用量模式，并确定需要在什么时候响应。 

 **常见反模式：** 
+  您的开发人员部署了无需用户遥测的新功能，并且利用率有所提高。您不能确定增加的利用率是由于新功能的使用，还是新代码导致的问题。 
+  您的开发人员部署了无需用户遥测的新功能。如果不联系客户并询问他们，您就无法判断客户是否正在使用新功能。 

 **建立此最佳实践的好处：** 了解客户如何通过您的应用程序来确定使用模式、意外行为，以及在必要时让您做出响应。 

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

## 实施指导
<a name="implementation-guidance"></a>
+  实施用户活动遥测：设计应用程序代码，使其能够发出关于用户活动的信息（例如点击流或者开始、放弃和完成的事务）。使用这些信息来帮助了解应用程序的使用方式和使用量模式，并确定需要在什么时候响应。 

# OPS04-BP04 实施依赖项遥测
<a name="ops_telemetry_dependency_telemetry"></a>

 设计和配置工作负载，使其能够提供关于其依赖的资源状态（例如可访问性或响应时间）的信息。外部依赖项的示例可以包括外部数据库、DNS 和网络连接。使用这些信息来确定需要在什么时候响应。 

 **常见反模式：** 
+  如果不手动执行检查，了解 DNS 提供程序是否正常运行，就难以确定无法访问应用程序是否是 DNS 的问题。 
+  您的购物车应用程序无法完成交易。如果不与信用卡处理提供商联系进行确认，就无法确定是否是他们的问题。 

 **建立此最佳实践的好处：** 了解依赖项的运行状况有助于您在必要时做出响应。 

 **未建立此最佳实践暴露的风险等级：** 中 

## 实施指导
<a name="implementation-guidance"></a>
+  实施依赖项遥测：设计和配置工作负载，使其能够发出关于其状态及其依赖的系统状态的信息。例如：外部数据库、DNS、网络连接以及外部信用卡处理服务。 
  +  [Amazon CloudWatch 代理与 AWS Systems Manager 集成 – 适用于 Linux 和 Windows 的统一指标和日志收集](https://aws.amazon.com/blogs/aws/new-amazon-cloudwatch-agent-with-aws-systems-manager-integration-unified-metrics-log-collection-for-linux-windows/) 
  +  [使用 CloudWatch 代理从 Amazon EC2 实例和本地服务器收集指标和日志](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html) 

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

 **相关文档：** 
+  [Amazon CloudWatch 代理与 AWS Systems Manager 集成 – 适用于 Linux 和 Windows 的统一指标和日志收集](https://aws.amazon.com/blogs/aws/new-amazon-cloudwatch-agent-with-aws-systems-manager-integration-unified-metrics-log-collection-for-linux-windows/) 
+  [使用 CloudWatch 代理从 Amazon EC2 实例和本地服务器收集指标和日志](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html) 

   **相关示例：** 
+  [Well-Architected 实验室 – 依赖项监控](https://wellarchitectedlabs.com/operational-excellence/100_labs/100_dependency_monitoring/) 

# OPS04-BP05 实施事务跟踪
<a name="ops_telemetry_dist_trace"></a>

 实施应用程序代码并配置工作负载组件，提供关于工作负载之间的事务流的信息。使用这些信息来确定需要在什么时候做出响应，并帮助您确定导致问题的因素。 

 在 AWS 中，您可以使用分布式跟踪服务（例如 [AWS X-Ray](https://aws.amazon.com/xray/)）来收集和记录事务通过工作负载时的跟踪记录，生成地图以查看事务如何在工作负载和服务之间流动，深入了解组件之间的关系，并实时识别和分析问题。 

 **常见反模式：** 
+  您跨多个账户实施了无服务器微服务架构。您的客户遇到间歇性性能问题。您无法确定是哪项功能还是哪个组件的问题，因为您缺少跟踪信息，无法明确指出应用程序哪里出现了性能问题以及导致问题的原因。 
+  您尝试确定工作负载中的性能问题，以便在开发工作中解决它们。您无法查看应用程序组件以及与它们交互的服务之间的关系，难以确定问题出在哪里；这是因为您缺少跟踪信息，无法深入了解影响应用程序性能的具体服务和路径。 

 **建立此最佳实践的好处：** 了解跨工作负载的事务流可让您了解工作负载事务的预期行为及其在整个工作负载中的变化，使您能够在必要时做出响应。 

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

## 实施指导
<a name="implementation-guidance"></a>
+  实施事务跟踪：设计应用程序和工作负载，使其发出有关系统组件间的事务流的信息，例如事务阶段、活动组件以及完成活动的时间。使用这些信息来确定正在进行的活动、已完成的活动以及已完成活动的结果。这可以帮助您确定需要在什么时候响应。例如，组件内的事务响应时间长于预期，这可能表明该组件存在问题。 
  +  [AWS X-Ray](https://aws.amazon.com/xray/) 
  +  [什么是 AWS X-Ray？](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html) 

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

 **相关文档：** 
+  [AWS X-Ray](https://aws.amazon.com/xray/) 
+  [什么是 AWS X-Ray？](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html) 