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

配置 OpenTelemetry 数据流终结点(预览版)

重要

本页包含使用 Kubernetes 部署清单(目前为预览版)管理 Azure IoT 操作组件的说明。 此功能提供 多个限制,不应用于生产工作负荷。

有关适用于 Beta 版、预览版或尚未正式发布的 Azure 功能的法律条款,请参阅 适用于 Microsoft azure 预览版的补充使用条款

OpenTelemetry 数据流终结点用于将指标和日志发送到 OpenTelemetry 收集器,然后可将数据转发到 Grafana 仪表板和 Azure Monitor 等可观测性平台。 可以配置终结点设置、身份验证、传输层安全性 (TLS) 和批处理选项。

先决条件

  • Azure IoT 操作的实例
  • 已部署且可从 Azure IoT 操作群集访问的 OpenTelemetry 收集器

OpenTelemetry 终结点概述

通过 OpenTelemetry 终结点,可以使用 OpenTelemetry 协议 (OTLP) 将遥测数据从 Azure IoT 操作数据流导出到 OpenTelemetry 收集器。 这样,就可以将设备和系统遥测数据集成到现有的可观测性基础结构中。

常见应用场景

  • 设备诊断:将温度、压力和其他传感器读数导出为用于监视设备运行状况的指标
  • 工厂监视:将生产线遥测数据发送到 Grafana 仪表板,以获取作可见性
  • 系统可观测性:将应用程序日志和指标转发到 Azure Monitor 进行集中监视
  • 自定义指标:向指标添加上下文属性(如工厂 ID 或位置)以更好地筛选和分析

数据格式要求

OpenTelemetry 终结点要求数据符合具有 metrics 数组和/或 logs 数组的特定 JSON 架构。 不符合此架构的消息会被删除并返回确认,以防止消息丢失。

JSON 有效负载必须使用此顶级结构:

{
  "metrics": [ /* array of metric objects */ ],
  "logs": [ /* array of log objects */ ]
}

必须至少存在一个 metricslogs

所有传入消息都根据所需的架构进行验证。 验证失败的消息会被删除,向代理返回确认信息,并记录日志以进行故障排除。 常见的验证失败包括缺少必填字段、数据类型无效、指标类型或日志级别不受支持,以及时间戳格式不正确。 如果 MQTT 消息包含过期时间戳,则处理前会筛选出过期的消息。

指标格式

metrics 数组中的每个指标对象都必须包含以下字段:

