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

如何借助sentry_sdk.capture_event实现Python定时脚本任务性能追踪?

用sentry_sdk.capture_event实现自定义Python脚本的任务性能追踪

1. 初始化Sentry SDK

先确保安装sentry-sdk,初始化时开启性能追踪采样:

import sentry_sdk
from sentry_sdk import capture_event
from sentry_sdk.utils import utcnow, get_stacktrace

sentry_sdk.init(
    dsn="你的Sentry项目DSN",
    traces_sample_rate=1.0,  # 开发环境全量采样,生产环境可按需调整比例
)

2. 封装任务性能追踪函数

针对批量相似任务,写一个通用包裹函数,自动生成并发送性能事件:

def track_task(task_name, task_func, *args, **kwargs):
    # 构造事务事件基础信息
    base_event = {
        "type": "transaction",
        "transaction": task_name,
        "start_timestamp": utcnow(),
        "contexts": {
            "trace": {
                "trace_id": sentry_sdk.Hub.current.scope.transaction.trace_id,
                "span_id": sentry_sdk.Hub.current.scope.transaction.span_id,
                "op": "custom_task",  # 自定义操作标识,用于Sentry后台筛选分类
                "status": "ok"
            }
        }
    }

    try:
        # 执行目标任务
        result = task_func(*args, **kwargs)
        
        # 生成任务完成事件,计算耗时
        end_time = utcnow()
        duration = (end_time - base_event["start_timestamp"]).total_seconds()
        
        finish_event = base_event.copy()
        finish_event["timestamp"] = end_time
        finish_event["duration"] = duration
        finish_event["status"] = "ok"
        
        capture_event(finish_event)
        return result
    except Exception as e:
        # 任务失败时生成异常关联事件
        end_time = utcnow()
        duration = (end_time - base_event["start_timestamp"]).total_seconds()
        
        error_event = base_event.copy()
        error_event["timestamp"] = end_time
        error_event["duration"] = duration
        error_event["status"] = "internal_error"
        error_event["exception"] = {
            "values": [{
                "type": type(e).__name__,
                "value": str(e),
                "stacktrace": get_stacktrace()
            }]
        }
        
        capture_event(error_event)
        raise  # 保留原有异常抛出逻辑,不中断脚本流程

3. 批量执行任务并追踪

直接用track_task包裹你的任务逻辑即可:

# 示例任务函数,替换为你的实际业务代码
def process_data(data_id):
    print(f"完成数据处理: {data_id}")

# 遍历执行所有任务
for data_id in range(1, 5):
    track_task(f"数据处理任务_{data_id}", process_data, data_id)

关键注意点

  • 采样率配置:traces_sample_rate必须大于0,否则性能事件不会被Sentry接收
  • 自定义标识优化:可修改contexts.trace.op为业务相关值(如data_processing、third_party_api_call),方便在Sentry性能页面快速筛选任务类型
  • 异常关联:函数自动捕获任务异常并关联至性能事件,在Sentry中可直接从性能页面跳转查看错误栈信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:20:49