事件结构
查询期望的字段
| 字段 | 类型 | 为什么存在 |
|---|---|---|
| timestamp_utc | Timestamp | Webhook 生命周期事件时间。 |
| delivery_id | Utf8 | 稳定的提供商交付标识符。 |
| provider | Utf8 | Webhook 提供商。 |
| event_type | Utf8 | 提供者事件类型。 |
| event_name | Utf8 | webhook_received 或 downstream_completed。 |
| status | Utf8 | 最终结果是成功还是失败。 |
DataFusion SQL
复制查询
sql
WITH deliveries AS (
SELECT
delivery_id,
provider,
event_type,
MIN(CASE
WHEN event_name = 'webhook_received' THEN timestamp_utc
ELSE NULL
END) AS received_at,
MIN(CASE
WHEN event_name = 'downstream_completed' AND status = 'success'
THEN timestamp_utc ELSE NULL
END) AS completed_at
FROM webhook_lifecycle_events
WHERE timestamp_utc >= now() - INTERVAL '7 days'
GROUP BY delivery_id, provider, event_type
),
delivery_outcomes AS (
SELECT
delivery_id,
provider,
event_type,
received_at,
completed_at,
date_part('second', completed_at - received_at) AS completion_seconds
FROM deliveries
WHERE received_at IS NOT NULL
)
SELECT
provider,
event_type,
COUNT(*) AS received_deliveries,
SUM(CASE WHEN completed_at IS NOT NULL THEN 1 ELSE 0 END)
AS completed_deliveries,
100.0 * SUM(CASE
WHEN completion_seconds <= 300.0 THEN 1 ELSE 0
END) / NULLIF(COUNT(*), 0) AS completed_within_target_pct,
approx_percentile_cont(completion_seconds, 0.95) AS p95_completion_seconds
FROM delivery_outcomes
GROUP BY provider, event_type
HAVING COUNT(*) >= 20
ORDER BY completed_within_target_pct, received_deliveries DESC;此只读查询是针对空类型表计划和执行的 阿帕奇 DataFusion 45.2.0。确定性样本输出是综合的并单独审查;根据您自己的数据验证字段类型、阈值和业务定义。 阅读测试方法。
查询结果
Webhook 交付在目标范围内完成
GitHub 推送处理在收到时得到确认,但经常错过五分钟下游完成目标。
invoice.payment_succeeded
96.21%
push
83.55%
| provider | event_type | received_deliveries | completed_deliveries | completed_within_target_pct | p95_completion_seconds |
|---|---|---|---|---|---|
| stripe | invoice.payment_succeeded | 8,420 | 8,346 | 96.21 | 242 |
| github | push | 3,180 | 2,890 | 83.55 | 811 |
综合示例输出。在将其用于操作决策之前,针对您自己的事件架构和阈值运行查询。
SQL 是如何工作的
- 1交付 CTE 将生命周期事件折叠为一份收据和一次成功的下游完成。
- 2完成延迟衡量的是业务工作流程,而不仅仅是 HTTP 处理程序时间。
- 3最终聚合报告完成份额和 p95 时间,因此缺失的结果仍然可见。
需要检查的边界情况
- 重复数据删除提供程序重试应保留相同的交付 ID,并且不会创建新的逻辑工作。
- 某些事件类型有意分散为多个结果,并且需要明确的终端定义。
- 在计算最终服务水平时,排除尚未完全完成窗口的最近收货。
推荐仪表板
- 酒吧:completed_within_target_pct by event_type
- 趋势:p95_completion_seconds
- 表:最早收到但未完成的交付
设置此查询需要的事件
相关埋点和指南
继续分析
在你的事件上运行
创建表,调整字段并保存结果
免费开始,发送结构化事件,并将查询结果用作图表、共享仪表板小部件或警报输入。