SQL NOW()函数从grafana和mysql返回不同的值

时间:2019-09-03 17:17:41

标签: mysql linux grafana

我有一个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宏却不能。

0 个答案:

没有答案