为 Azure Monitor OpenTelemetry 配置自动数据收集和资源检测器

本指南介绍了 Azure Monitor OpenTelemetry 如何自动收集遥测数据、如何添加社区仪器库,以及如何配置资源检测器以使用一致的元数据丰富这些遥测数据。 你了解默认收集哪些信号,以及资源检测器如何填充服务标识和环境详细信息等属性,以便 Application Insights 数据更易于筛选、关联和排查 .NET、Java、Node.js和 Python 应用程序。

本指南提供有关在 Azure Monitor Application Insights 中集成和自定义 OpenTelemetry (OTel) 仪表的说明。

若要了解有关 OpenTelemetry 概念的详细信息,请参阅 OpenTelemetry 概述OpenTelemetry 常见问题解答

注释

有关 Azure Function Apps,请参阅 将 OpenTelemetry 与 Azure Functions 配合使用

自动数据收集

发行版通过捆绑 OpenTelemetry 检测库来自动收集数据。

包含的检测库

请求

依赖

日志记录

  • ILogger

若要减少或增加发送到 Azure Monitor 的日志数,请配置日志记录以设置相应的日志级别或应用筛选器。 例如,您可以选择仅将 WarningError 日志发送到 OpenTelemetry/Azure Monitor。 OpenTelemetry 不负责控制日志路由或筛选——这些决策由您的 ILogger 配置来决定。 有关配置 ILogger的详细信息,请参阅 “配置日志记录”。

有关 ILogger 的详细信息,请参阅 在 C# 和 .NET 中的日志记录 以及 代码示例

脚注

  • ¹:支持未经处理的/未捕获的异常的自动报告
  • ²:支持 OpenTelemetry 指标

注释

Azure Monitor OpenTelemetry 发行版包含专用映射和逻辑,以自动生成 Application Insights 标准指标

小窍门

所有 OpenTelemetry 指标,无论是从仪器化库自动收集的还是从手动编码中收集的,现在都被认为是用于计费目的的 Application Insights“自定义指标”。 了解详细信息

添加社区工具库

当您使用 OpenTelemetry 社区的工具库时,可以自动收集更多数据。

注意

我们不支持也不保证社区检测库的质量。 要为我们的发行版推荐一个,请在反馈社区中发帖或投票。 请注意,某些检测基于实验性的 OpenTelemetry 规范,未来可能会引入中断性变更。

若要添加社区库,请在为库添加 NuGet 包后使用 ConfigureOpenTelemetryMeterProviderConfigureOpenTelemetryTracerProvider 方法。

以下示例演示如何添加 运行时检测 以收集额外的指标:

dotnet add package OpenTelemetry.Instrumentation.Runtime 
// Create a new ASP.NET Core web application builder.
var builder = WebApplication.CreateBuilder(args);

// Configure the OpenTelemetry meter provider to add runtime instrumentation.
builder.Services.ConfigureOpenTelemetryMeterProvider((sp, builder) => builder.AddRuntimeInstrumentation());

// Add the Azure Monitor telemetry service to the application.
// This service will collect and send telemetry data to Azure Monitor.
builder.Services.AddOpenTelemetry().UseAzureMonitor();

// Build the ASP.NET Core web application.
var app = builder.Build();

// Start the ASP.NET Core web application.
app.Run();

资源检测器

资源检测器在启动时发现环境元数据,并填充 OpenTelemetry 资源属性 ,例如 service.namecloud.providercloud.resource_id。 此元数据为 Application Insights 中的体验提供支持,例如应用程序映射和计算链接,并改进了跟踪、指标和日志之间的关联。

小窍门

资源属性描述过程及其环境。 Span 属性描述单个操作。 将资源属性用于应用级属性,例如 service.name

支持的环境

环境 检测的工作原理 备注
Azure App 服务 语言 SDK 或 Azure Monitor 发行版会读取已知的 App Service 环境变量和主机元数据 使用本文中的指南时,请与 .NET、Java、Node.js和 Python 配合使用。
Azure Functions 请参阅 Azure Functions OpenTelemetry 指南 所有 Azure Functions 指南都位于该处。
Azure 虚拟机 语言软件开发工具包或发行版会查询Azure实例元数据服务 确保 VM 能够访问实例元数据服务终结点。
Azure Kubernetes Service (AKS) 使用 OpenTelemetry 收集器 k8sattributes 处理器来添加 Kubernetes 元数据 建议用于 AKS 中运行的所有语言。
Azure 容器应用 检测器在可用时映射环境变量和资源标识符 您还可以设置OTEL_RESOURCE_ATTRIBUTES以填补空白。

手动和自动仪器

  • 在受支持的 Azure 环境中运行时,自动化工具和 Azure Monitor 发行版启用资源检测功能。

  • 对于手动设置,可以使用标准 OpenTelemetry 选项直接设置资源属性:

    # Applies to .NET (ASP.NET/ASP.NET Core), Java, Node.js, and Python
    export OTEL_SERVICE_NAME="my-service"
    export OTEL_RESOURCE_ATTRIBUTES="cloud.provider=azure,cloud.region=chinanorth,cloud.resource_id=/subscriptions/<SUB>/resourceGroups/<RG>/providers/Microsoft.Web/sites/<APP>"
    

    在 Windows PowerShell 上:

    $Env:OTEL_SERVICE_NAME="my-service"
    $Env:OTEL_RESOURCE_ATTRIBUTES="cloud.provider=azure,cloud.region=chinanorth,cloud.resource_id=/subscriptions/<SUB>/resourceGroups/<RG>/providers/Microsoft.Web/sites/<APP>"
    

OTLP 引入注意事项

  • Application Insights 使用 service.name 来派生云角色名称。 选择每个服务的稳定名称以避免应用程序映射中的碎片节点。

  • cloud.resource_id 改进了与 Azure 资源的计算链接。 如果缺少此属性,某些体验可能不会显示生成数据的 Azure 资源。

后续步骤