活动合约
查询期望的字段
| 字段 | 类型 | 为什么存在 |
|---|---|---|
| timestamp_utc | Timestamp | 生命周期事件时间(UTC)。 |
| incident_id | Utf8 | 稳定的事件标识符。 |
| service | Utf8 | 主要受影响的服务。 |
| event_name | Utf8 | impact_started,已检测到或已解决。 |
| severity | Utf8 | 审查了事件的严重性。 |
| environment | Utf8 | 部署环境。 |
DataFusion SQL
复制查询
sql
WITH incident_times AS (
SELECT
incident_id,
service,
MIN(CASE WHEN event_name = 'impact_started' THEN timestamp_utc END)
AS impact_started_at,
MIN(CASE WHEN event_name = 'detected' THEN timestamp_utc END)
AS detected_at,
MAX(CASE WHEN event_name = 'resolved' THEN timestamp_utc END)
AS resolved_at
FROM incident_lifecycle_events
WHERE timestamp_utc >= now() - INTERVAL '90 days'
AND environment = 'production'
GROUP BY incident_id, service
)
SELECT
service,
COUNT(*) AS incidents,
AVG(date_part('epoch', detected_at - impact_started_at) / 60.0)
AS average_detection_minutes,
AVG(date_part('epoch', resolved_at - detected_at) / 60.0)
AS average_recovery_minutes
FROM incident_times
WHERE impact_started_at IS NOT NULL
AND detected_at IS NOT NULL
AND resolved_at IS NOT NULL
GROUP BY service
ORDER BY average_recovery_minutes DESC, service;此只读查询是针对空类型表计划和执行的 阿帕奇 DataFusion 45.2.0。确定性样本输出是综合的并单独审查;根据您自己的数据验证字段类型、阈值和业务定义。 阅读测试方法。
查询结果
事件检测和恢复时间
Billing-worker 的观察到的检测和恢复间隔较长。
billing-worker
60 min
comparison 15 min
checkout-api
32.5 min
comparison 7.5 min
| service | incidents | average_detection_minutes | average_recovery_minutes |
|---|---|---|---|
| billing-worker | 1 | 15 | 60 |
| checkout-api | 2 | 7.5 | 32.5 |
综合示例输出。在将其用于操作决策之前,针对您自己的事件架构和阈值运行查询。
SQL 是如何工作的
- 1在计算持续时间之前,生命周期事件将转为每个事件一行。
- 2检测措施影响检测开始;恢复措施检测到解决。
- 3不完整的事件不包括在完成持续时间平均值中,并且应单独报告。
需要决定的边缘情况
- 定义恢复是在缓解、完全恢复还是事件结束时结束,并一致地使用一项规则。
- 重新开启的事件可能需要多个影响间隔,而不是一个最长解决时间。
- 平均值是说明性的;当事件量足够时报告中位数和百分位数。
推荐仪表板
- 条形图:按服务划分的平均检测和恢复分钟数
- 趋势:按月列出的已完成事件持续时间
- 表:缺少已解决事件的开放事件
让查询示例发挥作用
相关埋点和指南
继续分析
在真实事件中运行它
创建表,调整字段并保存结果
免费开始,发送结构化事件,并将查询结果用作图表、共享仪表板小部件或警报输入。