我有一个grafana服务器,与mysql安装在同一台计算机上。这是一台linux机器。例如,当我选择查看时间序列上最后半小时的数据点时,grafana不会返回我期望的数据块。
以下一些代码可能会澄清这种情况:(当前时间是18:57,请花几分钟时间,直到我完成编写此申诉为止。
SSH到服务器:
$ timedatectl
Local time: Tue 2019-09-03 18:56:41 CEST
Universal time: Tue 2019-09-03 16:56:41 UTC
RTC time: Tue 2019-09-03 16:56:41
Time zone: Europe/Zurich (CEST, +0200)
System clock synchronized: yes
systemd-timesyncd.service active: yes
RTC in local TZ: no
SSH到服务器,运行mysql:
mysql> SELECT NOW();
+---------------------+
| NOW() |
+---------------------+
| 2019-09-03 18:58:13 |
+---------------------+
1 row in set (0.00 sec)
我坐在Windows计算机上。我计算机上的时间是18:59(所以是正确的)。时区为+01:00(伯尔尼)
>time
The current time is: 19:00:44.71
然后在Firefox上,我打开一个grafana面板并运行
SELECT NOW()
我看到2019-09-03 21:03:01我希望现在是19:03。 在仪表板设置中,时区设置为默认值。将其设置为UTC可以解决此问题,但是timeFilter将不起作用。
它在WHERE子句中生成以下条目:
time BETWEEN FROM_UNIXTIME(1567529449) AND FROM_UNIXTIME(1567530289)
要弄清楚现在是什么时候,我运行以下命令:
mysql> SELECT FROM_UNIXTIME(1567529449), FROM_UNIXTIME(1567530289);
+---------------------------+---------------------------+
| FROM_UNIXTIME(1567529449) | FROM_UNIXTIME(1567530289) |
+---------------------------+---------------------------+
| 2019-09-03 18:50:49 | 2019-09-03 19:04:49 |
+---------------------------+---------------------------+
1 row in set (0.00 sec)
这很好。当我直接在mysql中运行查询时,我看到了两次之间的数据点,但是图表为空,图表上的x轴显示了17:00至17:15之间的15分钟间隔。
时区使我感到困惑。有人可以看到这里发生了什么,需要修复什么?
更新: 我意识到I have to store time in the database as UTC time。现在,在grafana信息中心的默认时区下,我看到数据点位于正确的时间。
剩下的问题是__timeFilter宏无法产生正确的时间段。我选择了“最后6小时”,查询中看到的结果(2019年9月4日凌晨2点,在苏黎世)是
time BETWEEN FROM_UNIXTIME(1567534299) AND FROM_UNIXTIME(1567555899)
对应于 2019-09-03T18:11:39 + 00:00 和 2019-09-04T00:11:39 + 00:00 UTC时间。
所以我的图的x轴工作正常,但是timeFilter宏却不能。