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

Python项目从OpenCensus迁移至OpenTelemetry对接Azure App Insights日志

从OpenCensus迁移至OpenTelemetry对接Azure Application Insights的日志方案

核心替代方案:OpenTelemetry日志集成+Azure导出器

无需寻找直接对标AzureLogHandler的组件,通过OpenTelemetry的标准日志桥接机制+Azure专属导出器,就能实现和OpenCensus完全等效的日志上报能力,且符合官方推荐的迁移路径。

步骤1:安装必要依赖

pip install opentelemetry-api opentelemetry-sdk opentelemetry-exporter-azure-monitor-opentelemetry

步骤2:替换dictConfig中的Handler配置

保留原有StreamHandler的基础上,用OpenTelemetry的日志处理组件替换OpenCensus的AzureLogHandler,有两种常用配置模式:

模式A:桥接Python标准日志到OpenTelemetry

这种方式会自动将所有通过logging模块输出的日志转发到OpenTelemetry,再导出到Azure Application Insights,完全兼容原有日志代码:

import logging
import logging.config
from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from opentelemetry.exporter.azure.monitor import AzureMonitorLogExporter
from opentelemetry.sdk.resources import Resource

# 初始化OpenTelemetry资源(用于标识服务,可选)
resource = Resource(attributes={
    "service.name": "你的服务名称",
    "service.environment": "生产/测试环境标识"
})

# 创建LoggerProvider和Azure导出器
logger_provider = LoggerProvider(resource=resource)
azure_exporter = AzureMonitorLogExporter(
    connection_string="你的Application Insights连接字符串"
)

# 添加批量日志处理器(和OpenCensus的批量上报逻辑一致)
logger_provider.add_log_record_processor(BatchLogRecordProcessor(azure_exporter))

# 初始化OpenTelemetry日志Handler
otel_log_handler = LoggingHandler(logger_provider=logger_provider)

# 加载dictConfig,保留原有StreamHandler并添加otel_handler
logging.config.dictConfig({
    "version": 1,
    "disable_existing_loggers": False,
    "handlers": {
        "stream": {
            "class": "logging.StreamHandler",
            "formatter": "standard"
        },
        "otel_azure": {
            "()": lambda: otel_log_handler,  # 注入已初始化的OpenTelemetry Handler
        }
    },
    "formatters": {
        "standard": {
            "format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
        }
    },
    "root": {
        "handlers": ["stream", "otel_azure"],
        "level": "INFO"
    }
})

模式B:直接使用OpenTelemetry原生Logger

如果不需要兼容原有logging代码,也可以直接使用OpenTelemetry的原生Logger,日志会直接上报到Azure:

from opentelemetry.sdk._logs import LoggerProvider
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from opentelemetry.exporter.azure.monitor import AzureMonitorLogExporter
from opentelemetry.sdk.resources import Resource

resource = Resource(attributes={"service.name": "你的服务名称"})
logger_provider = LoggerProvider(resource=resource)
azure_exporter = AzureMonitorLogExporter(connection_string="你的连接字符串")
logger_provider.add_log_record_processor(BatchLogRecordProcessor(azure_exporter))

# 获取原生Logger
otel_logger = logger_provider.get_logger(name="业务日志")

# 输出日志,支持自定义属性
otel_logger.info("用户登录成功", extra={"user_id": "1001", "login_ip": "192.168.1.1"})
otel_logger.error("数据库连接失败", extra={"db_instance": "prod-db-01"})

关键注意事项

  • 核心替代逻辑:LoggingHandler负责桥接标准日志到OpenTelemetry生态,AzureMonitorLogExporter负责将日志发送到Application Insights,两者组合完全替代OpenCensus的AzureLogHandler。
  • 必须使用Application Insights的连接字符串(而非旧版仪器密钥),可在Azure门户的Application Insights资源中获取。
  • OpenTelemetry会自动关联当前链路的Trace ID和Span ID,日志与链路追踪自动打通,无需额外配置,比OpenCensus的关联逻辑更原生。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:33:02