你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 OpenTelemetry 协议(OTLP)有限预览版监视 AKS 应用程序

OpenTelemetry 提供了一种标准化的方式来发出跟踪、日志和指标。 Azure Monitor 使用 OpenTelemetry 协议(OTLP)进行检测和数据收集,为监视在 Azure Kubernetes 服务(AKS)上运行的应用程序添加了 有限预览 版支持。

重要

此功能是 有限的预览版。 预览版功能在没有服务级别协议的情况下提供,不建议用于生产工作负荷。

有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

关键功能:

  • 启用群集级监视以在 AKS 群集上安装 Azure Monitor 组件。
  • 创建启用了 OTLP 引入的 Application Insights 资源。
  • 使用以下任一方法在命名空间或部署范围内载入应用程序:
    • 使用 Azure Monitor OpenTelemetry 分发的自动检测工具
    • 已使用开源 OpenTelemetry 软件开发工具包(SDK)已实现的应用程序的自动配置

遥测流向 Application Insights,可在其中使用 Container Insights 分析应用程序性能。

重要

  • 不支持的节点池: Windows(任何体系结构)Linux Arm64。 预览功能在提供时没有附带服务级别协议,不建议用于生产工作负载。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

先决条件

  • 在 Azure 公有云中运行至少一个 Kubernetes 部署的 AKS 集群。
  • Azure CLI 2.78.0 或更高版本。 使用 安装 Azure CLI 文档中的指南来安装或更新。
    验证版本:
    az version
    
  • aks-preview Azure CLI 扩展:
    az extension add --name aks-preview
    az extension update --name aks-preview
    

注释

Azure Kubernetes 服务(AKS)预览 API 旨在让你在新功能正式发布之前测试和提供有关新功能的反馈。 必须先安装此 AKS-preview,然后才能注册 AzureMonitorAppMonitoringPreview 功能标志。

1.注册预览功能

  1. 登录并选择目标订阅:

    az login
    az account set --subscription "<subscription-name>"
    
  2. 注册 AKS 预览功能和服务提供商:

    az feature register --namespace "Microsoft.ContainerService" --name "AzureMonitorAppMonitoringPreview"
    az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/AzureMonitorAppMonitoringPreview')].{Name:name,State:properties.state}"
    az provider register --namespace "Microsoft.ContainerService"
    az provider show --namespace "Microsoft.ContainerService" --query "registrationState"
    
  3. 注册 Application Insights OTLP 预览功能和提供者。

    az feature register --name OtlpApplicationInsights --namespace Microsoft.Insights
    az feature list -o table --query "[?contains(name, 'Microsoft.Insights/OtlpApplicationInsights')].{Name:name,State:properties.state}"
    
    az provider register -n Microsoft.Insights
    

2.准备群集

  1. 确保群集已载入 Azure Monitor 指标和日志。 使用 Azure Monitor 中的 为 AKS 群集启用监控(尚不需要 Application Insights)。
  2. 在 Azure 门户中,打开“AKS 监视器 ”窗格,然后 打开“监视设置”。
    启用 “启用应用程序监视 ”,然后选择“ 查看 + 启用”。

如果尚未将群集纳入系统,可以同时启用托管 Prometheus、容器日志和应用程序监控。

Azure 设置页的屏幕截图,其中显示了“启用应用程序”选项。

Azure 设置评审页的屏幕截图,其中显示了“启用应用程序”选项。

创建支持 OTLP 的 Application Insights 资源

创建或选择一个支持 OTLP 且使用托管工作区的 Application Insights 资源。

  1. 在 Azure 门户中,创建新的 Application Insights 资源。
  2. 开启OTLP 支持功能(预览版)
  3. “使用托管工作区 ”设置为 “是”。

“创建 Application Insights 资源”的屏幕截图,其中选择了“启用”选项。

重要

  • 使用与步骤 2 中用于基础架构指标的工作区不同的 Azure Monitor 工作区
  • 托管工作区会为 Application Insights 应用程序遥测创建一个单独的 Azure Monitor 工作区;使用与基础架构指标不同的工作区。

4.将应用程序加入 Application Insights

可以在 命名空间中载入所有部署 ,或稍后针对 单个部署

4.1 打开命名空间

  1. 在 AKS 资源中,展开 Kubernetes 资源
  2. 打开 命名空间,然后选择托管工作负荷的命名空间。

