You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无时间戳列时如何在Grafana中使用绝对时间范围(PostgreSQL)

实现步骤

1. 拼接时间字段适配Grafana时间范围

PostgreSQL提供make_timestamp函数,可以把分散的年、月、日、小时字段拼接成标准时间戳,结合Grafana内置的时间变量实现范围过滤。直接用以下SQL查询:

SELECT
  make_timestamp(year, month, day, hour, 0, 0) AS time,
  traffic
FROM my_table
WHERE
  make_timestamp(year, month, day, hour, 0, 0) BETWEEN $__timeFrom() AND $__timeTo()

其中$__timeFrom()和$__timeTo()是Grafana内置变量,会自动替换成你选择的绝对时间范围的起止值。

如果year、month等字段是字符串类型,需要先转为整数:

SELECT
  make_timestamp(year::int, month::int, day::int, hour::int, 0, 0) AS time,
  traffic
FROM my_table
WHERE
  make_timestamp(year::int, month::int, day::int, hour::int, 0, 0) BETWEEN $__timeFrom() AND $__timeTo()

2. Grafana面板配置

  • 确保已正确添加PostgreSQL数据源,连接信息验证通过。
  • 创建新面板(折线图、柱状图均可),选择该PostgreSQL数据源。
  • 在查询编辑器中粘贴上述SQL语句。
  • 在面板的「字段」设置里,将时间字段指定为查询结果中的time列(Grafana通常会自动识别)。
  • 根据需求调整可视化样式,比如坐标轴标签、图例位置等。

3. 聚合数据(可选)

如果同小时有多条traffic数据,需要聚合展示,可修改SQL添加分组:

SELECT
  make_timestamp(year, month, day, hour, 0, 0) AS time,
  SUM(traffic) AS total_traffic
FROM my_table
WHERE
  make_timestamp(year, month, day, hour, 0, 0) BETWEEN $__timeFrom() AND $__timeTo()
GROUP BY time
ORDER BY time

4. 验证效果

在Grafana顶部选择绝对时间范围,执行查询后,面板将仅展示该时间区间内的流量数据。若数据未正常显示,检查字段类型是否正确、时间拼接是否存在非法值(比如month=13这类无效数值)。

内容的提问来源于stack exchange,提问作者Esmail Ebrahimi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 04:22:05