Grafana中PostgreSQL的hard_limit_power线仅显部分区域,如何全屏展示?
问题
每个集群都配置了Hard_limit_power(本次场景值为190kW),但在Grafana图表中这条阈值线仅显示部分时段,无法覆盖整个图表区域。当前用于生成该线的SQL查询语句如下:
SELECT datalytics_inserted_at, hard_limit_power*1000 as hard_limit_power from llm_cluster_updates where cluster_id = (Select cluster_id from charging_station_clusters where display_name = '$cluster_name') order by datalytics_inserted_at desc
问题原因
当前查询仅返回llm_cluster_updates表中存在记录的时间点数据,只有这些时间点有阈值数据,导致线呈断片状态,无法覆盖图表的完整时间范围。
解决方法
方法一:修改SQL查询,生成全时段恒定值
利用Grafana自带的时间变量*$__timeFrom*(图表起始时间)和*$__timeTo*(图表结束时间),生成覆盖整个时间范围的阈值数据:
PostgreSQL环境示例
WITH time_range AS ( SELECT $__timeFrom() AS start_time, $__timeTo() AS end_time ), cluster_limit AS ( SELECT hard_limit_power*1000 as hard_limit_power FROM llm_cluster_updates WHERE cluster_id = (SELECT cluster_id FROM charging_station_clusters WHERE display_name = '$cluster_name') LIMIT 1 -- 取最新的配置值即可 ) SELECT start_time AS datalytics_inserted_at, hard_limit_power FROM time_range, cluster_limit UNION ALL SELECT end_time AS datalytics_inserted_at, hard_limit_power FROM time_range, cluster_limit ORDER BY datalytics_inserted_at
只需在图表的起始和结束时间各生成一个阈值点,Grafana会自动将这两个点连成一条贯穿全时段的直线。
MySQL环境示例
WITH RECURSIVE time_points AS ( SELECT $__timeFrom() AS datalytics_inserted_at UNION ALL SELECT datalytics_inserted_at + INTERVAL 1 HOUR -- 按小时生成点,间隔可自行调整 FROM time_points WHERE datalytics_inserted_at < $__timeTo() ), cluster_limit AS ( SELECT hard_limit_power*1000 as hard_limit_power FROM llm_cluster_updates WHERE cluster_id = (SELECT cluster_id FROM charging_station_clusters WHERE display_name = '$cluster_name') ORDER BY datalytics_inserted_at DESC LIMIT 1 ) SELECT tp.datalytics_inserted_at, cl.hard_limit_power FROM time_points tp, cluster_limit cl ORDER BY tp.datalytics_inserted_at
通过递归生成时间范围内的多个连续点,确保阈值线全程连续显示。
方法二:直接用Grafana面板阈值设置(更快捷)
不想修改SQL的话,直接在图表层面添加固定阈值线:
- 进入图表编辑页面,切换到「阈值」标签页
- 点击「添加阈值」,输入值
190000(原SQL中把kW转为瓦,190kW对应190000) - 将显示样式设置为「线」,按需调整颜色等样式
- 这种方式无需依赖数据库查询,直接在面板生成贯穿全时段的阈值线。
内容的提问来源于stack exchange,提问作者Saajid Rameez
相关产品推荐
相关产品推荐

