活动合约
查询期望的字段
| 字段 | 类型 | 为什么存在 |
|---|---|---|
| timestamp_utc | Timestamp | 运行完成或失败时。 |
| job_name | Utf8 | 稳定的逻辑作业名称。 |
| status | Utf8 | 成功或失败。 |
| attempt | Int64 | 基于一的执行尝试。 |
| duration_ms | Float64 | 尝试的持续时间。 |
DataFusion SQL
复制查询
sql
SELECT
job_name,
COUNT(*) AS attempts,
SUM(CASE WHEN attempt > 1 THEN 1 ELSE 0 END) AS retries,
SUM(CASE WHEN status = 'failed' THEN 1 ELSE 0 END) AS failures,
100.0 * SUM(CASE WHEN attempt > 1 THEN 1 ELSE 0 END)
/ NULLIF(COUNT(*), 0) AS retry_rate_pct,
approx_percentile_cont(duration_ms, 0.95) AS p95_duration_ms
FROM job_runs
WHERE timestamp_utc >= now() - INTERVAL '7 days'
GROUP BY job_name
ORDER BY retry_rate_pct DESC, failures DESC;此只读查询是针对空类型表计划和执行的 阿帕奇 DataFusion 45.2.0。确定性样本输出是综合的并单独审查;根据您自己的数据验证字段类型、阈值和业务定义。 阅读测试方法。
查询结果
按作业重试率
尽管电子邮件有更多的绝对重试尝试,但订阅同步值得关注。
sync_subscription
30%
generate_report
12.5%
send_email
0%
| job_name | attempts | retries | failures | retry_rate_pct | p95_duration_ms |
|---|---|---|---|---|---|
| sync_subscription | 10 | 3 | 2 | 30 | 8,000 |
| generate_report | 8 | 1 | 1 | 12.5 | 12,000 |
| send_email | 10 | 0 | 0 | 0 | 900 |
综合示例输出。在将其用于操作决策之前,针对您自己的事件架构和阈值运行查询。
SQL 是如何工作的
- 1计算尝试次数而不是逻辑作业有意暴露了重试造成的额外执行负载。
- 2重试率分母是所有尝试。如果您更喜欢逻辑作业分母,请包含 job_id 并计算不同的作业 ID。
- 3p95 持续时间有助于区分快速瞬时重试和消耗工作线程容量的昂贵运行。
需要决定的边缘情况
- 计划的重试可能是预期的行为;在更改重试策略之前按 error_type 进行分段。
- 如果多次尝试属于一个逻辑工作单元,请使用稳定的 job_id。
- 死信事件应单独报告,因为它们代表耗尽恢复。
推荐仪表板
- 条形图:retry_rate_pct by job_name
- 折线图:每日故障和 job_name
- 表:最新的最终故障以及客户和错误上下文
让查询示例发挥作用
相关埋点和指南
继续分析
在真实事件中运行它
创建表,调整字段并保存结果
免费开始,发送结构化事件,并将查询结果用作图表、共享仪表板小部件或警报输入。