活动合约
查询期望的字段
| 字段 | 类型 | 为什么存在 |
|---|---|---|
| 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
- 表:已耗尽的请求以及尝试计数和重试延迟
让查询示例发挥作用
相关埋点和指南
继续分析
在真实事件中运行它
创建表,调整字段并保存结果
免费开始,发送结构化事件,并将查询结果用作图表、共享仪表板小部件或警报输入。