使用 SQL 对事件数据进行时间分桶
时间桶将个别事件变成趋势。重要的选择不仅仅是小时与天:您还需要一致的时间戳、时区、间隔边界、完整性规则以及对丢失桶的处理。将一整小时与当前小时的前三分钟进行比较时,图表看起来可能具有权威性。
构建稳定的UTC系列
SELECT
date_trunc('hour', timestamp_utc) AS hour,
COUNT(*) AS requests,
100.0 * SUM(CASE WHEN status = 'failed' THEN 1 ELSE 0 END)
/ NULLIF(COUNT(*), 0) AS error_rate_pct
FROM api_request_events
WHERE timestamp_utc >= now() - INTERVAL '7 days'
GROUP BY date_trunc('hour', timestamp_utc)
ORDER BY hour;
使用服务器管理的 timestamp_utc 字段作为查询边界。当源时间戳描述另一个业务时刻时(例如移动客户端开始离线操作时),请将源时间戳保留为单独的字段。如果仪表板正常运行,UTC 可以避免夏令时间隙和重复的当地时间。
date_trunc 是日历对齐小时和日期的最简单选择。 date_bin 对于固定间隔(例如五分钟)很有用:
date_bin(INTERVAL '5 minutes', timestamp_utc, TIMESTAMP '1970-01-01')
在每个应排队的查询中使用相同的原点。
处理不完整和空的桶
最新的存储桶通常是不完整的。将其从比较中排除或清楚地标记。对于告警,在判断最后完成的间隔之前考虑摄取延迟。
聚合仅返回包含行的存储桶。缺失点可能意味着零活动、延迟摄取或查询间隙;这些解释不可互换。如果可视化用零填充空白,请明确该转换并确认零在语义上是正确的。
选择足够大的存储桶以产生稳定的容量,但又足够小以支持响应。五分钟的时间段可以揭露一个事件;每日存储桶通常更有助于保留。有关完整示例,请参阅 使用时间戳、事件响应指南 和 滚动错误率配方。