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

App Service容器部署配置Application Insights无数据上报问题

容器化FastAPI on App Service 接入Application Insights无数据的解决步骤

你遇到的是自定义容器+Python FastAPI场景接入Application Insights(以下简称AI)的典型问题,按以下顺序排查即可:

  • 先修正连接字符串配置
    不要在代码里硬编码InstrumentationKey,App Service关联AI资源后会自动注入APPLICATIONINSIGHTS_CONNECTION_STRING环境变量,直接从环境变量读取即可:
    import os
    conn_string = os.getenv("APPLICATIONINSIGHTS_CONNECTION_STRING")
    
    先去App Service的「配置-应用程序设置」页确认该环境变量确实存在,值为AI资源概览页展示的完整连接字符串(不是单独的InstrumentationKey,新的AI资源连接字符串包含ingestion端点地址,只填ikey会因为上报地址错误导致数据发不出去)。如果环境变量缺失,手动粘贴完整连接字符串添加即可。

    注意:Python logging默认级别为WARNING,低于该级别的日志不会被处理器捕获上报,需要手动设置日志级别:logger.setLevel(logging.INFO)

  • 补全缺失的请求追踪组件
    你当前的代码只配置了日志处理器和基础指标导出器,没有接入FastAPI的请求中间件,也没有配置链路追踪导出器,所以接口请求数、响应时间、失败率这些核心数据根本不会被采集上报。
    首先安装缺失的依赖:
    pip install opencensus-ext-fastapi opencensus-ext-azure
    
    然后在FastAPI初始化后添加中间件:
    from opencensus.ext.fastapi import FastAPIMiddleware
    from opencensus.ext.azure.trace_exporter import AzureExporter
    from opencensus.trace.samplers import ProbabilitySampler
    
    # app = FastAPI() 这行之后加
    app.add_middleware(
        FastAPIMiddleware,
        exporter=AzureExporter(connection_string=conn_string),
        sampler=ProbabilitySampler(rate=1.0) # 测试环境用1.0全量采样,生产可按需调低
    )
    
  • 排查容器侧的配置问题
    • 检查Dockerfile里的依赖是否装全,不要漏装opencensus的fastapi扩展,同时尽量用2022年之后发布的新版本,老版本opencensus存在连接新AI资源的兼容问题。
    • 如果开了VNET集成,确认VNET网络安全组没有拦截到AI上报端点(默认是dc.services.visualstudio.com的443端口出站),不然容器发不出遥测请求。
    • 如果启动uvicorn时开了多worker模式,确认遥测初始化逻辑是在应用启动时加载,而不是只在主进程执行,不然worker进程不会上报数据。
    • 关闭App Service AI配置页里的「自动检测/自动注入」开关——这个功能只对App Service内置的.NET、Java、Node.js运行时生效,对自定义Python容器无效,开了反而可能注入错误的环境变量干扰SDK上报。
  • 验证链路是否打通
    遥测数据默认有2-5分钟的传输延迟,不要刚配置完就刷AI页面。可以先在健康检查接口加一条测试日志:
    @app.get('/')
    async def health_check():
        logger.warning("health check triggered")
        return {'status': 'ok'}
    
    部署后多调用几次接口,等10分钟左右去AI的「事务搜索」页面搜这条测试日志,如果能搜到说明日志链路通了,再等几分钟就能看到请求和指标数据。如果搜不到,直接去App Service的「日志流」看容器的stderr输出,opencensus上报失败会直接打连接错误、权限错误的日志,根据日志排错比盲试效率高很多。
  • 更简单的替代方案
    目前微软已经用OpenTelemetry替代了旧的OpenCensus SDK,对FastAPI的适配更简单,不需要自己拼接各个组件,两行代码就能完成全量遥测接入(自动采集请求、依赖、日志、指标),对自定义容器场景的适配更好:
    先装包:pip install azure-monitor-opentelemetry fastapi uvicorn
    代码里只需要在初始化app前加一行配置即可,不需要手动加handler、中间件、导出器:
    from azure.monitor.opentelemetry import configure_azure_monitor
    from fastapi import FastAPI
    import logging
    
    # 自动读取环境变量里的AI连接字符串,完成所有遥测组件初始化
    configure_azure_monitor()
    logger = logging.getLogger(__name__)
    app = FastAPI()
    
    # 后续的接口逻辑完全不用改
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 13:06:08