Kubernetes 资源下的 Azure 命名空间列表的屏幕截图。

4.2 配置应用程序监视(预览版)

  1. 选择“应用程序监视”(预览版)。

  2. 选择已启用 OTLP 的 Application Insights 资源,该资源是在 上一步中创建的。 如果使用“新建”选项选择或按需创建不带 OTLP 的 Application Insights 资源,则下一步中使用的检测类型选项将不可见。

  3. 选择 仪器类型

    • 适用于支持的语言 Java 和 Node.js 的自动检测工具
    • 适用于已集成 OpenTelemetry SDK 的应用程序的自动配置工具

    注释

  4. 选择适用于命名空间 的应用程序语言

  5. 不要勾选“对所有部署执行逐个重启”。 在下一步中手动执行重启。

  6. 选择配置

具有资源和语言选择的应用程序的配置窗格的屏幕截图。

4.3 重启部署以应用更改

通过门户或终端运行命令,对目标命名空间中的部署执行逐个重启

kubectl rollout restart deployment -n <your-namespace>

Azure 运行命令屏幕中显示部署重启命令的屏幕截图。

4.4 确认仪器化状态

返回到命名空间的应用监视(预览版)。 展开“此命名空间中的部署”,并确认部署显示为“已检测”状态

显示已检测状态的应用程序部署列表的屏幕截图。

小窍门

几分钟后,遥测数据将显示在连接的 Application Insights 资源中。

5.在容器见解中查看应用程序信号

使用 Container Insights 探索群集上下文中的应用程序性能。 在 AKS 资源的监视器中,打开控制器,然后选择一个控制器来查看请求失败、操作缓慢和建议的调查。

显示性能指标的控制器视图的屏幕截图。

显示失败请求的控制器视图的屏幕截图。

若要向下钻取到 Container Insights,请在应用程序映射中选择一个应用程序组件节点。

选择节点,然后在 AKS 监视磁贴中“检查 Pod”

高级入职培训(自定义资源)

如果需要更多控制,请使用 Kubernetes 自定义资源。 此处提供了完整的说明。

自动化检测(Java,Node.js)

按照前面链接的文章中的“命名空间范围”或“按部署”的引入指南,将 Azure Monitor OpenTelemetry 发行版注入到 pod 中

自动配置(已经使用 OpenTelemetry SDK 进行检测的应用)

自动配置设置环境变量,以便现有 SDK 通过群集上的 Azure Monitor 代理将遥测数据导出到 Application Insights。 它不会在 Pod 上放置任何 SDK。

  • 命名空间范围:使用空的平台列表设置检测自定义资源
    spec:
      settings:
        autoInstrumentationPlatforms: []
    
  • 按部署:将注释添加到部署并引用你的检测自定义资源(将 替换为你的资源名称)cr1
    metadata:
      annotations:
        instrumentation.opentelemetry.io/inject-configuration: "cr1"
    

使用 inject-configuration 批注时,将忽略引用的自定义资源的 spec.settings.autoInstrumentationPlatforms 设置,并将部署配置为将 OTLP 数据发送到在 applicationInsightsConnectionString 中定义的连接字符串。 使用批注值 "false" 从自动配置中排除部署:

metadata:
  annotations:
    instrumentation.opentelemetry.io/inject-configuration: "false"

已知的限制

限制

  • 仅接受OTLP/HTTP二进制 Protobuf。 不支持 JSON 有效负载和 OTLP/gRPC 。 相应地配置 OTLP 导出程序。
  • 每个 AKS 群集最多支持 30 个数据收集规则(DCR)关联。
  • 日志和跟踪的测试规模是每秒 50,000 个事件(EPS)。 对于此功能,每个群集大约需要 250 MiB 额外的内存使用量和 0.5 个 vCPU

不支持的方案

  • OpenTelemetry SDK 导出器中的压缩。
  • 启用了 Istio 相互 TLS (mTLS) 的命名空间。
  • 监测工具配置中的 HTTPS 终结点。

未验证的方案

  • 使用 HTTP 代理的 AKS 群集。
  • 使用专用链接的 AKS 群集。
  • AKS 双堆栈群集。

后续步骤

Support

如果本文中的文档和步骤无法解决问题,请向 otel@microsoft.comAzure Monitor OpenTelemetry 团队发送电子邮件。