编写第一个 Telemetry SQL 查询
从一个问题开始,您可以从已知的合成行中验证其答案。本演练查询在前面的入门步骤中创建的 api_request_completed 表。
检查最近的行
从事件粒度而不是聚合开始:
SELECT
timestamp_utc,
request_id,
route_template,
status_code,
latency_ms,
release,
environment
FROM api_request_completed
WHERE environment = 'development'
ORDER BY timestamp_utc DESC
LIMIT 100;
找到合成的 req_demo_001 行。如果缺失或输入错误,请返回 验证事件摄取和架构。
计算请求量和错误
一旦原始行看起来正确,就在路由粒度处聚合:
SELECT
route_template,
COUNT(*) AS requests,
SUM(CASE WHEN status_code >= 500 THEN 1 ELSE 0 END) AS server_errors,
ROUND(
100.0 * SUM(CASE WHEN status_code >= 500 THEN 1 ELSE 0 END)
/ NULLIF(COUNT(*), 0),
2
) AS server_error_pct
FROM api_request_completed
WHERE timestamp_utc >= now() - INTERVAL '24 hours'
AND environment = 'development'
GROUP BY route_template
ORDER BY requests DESC;
分母是同一时间窗口内每条路线的请求量。如果查询稍后适应连接或使用空桶生成时间脊柱,NULLIF 会保护该划分。
仅在检查设备后添加延迟
SELECT
route_template,
COUNT(*) AS requests,
approx_percentile_cont(0.5) WITHIN GROUP (ORDER BY latency_ms)
AS p50_latency_ms,
approx_percentile_cont(0.95) WITHIN GROUP (ORDER BY latency_ms)
AS p95_latency_ms
FROM api_request_completed
WHERE timestamp_utc >= now() - INTERVAL '24 hours'
AND environment = 'development'
GROUP BY route_template
ORDER BY p95_latency_ms DESC;
在解释百分位数之前,请确认 latency_ms 是数字并且始终以毫秒为单位进行测量。请阅读 SQL 百分位数 了解稀疏组、近似函数和样本大小注意事项。
保存前验证
使用一个带有已知成功和失败请求的小装置。手动计算预期请求数和错误率,然后与 SQL 结果进行比较。
检查四件事:
- Grain: 一行代表一个已完成的请求。
- 分母: 故意包含或排除重试和内部流量。
- **窗口:**最新的不完整桶不与完整桶进行比较。
- 维度: 路由模板、版本和环境使用稳定值。
有效的SQL仍然可以回答错误的业务问题。将定义和排除与查询一起保存。
继续
使用 API 错误率配方 获得完整的架构、夹具、可视化和告警推荐。要在连接的合成数据库上进行练习,请打开 SaaS SQL实验室。然后继续 创建您的第一个仪表板和告警。