活動合約
查詢期望的欄位
| 欄位 | 型別 | 為什麼存在 |
|---|---|---|
| timestamp_utc | Timestamp | 嘗試完成時間(UTC)。 |
| route_template | Utf8 | 穩定的路線範本。 |
| request_id | Utf8 | 原始嘗試和重試共享的識別符號。 |
| attempt_number | Int64 | 基於一的嘗試序列。 |
| status_code | Int64 | 嘗試返回 HTTP 狀態。 |
| retry_after_ms | Int64 | 應用的重試延遲(以毫秒為單位)。 |
| environment | Utf8 | 部署環境。 |
DataFusion SQL
複製查詢
sql
WITH request_outcomes AS (
SELECT
route_template,
request_id,
COUNT(*) AS attempts,
MAX(CASE WHEN status_code = 429 THEN 1 ELSE 0 END) AS was_rate_limited,
MAX(CASE WHEN status_code BETWEEN 200 AND 299 THEN 1 ELSE 0 END) AS succeeded
FROM api_attempt_events
WHERE timestamp_utc >= now() - INTERVAL '24 hours'
AND environment = 'production'
GROUP BY route_template, request_id
)
SELECT
route_template,
COUNT(*) AS requests,
SUM(was_rate_limited) AS rate_limited_requests,
SUM(CASE
WHEN was_rate_limited = 1 AND succeeded = 1 THEN 1
ELSE 0
END) AS recovered_requests,
100.0 * SUM(CASE
WHEN was_rate_limited = 1 AND succeeded = 1 THEN 1
ELSE 0
END) / NULLIF(SUM(was_rate_limited), 0) AS recovery_rate_pct
FROM request_outcomes
GROUP BY route_template
ORDER BY rate_limited_requests DESC, route_template;此只讀查詢是針對空型別資料表計劃和執行的 阿帕奇 DataFusion 45.2.0。確定性樣本輸出是綜合的並單獨審查;根據您自己的資料驗證欄位型別、閾值和業務定義。 閱讀測試方法。
查詢結果
限速請求恢復
搜尋恢復三個限速請求中的兩個;匯出在觀察到的視窗中沒有恢復。
/api/search
66.67%
comparison 3%
/api/export
0%
comparison 1%
| route_template | requests | rate_limited_requests | recovered_requests | recovery_rate_pct |
|---|---|---|---|---|
| /api/search | 4 | 3 | 2 | 66.67 |
| /api/export | 2 | 1 | 0 | 0 |
綜合範例輸出。在將其用於操作決策之前,針對您自己的事件架構和閾值執行查詢。
SQL 是如何工作的
- 1第一個 CTE 為每個邏輯請求建立一個記錄,防止重試導致請求量膨脹。
- 2僅當請求同時包含 429 嘗試和成功嘗試時,才算為已恢復。
- 3在百分比旁邊保留速率限制的請求計數可以使低容量結果可見。
需要決定的邊緣情況
- 使用在重試後仍然存在的冪等性或邏輯請求識別符號。
- 限制重試順序,以便在報告視窗之後完成的請求不會永久標記為失敗。
- 記錄客戶端取消與重試耗盡分開。
推薦儀表板
- 酒吧:recovery_rate_pct 按路線
- 趨勢:rate_limited_requests 和 recovered_requests
- 資料表:已耗盡的請求以及嘗試計數和重試延遲
讓查詢範例發揮作用
相關埋點和指南
繼續分析
在真實事件中執行它
建立資料表,調整欄位並儲存結果
免費開始,傳送結構化事件,並將查詢結果用作圖表、共享儀表板小工具或警示輸入。