活动合约
查询期望的字段
| 字段 | 类型 | 为什么存在 |
|---|---|---|
| timestamp_utc | Timestamp | 请求完成后,标准化为 UTC。 |
| route_template | Utf8 | 稳定的路由形状,例如 /api/projects/:id。 |
| status_code | Int64 | HTTP 响应状态代码。 |
| latency_ms | Float64 | 请求持续时间(以毫秒为单位)。 |
DataFusion SQL
复制查询
sql
SELECT
route_template,
COUNT(*) AS requests,
SUM(CASE WHEN status_code >= 500 THEN 1 ELSE 0 END) AS errors,
100.0 * SUM(CASE WHEN status_code >= 500 THEN 1 ELSE 0 END)
/ NULLIF(COUNT(*), 0) AS error_rate_pct
FROM api_requests
WHERE timestamp_utc >= now() - INTERVAL '24 hours'
GROUP BY route_template
HAVING COUNT(*) >= 20
ORDER BY error_rate_pct DESC
LIMIT 10;此只读查询是针对空类型表计划和执行的 阿帕奇 DataFusion 45.2.0。确定性样本输出是综合的并单独审查;根据您自己的数据验证字段类型、阈值和业务定义。 阅读测试方法。
查询结果
5xx 路由错误率
尽管搜索的总流量更多,但结帐路线是最明显的可靠性风险。
/api/checkout
20%
/api/search
4%
/api/profile
0%
| route_template | requests | errors | error_rate_pct |
|---|---|---|---|
| /api/checkout | 25 | 5 | 20 |
| /api/search | 25 | 1 | 4 |
| /api/profile | 20 | 0 | 0 |
综合示例输出。在将其用于操作决策之前,针对您自己的事件架构和阈值运行查询。
SQL 是如何工作的
- 1CASE 表达式仅对状态为 5xx 的响应进行计数,同时保留同一组中的总请求计数。
- 2NULLIF 防止被零除。 HAVING 子句排除请求数少于 20 个的路由,其中一个错误就会产生不稳定的百分比。
- 3使用路由模板而不是原始 URL,这样标识符就不会将一个端点分成数千组。
需要决定的边缘情况
- 选择与您的流量相匹配的最低请求阈值。二十个请求只是说明性的,并不具有普遍性。
- 如果您的 API 有意将预期 5xx 响应用于工作流程控制,则将预期的 5xx 响应与基础设施故障分开。
- 按环境进行细分,因此分段流量不会改变生产率。
推荐仪表板
- 条形图:error_rate_pct by route_template
- 统计:所选时间段内总共 5xx 条回复
- 表:request_id 和 error_type 的最新失败请求
让查询示例发挥作用
相关埋点和指南
继续分析
在真实事件中运行它
创建表,调整字段并保存结果
免费开始,发送结构化事件,并将查询结果用作图表、共享仪表板小部件或警报输入。