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

Azure Python Web应用Application Insights自动/SDK埋点无页面浏览量

排查Azure Linux上Python Web应用Application Insights无数据问题

一、自动检测功能核心前提检查

  • 确认托管服务类型:自动检测仅支持App Service(Linux)、Azure Functions等官方托管服务,若为自行部署在Linux VM上的Web应用,自动检测不生效,必须手动配置SDK。
  • 验证Python版本:Application Insights自动检测要求Python 3.7及以上版本,低于该版本会直接失效。
  • 检查Agent扩展状态:在App Service的「扩展」面板中,确认已安装Application Insights Agent扩展——这是Linux环境下自动检测的基础,未安装则无法启用自动采集。

二、环境变量配置验证

无论自动还是手动配置,以下环境变量必须正确设置(在App Service「配置-应用程序设置」中添加):

  • APPLICATIONINSIGHTS_CONNECTION_STRING:优先使用连接字符串而非仪表密钥(仪表密钥已逐步弃用),直接从Application Insights资源的「概述」面板复制完整连接字符串。
  • PYTHONPATH:确保App Service能正确识别依赖包,Linux环境下可设置为/home/site/wwwroot:/home/site/wwwroot/.python_packages/lib/site-packages。

三、手动SDK配置修正

你当前的手动配置存在几处关键问题,需调整如下:

  1. 修正OTLP端点:Application Insights的OTLP采集端点需追加/v1/traces路径,正确格式为:
    endpoint="https://eastus-8.in.applicationinsights.azure.com/v1/traces"
    
  2. 安装必要依赖:确保已安装全量所需包:
    pip install opentelemetry-api opentelemetry-sdk opentelemetry-exporter-otlp-proto-http opentelemetry-instrumentation-flask opentelemetry-instrumentation-django
    
  3. 启用Web框架 instrumentation:若使用Flask/Django等框架,必须绑定对应Instrumentation才能追踪页面请求,以Flask为例:
    from opentelemetry.instrumentation.flask import FlaskInstrumentor
    
    app = Flask(__name__)
    FlaskInstrumentor().instrument_app(app)
    
  4. 补充用户数据追踪:要获取访客、用户标识等数据,需在Span处理器中添加上下文信息:
    from flask import request
    
    def add_user_context(span, context):
        # 从请求Cookie/Header获取用户标识
        user_id = request.cookies.get('user_id') or request.headers.get('X-User-ID')
        if user_id:
            span.set_attribute('user.id', user_id)
        # 添加客户端IP
        span.set_attribute('client.ip', request.remote_addr)
    
    # 将处理器绑定到SpanProcessor
    trace.get_tracer_provider().add_span_processor(BatchSpanProcessor(otlp_exporter, on_end=add_user_context))
    

四、日志与调试验证

  • 查看App Service日志流:在「日志流」中搜索ApplicationInsights关键词,排查是否存在连接失败、权限错误等提示。
  • 本地环境复现:在本地设置相同的APPLICATIONINSIGHTS_CONNECTION_STRING,运行应用并发送请求,验证是否能在仪表板看到数据,排除Azure环境网络问题。
  • 网络连通性测试:在Linux机器上执行curl命令测试端点可达性:
    curl -v https://eastus-8.in.applicationinsights.azure.com/v1/traces -H "x-ms-monitor-ingestion-key: 你的仪表密钥"
    
    返回400错误为正常(未发送有效数据),若返回连接超时或403,说明存在防火墙或权限限制。

五、页面浏览量的特殊说明

默认页面浏览量指标是前端浏览器通过Application Insights JavaScript SDK追踪的,后端Python应用的自动检测仅采集服务器端请求、依赖等数据。若需在后端统计页面浏览量,需在路由中手动创建自定义事件:

from opentelemetry import trace

tracer = trace.get_tracer(__name__)

@app.route('/')
def index():
    with tracer.start_as_current_span('page_view') as span:
        span.set_attribute('page.name', 'index')
        span.set_attribute('page.url', request.url)
    return "Hello World"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:11:09