如何在AWS Elastic Beanstalk中为Flask应用添加Datadog追踪入口命令?
因为Elastic Beanstalk用Apache+mod_wsgi部署Flask时,不是直接执行你本地的ddtrace-run python3 application.py命令,而是由Apache的mod_wsgi模块直接加载你的Flask应用,所以得换个思路来配置Datadog追踪。下面是两种可靠的实现方式:
方法一:手动在Flask应用中初始化追踪(最简单)
这种方式不需要修改Apache配置,只需要在你的Flask代码中添加Datadog的初始化逻辑,同时确保Datadog Agent和ddtrace包安装到位。
步骤1:添加ddtrace到依赖
在项目根目录的requirements.txt中加入:
ddtrace>=1.0.0
这样Elastic Beanstalk部署时会自动安装这个包。
步骤2:在Flask应用中添加追踪逻辑
修改你的application.py,在开头加入以下代码(假设你的Flask实例名为app):
import ddtrace from ddtrace.contrib.flask import TraceMiddleware # 配置Datadog追踪 tracer = ddtrace.tracer tracer.configure( service="your-flask-service-name", # 替换为你的服务名称 env="production", # 根据你的环境调整(比如staging、development) agent_hostname="localhost" # Datadog Agent默认运行在本地,无需修改 ) # 初始化Flask app from flask import Flask app = Flask(__name__) # 绑定追踪中间件 TraceMiddleware(app, tracer, service="your-flask-service-name") # 你的原有Flask代码...
步骤3:安装并配置Datadog Agent
创建.ebextensions/01_install_datadog_agent.config文件,用来在Elastic Beanstalk实例上安装Datadog Agent:
packages: yum: datadog-agent: [] files: "/etc/datadog-agent/datadog.yaml": mode: "000644" owner: dd-agent group: dd-agent content: | api_key: ${DD_API_KEY} site: datadoghq.com commands: 01_restart_datadog_agent: command: "sudo systemctl restart datadog-agent"
然后在Elastic Beanstalk的环境配置 > 软件 > 环境变量中添加DD_API_KEY,值为你的Datadog API密钥。
方法二:修改Apache/mod_wsgi配置(更贴近本地的ddtrace-run方式)
如果你更希望模拟本地用ddtrace-run启动的方式,可以通过修改mod_wsgi的配置,让它用ddtrace-run来加载你的Flask应用。
步骤1:添加ddtrace到依赖
同样在requirements.txt中加入ddtrace>=1.0.0。
步骤2:修改mod_wsgi配置
创建.ebextensions/00_mod_wsgi_datadog.config文件,覆盖默认的mod_wsgi配置:
files: "/etc/httpd/conf.d/wsgi_custom.conf": mode: "000644" owner: root group: root content: | # 覆盖默认的mod_wsgi配置,使用ddtrace-run启动Python WSGIDaemonProcess wsgi processes=1 threads=15 display-name=%{GROUP} \ python-path=/opt/python/current/app:/opt/python/run/venv/lib/python3.9/site-packages \ python-interpreter=/opt/python/run/venv/bin/ddtrace-run WSGIProcessGroup wsgi WSGIScriptAlias / /opt/python/current/app/application.py WSGIPassAuthorization On
注意把python3.9替换为你实际使用的Python版本(可以在Elastic Beanstalk环境配置中查看Python版本)。
步骤3:安装Datadog Agent
和方法一的步骤3一致,创建.ebextensions/01_install_datadog_agent.config并设置DD_API_KEY环境变量。
验证是否生效
部署完成后,可以通过以下方式验证:
- 查看Datadog控制台的APM页面,检查是否有来自你的Flask服务的追踪数据
- 登录Elastic Beanstalk实例,查看Datadog Agent日志:
sudo tail -f /var/log/datadog/agent.log,确认没有错误 - 查看Apache日志:
sudo tail -f /var/log/httpd/error_log,确认mod_wsgi启动正常,没有加载错误
内容的提问来源于stack exchange,提问作者addicted

