事件結構
查詢期望的欄位
| 欄位 | 型別 | 為什麼存在 |
|---|---|---|
| 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
- 資料表:最早收到但未完成的交付
設定此查詢需要的事件
相關埋點和指南
繼續分析
在你的事件上執行
建立資料表,調整欄位並儲存結果
免費開始,傳送結構化事件,並將查詢結果用作圖表、共享儀表板小工具或警示輸入。