如何通过ddtrace将Python定时任务日志发送至Datadog?
最简实现:直接通过Datadog Python SDK发送日志
你之前的方案依赖Datadog Agent收集日志文件,必须配置Agent的日志规则才能生效。如果要跳过配置文件环节,最简方案是直接在代码中使用Datadog官方Python SDK的日志handler,绕过Agent的文件收集流程,直接将日志发送至Datadog API。
1. 安装依赖
pip install datadog
2. 修改代码实现直连发送
替换原有代码为以下内容,无需依赖Agent配置:
import os import logging from datadog import initialize from datadog.logs import LogsHandler # 从环境变量读取Datadog API密钥(避免硬编码) initialize(api_key=os.getenv('DD_API_KEY')) # 配置Datadog日志handler,可自定义service和source标识 dd_handler = LogsHandler( service="my-cron-python-service", source="python" ) # 初始化logger并绑定handler logger = logging.getLogger(__name__) logger.setLevel(logging.WARNING) logger.addHandler(dd_handler) # 发送测试日志 logger.warning("Dummy log")
关键说明
- 无需修改或创建Datadog Agent的配置文件,直接通过API发送日志。
- 推荐通过**环境变量
DD_API_KEY**传递密钥,在cron任务执行前设置环境变量即可(比如在cron命令中添加DD_API_KEY=xxx)。 - 该方案适配cron定时任务场景:每次任务启动时初始化SDK,发送日志后直接退出,不依赖Agent持续运行的日志收集进程。
- 如果需要保留trace关联能力,可以结合
ddtrace的日志注入:在初始化logger前添加ddtrace.patch(logging=True),即可将trace ID自动注入到日志字段中。
替代方案:无需修改代码的CLI方式
如果不想改动Python代码,也可以在cron命令中直接转发程序输出到Datadog:
* * * * * DD_API_KEY=xxx /path/to/python /path/to/script.py | datadog-agent logs send --service "my-cron-service" --source "python"
这种方式利用Datadog Agent的CLI工具直接抓取标准输出并发送,同样不需要修改Agent配置文件。
内容的提问来源于stack exchange,提问作者Murilo Sitonio
相关产品推荐
相关产品推荐

