活动合约
查询期望的字段
| 字段 | 类型 | 为什么存在 |
|---|---|---|
| timestamp_utc | Timestamp | 请求完成时间。 |
| status_code | Int64 | HTTP 响应状态代码。 |
DataFusion SQL
复制查询
sql
WITH hourly AS (
SELECT
date_trunc('hour', timestamp_utc) AS hour,
COUNT(*) AS requests,
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 '72 hours'
GROUP BY date_trunc('hour', timestamp_utc)
),
baseline AS (
SELECT
hour,
requests,
error_rate_pct,
AVG(error_rate_pct) OVER (
ORDER BY hour ROWS BETWEEN 7 PRECEDING AND 1 PRECEDING
) AS previous_seven_avg_pct
FROM hourly
)
SELECT
hour,
requests,
error_rate_pct,
previous_seven_avg_pct,
error_rate_pct - previous_seven_avg_pct AS increase_pct_points
FROM baseline
WHERE previous_seven_avg_pct IS NOT NULL
ORDER BY hour;此只读查询是针对空类型表计划和执行的 阿帕奇 DataFusion 45.2.0。确定性样本输出是综合的并单独审查;根据您自己的数据验证字段类型、阈值和业务定义。 阅读测试方法。
查询结果
每小时错误率增加超过基线
13:00 时段是与近期滚动平均值唯一明显的正偏差。
12:00
0.03 pp
13:00
1.12 pp
14:00
0.02 pp
| hour | requests | error_rate_pct | previous_seven_avg_pct | increase_pct_points |
|---|---|---|---|---|
| 12:00 | 18,420 | 0.31 | 0.28 | 0.03 |
| 13:00 | 19,110 | 1.42 | 0.3 | 1.12 |
| 14:00 | 18,780 | 0.48 | 0.46 | 0.02 |
综合示例输出。在将其用于操作决策之前,针对您自己的事件架构和阈值运行查询。
SQL 是如何工作的
- 1每小时 CTE 计算与其分母的比率。
- 2该窗口在前一个窗口结束,因此当前尖峰无法提高其自己的基线。
- 3最终的差异是百分点,而不是百分比变化。
需要决定的边缘情况
- 七小时基线并不模拟每日季节性。
- 缺失的时间段依然缺失;不要默默地将丢失的流量视为零错误。
- 要求最小请求量并将相对变化与绝对影响阈值相结合。
推荐仪表板
- 趋势:观察到的错误率和滚动错误率
- 条形图:增加至基线以上
- 表:异常桶中的路由
让查询示例发挥作用
相关埋点和指南
继续分析
在真实事件中运行它
创建表,调整字段并保存结果
免费开始,发送结构化事件,并将查询结果用作图表、共享仪表板小部件或警报输入。