什么是可观测性?

已完成

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

为什么要实现可观测性?

可观测性之所以成为开发和改进云原生应用程序的关键有以下几个原因:

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

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

可观测性的三大支柱

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

  • 日志:日志可提供应用程序或系统中所发生事件的详细记录。 在应用中,可以使用 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 可帮助你收集和监视可观测性的所有三大支柱:日志、指标和跟踪。 在下一单元中,你将了解如何完成这些任务。