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

将Azure Monitor日志配置从OpenCensus迁移至OpenTelemetry求助

从OpenCensus AzureLogHandler迁移到OpenTelemetry的等价实现

以下是对应你原有OpenCensus代码的OpenTelemetry简洁实现,完全复现自定义维度合并、日志格式化、默认属性注入等核心功能:

import logging
import os
from opentelemetry.sdk._logs import LoggerProvider
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from opentelemetry.instrumentation.logging import LoggingInstrumentor
from azure.monitor.opentelemetry.exporter import AzureMonitorLogExporter

class CustomAttributesFilter(logging.Filter):
    """Add application-wide properties to log records as OpenTelemetry attributes"""
    def __init__(self, default_attributes=None):
        self.default_attributes = default_attributes or {}

    def filter(self, record):
        # 合并全局默认属性与单条日志的custom_dimensions
        attributes = self.default_attributes.copy()
        attributes.update(getattr(record, 'custom_dimensions', {}))
        # 将属性注入日志记录,供OpenTelemetry导出时使用
        record.__dict__.update(attributes)
        return True

# 初始化Logger Provider和Azure Monitor导出器
logger_provider = LoggerProvider()
log_exporter = AzureMonitorLogExporter(
    connection_string=os.getenv("APPLICATIONINSIGHTS_CONNECTION_STRING")
)
logger_provider.add_log_record_processor(BatchLogRecordProcessor(log_exporter))

# 集成Python标准logging到OpenTelemetry,配置自定义日志格式
LoggingInstrumentor().instrument(
    logger_provider=logger_provider,
    log_format="%(user_uid)s - %(levelname)s - %(message)s"
)

# 配置Logger
logger_name = "Dealer_Portal"
logger = logging.getLogger(logger_name)

# 添加全局属性过滤器
SOURCEVERSION = os.getenv("BUILD_SOURCEVERSION")
BUILDNUMBER = os.getenv("BUILD_BUILDNUMBER")
default_attributes = {
    'source_version': SOURCEVERSION,
    'build_number': BUILDNUMBER
}
logger.addFilter(CustomAttributesFilter(default_attributes))

# 设置日志级别
logger.setLevel(logging.DEBUG)

核心对应关系说明

  • AzureMonitorLogExporter 替代原AzureLogHandler,负责将OpenTelemetry格式的日志导出到Azure Monitor。
  • CustomAttributesFilter 等价于原CustomDimensionsFilter,合并全局默认属性与单条日志的自定义维度,最终映射为Azure Monitor日志的自定义维度。
  • 日志格式化 通过LoggingInstrumentor.instrument()的log_format参数直接配置,替代原setFormatter逻辑。
  • 日志级别、Logger命名规则与原有代码保持完全一致。

注意事项

  • 确保环境变量APPLICATIONINSIGHTS_CONNECTION_STRING已正确配置(与原OpenCensus使用的连接信息一致)。
  • 若需要关联日志与追踪链路,可添加OpenTelemetry Trace Provider的初始化代码,实现端到端可观测性(可选)。

内容的提问来源于stack exchange,提问作者user26614899

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 02:46:04