.NET 中的遥测 API
如何调查应用的行为进行故障排除或性能优化? 有关应用所执行操作的数据越多,诊断问题就越容易。
假设你是一家户外装备零售商的员工。 你所在的团队正在构建微服务,供测试阶段使用。 你需要确保云原生应用发出有关其行为的遥测数据,以便在测试、暂存和生产阶段诊断问题。
在本单元中,你将了解什么是遥测,以及可以使用它来记录哪些不同类型的数据。
什么是遥测?
在工程中,遥测是指测量数据并自动将数据传输到中央系统进行监视的过程。 例如,赛车可以记录有关其性能的数据,并将其发送回车队,供工程师分析。 同样,太空舱可能会记录舱内的条件信息,并将其发送回任务控制中心。 近年来,将遥测数据记录和分析应用于更常见的系统已经变得很普遍。 例如,中央供暖系统可能会向制造商发送遥测数据,以协助故障排除。
如果要编写云原生应用,遥测在以下情况下会很有帮助:
- 你正在开发微服务,需要知道它们是否按预期方式运行。
- 你正在测试应用,需要知道在测试失败时会发生什么情况。
- 你正在暂存应用,需要知道它们的表现。
- 你正在支持在生产环境中使用应用,需要对异常情况进行故障排除或优化性能。
我们可以将发出丰富遥测数据的系统描述为:
- 可观测:可观测的系统是指你能够从系统外部理解其行为的系统。
- 已检测:已检测的系统是指发出开发人员排查问题所需的所有数据的系统。
OpenTelemetry 是一个可观测性框架和工具包,可在应用中用于创建、处理和发出遥测数据。 可以轻松地将它添加到任何 .NET 应用程序,包括云原生应用中的微服务。 它以常见的可观测性工具(如 Jaeger 和 Prometheus)能够使用和分析的形式发出数据。
可观测性的支柱
云原生应用的性质(由使用不同技术的分布式微服务组成)可能会使生成可观测且经过正确检测的代码变得困难。 所有团队都必须将可观测性集成到其微服务中,否则你可能会发现应用的某些部分很难监视和排查故障。
重要
为了确保整个应用是可观测的,应该确保所有开发团队在其微服务中考虑到可观测性的三大支柱:日志记录、指标和跟踪。
可观测性的三大支柱是三种不同类型的记录,用于存储软件集成行为以供后续分析:
- 日志:请求处理过程中发生的事件的时间戳文本记录。
- 指标:在运行时捕获的服务的度量。 指标值可以聚合到有关进程的统计信息中,包括:
- .NET 运行时统计信息,例如使用的内存,或发生的垃圾回收次数。
- ASP.NET 或 NuGet 包统计信息,例如已完成请求的数量、请求持续时间或错误计数。
- 特定于应用的自定义统计信息,如下单数量。
- 分布式跟踪:处理单个请求所需的所有工作单元的记录,通常称为“跨度”。 在云原生应用中,单个请求中可能涉及许多微服务和后备服务,分布式跟踪会在它们协作准备响应时显示所有这些服务。
注意
在 OpenTelemetry 中,除了分布式跟踪或指标之外的任何数据都被视为日志,例如事件。
在 .NET 中使用遥测
.NET 内置了表示三个支柱的类型:
- ILogger:此接口提供了一个标准接口,可以使用它来记录来自任何 .NET 代码的事件。
- 计量:可以使用此类创建一组检测,每个检测都度量与代码的性能或行为关联的值。 例如,可以添加一个检测来计算产品销售额,或添加另一个检测来度量消息在队列中等待的时长。 .NET 还提供了许多内置指标。
- 活动:可以使用此类记录跟踪信息。 首先,为命名空间创建
ActivitySource
对象。 然后,调用StartActivity
方法开始记录数据。
可以在任何 .NET 代码中使用这些类。 在下一单元中,你将了解 .NET Aspire 如何使在云原生应用中使用 OpenTelemetry 类变得更加容易。