OpenTelemetry 对 Application Insights 的支持和反馈

本文档概述了与 OpenTelemetry (OTel) 集成 Azure Monitor Application Insights 相关的帮助资源、支持渠道和反馈机制,适用于 .NET、Java、Node.js 和 Python 应用程序。

常见问题解答

什么是 OpenTelemetry?

它是一种新的可观测性开源标准。 有关详细信息,请参阅 OpenTelemetry

Microsoft Azure Monitor 为什么要对 OpenTelemetry 进行投资?

Microsoft 投资 OpenTelemetry 的原因如下:

  • OpenTelemetry 与供应商无关,并提供适用于多种语言的一致 API/SDK。
  • 随着时间的推移,我们相信 OpenTelemetry 将使 Azure Monitor 客户能够观察用我们支持的语言之外的语言编写的应用程序。
  • 它通过丰富的检测库扩展了你可以收集的数据类型。
  • OpenTelemetry 软件开发工具包 (SDK) 在大规模使用时往往比其前身(即 Application Insights SDK)的性能更高。
  • OpenTelemetry 还符合 Microsoft 的接纳开放源代码策略。

OpenTelemetry 的状态是什么?

请参阅 OpenTelemetry 状态

什么是 Azure Monitor OpenTelemetry 发行版?

你可以将其视为一个精简包装器,它将所有 OpenTelemetry 组件捆绑在一起,以便在 Azure 上获得一流的体验。 在 OpenTelemetry 中,此包装器也称为分发

我为什么应该使用 Azure Monitor OpenTelemetry 发行版?

使用 Azure Monitor OpenTelemetry 发行版相比于社区原生的 OpenTelemetry 有几个优势:

本着 OpenTelemetry 的精神,我们设计的发行版具有开放性和可扩展性。 例如,你可以添加:

  • 一个 OpenTelemetry 协议 (OTLP) 导出程序,同时将数据发送到第二个目标
  • 发行版中未包含的其他工具库

由于 Distro 提供 OpenTelemetry 分发,因此 Distro 支持 OpenTelemetry 所支持的任何功能。 例如,你可以添加更多遥测处理器、导出程序或检测库(如果受 OpenTelemetry 支持)。

注意

Distro 将采样器设置为用于 Application Insights 的自定义固定比率采样器。 你可以将其更改为不同的采样器,但这样做可能会禁用 Distro 包含的某些功能。 有关支持的采样器的详细信息,请参阅配置 Azure Monitor OpenTelemetry启用采样部分。

对于没有受支持独立 OpenTelemetry 导出程序的语言,目前仅支持通过 Azure Monitor OpenTelemetry Distro 方式将 OpenTelemetry 与 Azure Monitor 配合使用。 对于具有受支持独立 OpenTelemetry 导出程序的语言,可以根据遥测方案选择使用 Azure Monitor OpenTelemetry Distro 或相应的独立 OpenTelemetry 导出程序。 有关详细信息,请参阅何时应使用 Azure Monitor OpenTelemetry 导出程序?

如何测试 Azure Monitor OpenTelemetry 发行版?

请查看我们的 .NET、Java、JavaScript (Node.js) 和 Python 启用文档。

我应该使用 OpenTelemetry 还是 Application Insights SDK?

如果 Azure Monitor OpenTelemetry Distro 的功能符合你的监视需求,我们建议将其用于新项目。 OpenTelemetry 是一种行业标准框架,可增强跨平台可观测性,并提供遥测收集的标准化方法。

但是,Application Insights SDK 仍提供某些尚未在 OpenTelemetry 中完全自动化的功能,包括:

  • 自动依赖项跟踪 - OpenTelemetry 支持依赖项跟踪,但与 Application Insights SDK 中提供的自动跟踪相比,某些依赖项需要额外的配置。
  • 自定义遥测类型(例如 AvailabilityTelemetryPageViewTelemetry - OpenTelemetry)没有直接等效项。 可以通过手动检测实现类似的功能。
  • 遥测处理器和初始值设定项 - OpenTelemetry 具有处理器和跨度处理器,但在所有场景中,它们并不能完全替代 Application Insights 的遥测处理器和初始值设定项。
  • 扩展指标集合 - 虽然 OpenTelemetry 具有强大的指标系统,但 Application Insights SDK 中的一些内置指标需要在 OpenTelemetry 中手动设置。

OpenTelemetry 还优于 Application Insights SDK,包括:

  • 跨平台实现更好的标准化
  • 更广泛的检测库生态系统
  • 在数据收集和处理方面具有更大的灵活性
  • 改进了供应商中立性,但 Azure Monitor OpenTelemetry 发行版仍针对 Azure 进行了优化。

Azure Monitor 的 OpenTelemetry 集成不断发展,Microsoft继续增强其功能。 如果你正在考虑过渡,请仔细评估 OpenTelemetry 当前是否满足可观测性要求,或者 Application Insights SDK 是否仍然更适合你的需求。

