Django生产环境Gunicorn+WSGI配置OpenTelemetry对接Application Insights问题
在Gunicorn+WSGI架构下配置Azure Monitor全请求追踪
核心配置步骤
直接在WSGI入口文件(一般是wsgi.py)里调用configure_azure_monitor,而且必须在Django应用初始化前执行,具体操作如下:
修改wsgi.py文件
在文件开头引入所需模块,先执行Azure Monitor配置,再初始化Django应用。示例代码:import os from azure.monitor.opentelemetry import configure_azure_monitor from django.core.wsgi import get_wsgi_application # 先配置Azure Monitor,务必在Django应用加载前执行 configure_azure_monitor( connection_string="你的Application Insights连接字符串", # 可选:排除不需要追踪的路径,用逗号分隔,支持通配符 # excluded_urls="/health,/static/*" ) os.environ.setdefault('DJANGO_SETTINGS_MODULE', '你的项目名.settings') application = get_wsgi_application() # 确认settings.py里已经加了这个中间件 # MIDDLEWARE = [ # ... # 'azure.monitor.opentelemetry.django.middleware.OpenTelemetryMiddleware', # ... # ]检查中间件配置
确保settings.py的MIDDLEWARE列表中包含OpenTelemetryMiddleware,位置建议放在Django自带的CommonMiddleware之后、自定义中间件之前,这样才能完整捕获请求的整个生命周期。启动Gunicorn
直接用修改后的wsgi.py启动Gunicorn就行,比如:gunicorn 你的项目名.wsgi:application --bind 0.0.0.0:8000
关键注意点
- 执行顺序不能乱:
configure_azure_monitor必须在get_wsgi_application()之前调用,不然OpenTelemetry没法正确注入到Django的请求处理流程里。 - 避免硬编码连接字符串:可以把连接字符串放到环境变量
APPLICATIONINSIGHTS_CONNECTION_STRING里,这时调用configure_azure_monitor()不用传参,会自动读取环境变量。 - 自定义追踪范围:如果不想追踪健康检查、静态资源这类请求,用
excluded_urls参数配置就行,多个路径用逗号分隔,支持通配符。
验证效果
部署后发几个测试请求,登录Azure Portal的Application Insights,进入性能或请求仪表盘,就能看到和开发环境一样的请求追踪数据,包括响应时间、请求路径、错误信息等。
内容的提问来源于stack exchange,提问作者scoopseven
相关产品推荐
相关产品推荐

