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