何时使用 Azure Monitor OpenTelemetry 导出程序?

对于 ASP.NET Core、Java、Node.js 和 Python,建议使用 Azure Monitor OpenTelemetry Distro。 只需一行代码即可开始。

对于所有其他 .NET 方案(包括经典 ASP.NET、控制台应用、Windows 窗体 (WinForms) 等),建议使用 .NET Azure Monitor OpenTelemetry 导出程序:Azure.Monitor.OpenTelemetry.Exporter

对于需要高级配置的更复杂的 Python 遥测方案,我们建议使用 Python Azure Monitor OpenTelemetry 导出程序

Azure Monitor OpenTelemetry 发行版中功能的当前发布状态是什么?

以下图表划分了每种语言的 OpenTelemetry 功能支持。

功能 .NET Node.js Python Java
分布式跟踪
自定义指标
标准指标
固定速率采样
脱机存储和自动重试
异常报告
日志收集 ⚠️
自定义事件 ⚠️ ⚠️ ⚠️
实时指标
实时指标筛选
检测 VM/VMSS 和应用程序服务的资源上下文
检测 Azure Kubernetes 服务 (AKS) 和函数的资源上下文
使用跟踪可用性 API 生成的可用性测试事件
按匿名用户 ID 和综合源筛选请求、依赖项、日志和异常
按操作名称筛选依赖项、日志和异常
自适应采样
.NET Profiler ⚠️ ⚠️
Snapshot Debugger

要点

OpenTelemetry 能否用于 Web 浏览器?

可以,但我们不建议使用它,Azure 不支持它。 OpenTelemetry JavaScript 针对 Node.js 进行了深度优化。 相反,我们建议使用 Application Insights JavaScript SDK。

何时可以在 Web 浏览器中使用 OpenTelemetry SDK?

OpenTelemetry Web SDK 没有确定的可用性时间线。 我们可能还需要几年的时间,才能开发出可以替代 Application Insights JavaScript SDK 的浏览器 SDK。

今天能否在 Web 浏览器中测试 OpenTelemetry?

OpenTelemetry Web 沙盒 是一个分支,旨在使 OpenTelemetry 在浏览器中运行。 目前无法将遥测数据发送到 Application Insights。 SDK 不定义常规客户端事件。

是否支持将 Application Insights 与 AppDynamics、DataDog 和 NewRelic 等竞争对手代理一起运行?

我们不打算对这种做法进行测试或提供支持,不过,我们的分发版允许同时导出到 OTLP 终结点和 Azure Monitor。

是否可以在生产环境中使用预览功能?

但我们不建议这样做。 请参阅 Microsoft Azure 预览版补充使用条款

手动和自动仪器之间有何区别?

请参阅 OpenTelemetry 概述

是否可以使用 OpenTelemetry 收集器?

某些客户使用 OpenTelemetry-Collector 作为代理替代方案,尽管 Microsoft 尚不正式支持使用基于代理的方法进行应用程序监视。 与此同时,开源社区贡献了一个 OpenTelemetry-Collector Azure Monitor 导出器,某些客户正在使用它向 Azure Monitor Application Insights 发送数据。 Microsoft 对此不支持。

OpenCensus 和 OpenTelemetry 之间有何区别?

OpenCensusOpenTelemetry 的前身。 Microsoft 帮助整合 OpenTracing 和 OpenCensus 用于创建 OpenTelemetry,OpenTelemetry 是全球唯一的可观测性标准。 Azure Monitor 当前推荐用于生产环境的 Python SDK 基于 OpenCensus。 Microsoft 致力于基于 OpenTelemetry 创建 Azure Monitor。

Grafana 中为何会出现 Status: 500. Can't visualize trace events using the trace visualizer

你可能正在尝试可视化原始文本日志而不是 OpenTelemetry 跟踪。

在 Application Insights 中,“跟踪”表存储的是用于诊断目的的原始文本日志。 这些日志用于帮助识别和关联与用户请求、其他事件和异常报告关联的跟踪。 不过,在 Grafana 等可视化工具中,“Traces”表不直接用于端到端事务视图(瀑布图)。

随着云原生实践的日益普及,遥测数据收集和术语也在不断演变。 OpenTelemetry 已成为收集和检测遥测数据的标准。 在这种背景下,“痕迹”一词有了新的含义。 在 OpenTelemetry 中,“Traces”不是原始日志,而是一种更丰富、结构化的遥测数据形式,其中包含表示各个工作单元的跨度。 这些范围对于构造详细事务视图至关重要,让你可以更好地监视和诊断云原生应用程序。

应如何监测 Blazor 应用?

若要检测 Blazor 应用,请先标识托管模型。 Blazor Server 支持基于 OpenTelemetry 的完整检测。 Blazor WebAssembly 在浏览器中运行,并支持通过 JavaScript 进行有限的检测。

故障排除

支持

选择所选语言的选项卡,以发现支持选项。

OpenTelemetry 反馈

若要提供反馈,请查看以下内容: