如何基于PostgreSQL数据源在Grafana中绘制按status区分的多折线图
Grafana按接口状态码拆分多折线图调整方案
1 优先检查查询配置项
你当前的SQL逻辑完全符合Grafana时序查询的结构要求,无需修改。唯一要检查的是查询面板下方的Format as选项,必须选择Time series,不要选默认的Table,这是90%以上该类问题的根因。
2 若修改格式后仍不生效,调整面板转换规则
如果已经选了Time series格式还是没有拆分多条线,可通过转换规则强制拆分:
- 打开面板右侧的「Transform」标签页
- 添加「Partition by values」转换规则
- 「Partition by field」选择
metric(也就是你取别名为metric的status字段) - 保存配置后即可自动按不同状态值拆分出独立折线,每条折线的图例默认是状态码值
3 可选优化:避免折线断层
如果某时间窗口内某个状态码没有对应请求,当前查询不会返回该状态的记录,会导致折线出现断点,可通过关联状态字典补全数据(需要提前维护一个包含所有需要展示的状态码的表api_status_codes,仅存status字段):
SELECT t.time AS "time", s.status AS "metric", COALESCE(l.count, 0) AS "count" FROM ( SELECT $__timeGroup(created_at, '5m') AS time FROM api_logs WHERE $__timeFilter(created_at) GROUP BY 1 ) t CROSS JOIN api_status_codes s LEFT JOIN ( SELECT $__timeGroup(created_at, '5m') AS time, status, count(*) AS count FROM api_logs WHERE $__timeFilter(created_at) GROUP BY 1,2 ) l ON t.time = l.time AND s.status = l.status ORDER BY 1,2
该优化后即使某个状态码在对应窗口无请求,也会返回0值,折线不会出现断层。
内容的提问来源于stack exchange,提问作者sparkle
相关产品推荐
相关产品推荐