必填字段:

  • name(字符串):指标名称
  • type(字符串):指标类型(请参阅支持的指标类型
  • value(数字):指标的数值

可选字段:

  • description(字符串):指标的用户可读说明
  • timestamp(数字):记录指标时 Unix 纪元时间戳(以纳秒为单位)
  • attributes(数组):指标标记和筛选的键值对
{
  "metrics": [
    {
      "name": "temperature",
      "description": "The temperature reading from sensor",
      "type": "f64_gauge",
      "value": 72.5,
      "timestamp": 1754851200000000000,
      "attributes": [
        {
          "key": "factoryId",
          "value": "factory1"
        },
        {
          "key": "location",
          "value": "warehouse"
        }
      ]
    }
  ]
}

attributes 数组中的每个属性都必须具有:

  • key(字符串):属性名称
  • value(字符串):属性值(必须是字符串)

日志格式

logs 数组中的每个日志对象都必须包含以下字段:

必填字段:

  • value(字符串):记录消息内容
  • level(字符串):日志级别(请参阅支持的日志级别

可选字段:

  • timestamp(数字):记录日志时的 Unix 纪元时间戳(以纳秒为单位)
  • attributes(数组):用于日志上下文和筛选的键值对
{
  "logs": [
    {
      "value": "Device temperature sensor initialized",
      "level": "info",
      "timestamp": 1754851200000000000,
      "attributes": [
        {
          "key": "deviceId",
          "value": "sensor001"
        },
        {
          "key": "component",
          "value": "temperature-sensor"
        }
      ]
    }
  ]
}

attributes 数组中的每个属性都必须具有:

  • key(字符串):属性名称
  • value(字符串):属性值(必须是字符串)

支持的指标类型

支持以下 OpenTelemetry 指标类型:

  • 计数器:u64_counterf64_counter - 单调递增值
  • 向上/向下计数器:i64_up_down_counterf64_up_down_counter - 可增加或减少的值
  • 仪表:u64_gaugei64_gaugef64_gauge - 时间点值
  • 直方图:f64_histogramu64_histogram - 值的分布

支持的日志级别

支持以下日志级别:

  • trace
  • debug
  • info
  • warn
  • error
  • fatal

创建 OpenTelemetry 终结点

可以使用运维体验、Bicep 或 Kubernetes 来创建 OpenTelemetry 数据流终结点。

  1. 若要在 运营体验中创建 OpenTelemetry 数据流,请转到 数据流终端

  2. 在数据流终结点页中,标识 “打开遥测 ”并选择“ + 新建”。

    操作体验界面的屏幕截图,显示了创建新 OpenTelemetry 终结点的选项

  3. 在“ 创建新数据流终结点:打开遥测 ”窗格中,选择“ 基本 配置”选项卡并提供以下信息:

    • 名称:终结点的唯一名称。
    • 主机<host>:<port> 格式的 OpenTelemetry 收集器终结点,例如 otel-collector.monitoring.svc.cluster.local:4317
    • 身份验证方法:选择以下身份验证方法之一:
      • Kubernetes 服务帐户令牌:使用 Kubernetes 服务帐户令牌通过 OpenTelemetry collector 进行身份验证。 为 OpenTelemetry 收集器配置提供受众值。 有关更多详细信息 ,请参阅服务帐户令牌(SAT )。
      • 匿名:当 OpenTelemetry 收集器不需要身份验证时使用。
      • X509 证书:使用客户端证书进行相互 TLS 身份验证。 提供包含客户端证书的 Kubernetes 机密的名称。 有关更多详细信息,请参阅 X.509 证书

    显示操作体验界面的屏幕截图,其中显示了新建 OpenTelemetry 终结点时的“基本信息”选项卡。

  4. 选择 “高级 配置”选项卡并提供以下信息:

    • 批处理延迟(以秒为单位):发送批处理之前等待的最大时间。 默认值为 5 秒。
    • 消息计数:批中消息的最大数量。 默认值为 100000 条消息。
    • TLS 模式:选择以下 TLS 模式之一:
      • 已启用:启用 TLS 以便与 OpenTelemetry 收集器进行安全通信。 提供包含受信任 CA 证书的 Kubernetes ConfigMap 的名称。
      • 已禁用:禁用 TLS。
    • 受信任的 CA 证书配置映射名称:包含受信任 CA 证书的 Kubernetes ConfigMap 的名称。

    操作体验界面的屏幕截图,其中显示了创建新 OpenTelemetry 终端中的高级选项卡。

  5. 选择 “应用” 以创建 OpenTelemetry 终结点。

配置选项

本部分介绍 OpenTelemetry 数据流终结点的配置选项。

主机

host 属性指定 OpenTelemetry 收集器终结点 URL。 包括协议(http://https://)和端口号。

例子:

  • https://otel-collector.monitoring.svc.cluster.local:4317
  • http://localhost:4317
  • https://otel-collector:4317

身份验证

OpenTelemetry 终结点支持多种身份验证方法,以便安全地连接到收集器。

服务帐户令牌 (SAT)

服务帐户令牌 (SAT) 身份验证使用 Kubernetes 服务帐户令牌向 OpenTelemetry 收集器进行身份验证。

<OTEL_AUDIENCE> 替换为 OpenTelemetry 收集器配置的受众值。 此值必须与收集器上的预期受众匹配。

  1. 在“ 创建新数据流终结点:打开遥测 ”窗格的“ 基本 配置”选项卡下,选择 Kubernetes 服务帐户令牌 作为身份验证方法。

  2. 为 OpenTelemetry 收集器配置提供 服务受众 值。

    操作体验界面的屏幕截图,其中显示了在创建新的 OpenTelemetry 终结点时的身份验证方法选择。

重要

只能在创建新的 OpenTelemetry 数据流终结点时选择身份验证方法。 创建 OpenTelemetry 数据流终结点后,无法更改身份验证方法。 如果要更改现有数据流的身份验证方法,请删除原始数据流,并使用新的身份验证方法创建新的数据流。

X.509 证书

X.509 证书身份验证使用客户端证书进行相互 TLS 身份验证。

  1. 在“ 创建新数据流终结点:打开遥测 ”窗格的“ 基本 配置”选项卡下,选择 X509 证书 作为身份验证方法。

  2. 从 Azure Key Vault 提供以下信息:

    • 同步的机密名称:包含客户端证书的 Kubernetes 机密的名称。
    • X509 客户端证书:客户端证书。
    • X509 客户端密钥:客户端证书的私钥。
    • X509 中间证书:客户端证书链的中间证书。

    操作体验界面的屏幕截图,其中显示了在创建新的 OpenTelemetry 终结点时选择 X509 身份验证方法。

在使用 X.509 证书身份验证之前,请使用客户端证书创建 Kubernetes 机密:

kubectl create secret tls <X509_SECRET_NAME> \
  --cert=client.crt \
  --key=client.key \
  -n azure-iot-operations

匿名身份验证

OpenTelemetry 收集器不需要身份验证时,将使用匿名身份验证。

在“ 创建新数据流终结点:打开遥测 ”窗格的“ 基本 配置”选项卡下,选择“ 匿名 ”作为身份验证方法。 无需其他设置。

TLS 配置

配置传输层安全性 (TLS) 设置,以便与 OpenTelemetry 收集器进行安全通信。

已启用具有受信任 CA 的 TLS

  1. 在“ 创建新数据流终结点:打开遥测 ”窗格的“ 高级 配置”选项卡下,选择“ 已启用” 作为 TLS 模式。
  2. 受信任的 CA 证书配置映射名称 中,提供包含受信任 CA 证书的 Kubernetes ConfigMap 的名称。

禁用的 TLS

在“ 创建新数据流终结点:打开遥测 ”窗格的“ 高级 配置”选项卡下,选择 “已禁用” 作为 TLS 模式。

批处理

配置批处理设置,以便通过在发送到收集器之前对多个消息进行分组来优化性能。

在“ 创建新数据流终结点:打开遥测 ”窗格的“ 高级 配置”选项卡下,提供以下批处理设置:

  • 批处理延迟(以秒为单位):发送批处理之前等待的最大时间。 默认值为 5 秒。
  • 消息计数:批中消息的最大数量。 默认值为 100000 条消息。

错误处理和故障排除

消息验证

OpenTelemetry 终结点根据所需的架构验证传入消息。 无效消息会被删除并确认,以防止数据流管道中的消息丢失。

常见验证错误:

  • 缺少必填字段(对于指标来说缺少 nametypevalue;对于日志来说缺少 valuelevel
  • 指标类型或日志级别无效
  • 指标 value 字段中的非数值
  • 时间戳值格式不正确

传递保证

OpenTelemetry 终结点向收集器本身提供传递保证,但不向收集器可将数据转发到的上游服务提供传递保证。 数据到达收集器后,Azure IoT 操作无法查看它是否到达最终目标。