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

Grafana从MariaDB获取指定时间范围数据异常的排查求助

家庭自动化数据Grafana查询时区问题排查思路

1. 核对数据源时区配置

  • 进入Grafana的MariaDB数据源设置,将数据源时区固定为UTC(因为你的time列存储的是UTC时间),Grafana全局时区保持browser不变。
  • 之前切换数据源时区后出现的问题,大概率是缓存未刷新,保存设置后重新执行查询并刷新图表。

2. 查看Grafana实际发送的SQL语句

  • 在查询编辑器右上角点击Query Inspector,直接查看Grafana生成的完整SQL语句,重点看WHERE子句的时间范围:
    • 比如选择「最近3小时」时,若本地时区为UTC+2,正确的UTC时间范围应该是time BETWEEN 'YYYY-MM-DD HH:MM:SS'(本地now-3h转换为UTC) AND 'YYYY-MM-DD HH:MM:SS'(本地now转换为UTC)
    • 如果生成的时间范围是本地时间而非UTC,说明数据源时区配置错误,导致用本地时间匹配UTC存储的time列,自然只能拿到部分数据。

3. 验证数据库中是否存在目标时间范围的数据

  • 直接在MariaDB客户端执行手动查询,确认数据是否存在:
-- 替换为实际的UTC时间范围(本地最近3小时转换为UTC)
SELECT time, total_power_1 
FROM data 
WHERE time >= '202X-XX-XX 11:30:00' AND time <= '202X-XX-XX 14:30:00' 
ORDER BY time;
  • 如果该查询能返回3小时的数据,说明Grafana的查询生成逻辑有问题;如果只能返回1小时数据,说明数据写入时未正确转换为UTC,而是直接写入了本地时间。

4. 手动修正SQL查询的时区处理

  • 若数据源时区配置无效,可在SQL中显式处理时区转换,确保查询条件使用UTC时间:
SELECT
  -- 将UTC时间转换为柏林时区(自动适配夏令时)
  CONVERT_TZ(time, '+00:00', 'Europe/Berlin') AS "time",
  total_power_1 AS "WP"
FROM data
WHERE
  -- $__timeFrom()和$__timeTo()会根据数据源时区生成UTC时间范围
  time >= $__timeFrom() AND time <= $__timeTo()
ORDER BY time;

5. 确认数据写入逻辑的正确性

  • 检查数据写入代码,确认time列确实被转换为UTC后再存入数据库:
    • 比如本地时间13:30(UTC+2)写入时,数据库time列应该是11:30(UTC)
    • 若写入的是本地时间,会导致Grafana查询UTC时间范围时,只能匹配到对应本地时间的后半段数据,出现图表空白。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 21:43:13