You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从OpenCensus迁移至OpenTelemetry:Azure Insights指标分类配置问题

解决OpenTelemetry指标无法归类到指定Azure App Insights类别的问题

问题根源

你的指标默认归入azure.applicationinsights是因为没有给指标绑定指定类别属性,且之前的View配置存在格式或匹配错误。以下是修正后的完整实现:

修正代码

from opentelemetry import metrics
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.metrics.view import View
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
from azure.monitor.opentelemetry.exporter import AzureMonitorMetricExporter
import os
import logging

# 确保vm_number是字符串类型,避免instrument名称报错
vm_number = "vm0_unhealthy"  # 替换为你的实际vm编号,必须是字符串

# 配置View:匹配目标计数器,确保category属性被正确处理
view = View(
    instrument_name=vm_number,
    attribute_keys=["category"]
)

# 初始化导出器与指标读取器
exporter = AzureMonitorMetricExporter.from_connection_string(
    os.environ["APPLICATIONINSIGHTS_CONNECTION_STRING"]
)
metric_reader = PeriodicExportingMetricReader(exporter)

# 绑定View与导出器到MeterProvider,这是View生效的关键
meter_provider = MeterProvider(
    views=[view],
    metric_readers=[metric_reader]
)
metrics.set_meter_provider(meter_provider)

# 创建计数器并添加带指定类别的指标
meter = metrics.get_meter_provider().get_meter("view-name-change")
counter = meter.create_counter(vm_number)

logging.info(f"Emitting metric for {vm_number}: 1")
# 显式传入category属性,指定目标类别
counter.add(1, attributes={"category": "vm0_unhealthy"})

关键注意事项

  • Instrument名称类型:create_counter的参数必须是字符串,若你的vm_number是数字类型,先通过str(vm_number)转换,否则会触发字符串类型错误。
  • View的正确绑定:必须将View实例传入MeterProvider的views参数,且instrument_name要和计数器名称完全匹配,否则View不会生效。
  • 属性传递:Azure Monitor导出器会将category属性映射为指标的类别分组,所以在counter.add()时必须显式传入该属性。

内容的提问来源于stack exchange,提问作者Stuart.Sklinar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 05:40:12