什么是可观测性?

已完成

在深入了解代码之前,让我们退一步,讨论可观测性。 你需要有一些工具,帮助你根据外部可见的内容了解系统的内部状态。

为什么实现可观测性?

有几个原因导致可观测性是开发和改进云原生应用程序的关键方面:

  • 了解系统行为:可观测性提供有关应用程序执行方式以及瓶颈或错误发生位置的见解。
  • 调试和故障排除:出现问题时,可观测性工具可以提供有关问题时系统中发生的情况的详细信息。
  • 持续改进:可观测性不仅仅是用于识别和解决问题,还用于持续改进。 通过随时间推移监视系统性能,可以识别优化代码、提高系统性能的机会,并量化改善用户的体验。
  • 主动问题检测:通过使用合适的可观测性工具,您可以在用户发现问题之前检测到问题。

在云原生应用程序中实现可观测性不仅仅是最佳做法,它也是维护、优化和持续改进应用程序的必要条件。 它使开发人员能够提供可靠的高性能应用程序,并提供推动明智决策所需的见解。

可观测性的三大支柱

可观测性有三个主要支柱:

  • 日志:日志提供应用程序或系统中发生的事件的详细记录。 在应用中,可以使用 Microsoft.Extensions.Logging 基础结构来记录事件。
  • 指标:指标指的是数值测量和计数器,这些测量提供系统性能和健康状况的洞察。 示例包括请求速率、响应时间、CPU/内存使用率和错误速率。 在你的应用中,你可能具有需要跟踪的特定度量值。
  • 分布式跟踪:此过程涉及跟踪请求,因为它通过云原生应用中的所有微服务传播。 每个服务都记录跟踪数据,例如请求 ID,使你能够跨服务关联事件。 分布式跟踪还可用于调试复杂系统中的性能问题和错误。

这三大支柱共同为系统提供全面的可观测性。

遥测数据的源

在公司的云原生应用中,可以选择收集多个遥测源:

  • 应用程序日志:应用程序生成日志,这些日志提供有关其作和错误(如果发生)的详细信息。 日志记录是遥测数据的丰富源。
  • 数据库:数据库可以提供有关查询的遥测数据、执行时间以及发生的任何错误。
  • HTTP 请求和响应:微服务之间的 HTTP 请求和响应提供丰富的有价值的遥测数据。 此数据包括请求和响应标头、正文内容、状态代码和计时信息。
  • 客户端性能数据:在具有前端的云原生应用中,可以收集客户端性能数据。 此数据可能包括页面命中次数、加载时间和 UI 交互时间。
  • 基础结构指标:如果应用程序托管在云环境中,则可以收集基础结构指标,例如 CPU 使用率、内存使用率、网络流量和磁盘 I/O作。

通过收集和分析此遥测数据,可以深入了解应用程序的性能和运行状况。

实现可观测性

若要向云原生应用程序添加可观测性,请执行以下步骤:

  • 添加日志记录。
  • 启用指标并定义要捕获的自定义指标。
  • 使用 OpenTelemetry 和 Zipkin 启用分布式跟踪。
  • 使用 OpenTelemetry 再次检测应用,并将遥测数据添加到代码中。
  • 使用 Prometheus、Grafana 或 Application Insights 分析遥测数据。

OpenTelemetry 简介

OpenTelemetry 如何帮助向应用添加可观测性,为什么 .NET 中对它有如此深入的支持? OpenTelemetry 是开源可观测性框架。 它提供了一种与供应商无关的标准方法来生成遥测数据。

OpenTelemetry 将遥测数据收集和传输到后端平台的方式标准化。 它通过为所有微服务提供通用的检测格式来弥合可见性差距。 每次后端平台更改时,无需重新构建代码或安装不同的专有代理。

因为它是开放标准,因此它支持 .NET 以外的许多其他工具。 OpenTelemetry 配置为使用扩展,使导出器能够创建并发送遥测数据至所有不同的工具。 这意味着,无论微服务采用何种语言,都可以使用相同的工具来监视微服务。

OpenTelemetry 可帮助你收集和监视可观测性的所有三大支柱:日志、指标和跟踪。 你将了解如何在以下单元中执行这些任务。