从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
相关产品推荐
相关产品推荐

