活动合约
查询期望的字段
| 字段 | 类型 | 为什么存在 |
|---|---|---|
| timestamp_utc | Timestamp | 观察 cron-run 开始时间。 |
| schedule_name | Utf8 | 稳定的计划工作流程名称。 |
| environment | Utf8 | 部署环境。 |
| expected_interval_minutes | Float64 | 记录开始之间的分钟数。 |
DataFusion SQL
复制查询
sql
WITH ordered_runs AS (
SELECT
schedule_name,
environment,
timestamp_utc AS run_at,
expected_interval_minutes,
LAG(timestamp_utc) OVER (
PARTITION BY schedule_name, environment
ORDER BY timestamp_utc
) AS previous_run_at
FROM cron_runs
WHERE timestamp_utc >= now() - INTERVAL '7 days'
)
SELECT
schedule_name,
environment,
previous_run_at,
run_at,
expected_interval_minutes,
date_part('second', run_at - previous_run_at) / 60.0 AS observed_gap_minutes
FROM ordered_runs
WHERE previous_run_at IS NOT NULL
AND date_part('second', run_at - previous_run_at) / 60.0
> expected_interval_minutes * 1.5
ORDER BY observed_gap_minutes DESC;此只读查询是针对空类型表计划和执行的 阿帕奇 DataFusion 45.2.0。确定性样本输出是综合的并单独审查;根据您自己的数据验证字段类型、阈值和业务定义。 阅读测试方法。
查询结果
观察到的时间表差距
计费同步错过了两次预期开始时间,而每日到期工作流程则跳过了一天。
hourly_billing_sync
180 min
daily_trial_expiration
2,880 min
| schedule_name | environment | previous_run_at | run_at | expected_interval_minutes | observed_gap_minutes |
|---|---|---|---|---|---|
| hourly_billing_sync | production | 2026-07-27 07:00 | 2026-07-27 10:00 | 60 | 180 |
| daily_trial_expiration | production | 2026-07-25 02:00 | 2026-07-27 02:00 | 1,440 | 2,880 |
综合示例输出。在将其用于操作决策之前,针对您自己的事件架构和阈值运行查询。
SQL 是如何工作的
- 1LAG 检索每个计划和环境的先前观察到的开始。
- 2时间戳差异成为观察到的间隙,可以与每个作业自己的间隔进行比较。
- 31.5 的乘数允许正常的调度抖动,而不会隐藏真正错过的运行。
需要决定的边缘情况
- 此历史查询仅在下一次运行到达后才检测到间隙;将其与当前丢失心跳警报配对。
- 计划维护和禁用时间表应发出明确的状态更改。
- 夏令时转换需要 UTC 时间表或时区感知期望。
推荐仪表板
- 表:上一次和下一次运行错过的开始时间
- 趋势:按工作划分的日程间隔分钟数
- 统计:生产计划目前已逾期
让查询示例发挥作用
相关埋点和指南
继续分析
在真实事件中运行它
创建表,调整字段并保存结果
免费开始,发送结构化事件,并将查询结果用作图表、共享仪表板小部件或警报输入。