【问题标题】:Grafana graphing with Postgres JSON datatype not working使用 Postgres JSON 数据类型的 Grafana 绘图不起作用
【发布时间】:2019-10-14 14:37:06
【问题描述】:

我正在为我工​​作的公司的内部仪表板设置 Grafana。我们有一个可以跟踪的电话系统,并将指标保存在数据库中。我已经提取了关键指标并将它们存储在 Postgres 数据库中。这是它的样子:

postgres=# SELECT * FROM phonedata LIMIT 5;
 id |    date    |                                       data                                       
----+------------+----------------------------------------------------------------------------------
 16 | 2019-05-27 | {"avgDuration": "608", "avgQueuetime": "0:02:46.716667", "voicemailCount": "6"}
 17 | 2019-05-26 | {"avgDuration": "676", "avgQueuetime": "None", "voicemailCount": "0"}
 18 | 2019-05-25 | {"avgDuration": "506", "avgQueuetime": "0:01:32.684211", "voicemailCount": "1"}
 19 | 2019-05-24 | {"avgDuration": "540", "avgQueuetime": "0:02:14.784091", "voicemailCount": "11"}
 20 | 2019-05-23 | {"avgDuration": "616", "avgQueuetime": "0:03:09.433962", "voicemailCount": "10"}
(5 rows)

此数据显示日期的统计信息,如“日期”列中所示。这一切都很好。我有过去 90 天的数据,所以没有数据不足的问题。

现在我正在尝试在 Grafana 上制作一个图表,显示每天一个电话的平均持续时间,但我无法让它工作。

这是我编写的代码图像和 Grafana 上的图表的链接。 StackOverflow 不允许我直接发布图片

https://i.imgur.com/3uQe9t5.png

下面是写出来的代码:

SELECT
    date AS "time",
    data->>'avgDuration'::VARCHAR as "values"
FROM
    phonedata
WHERE
    $__timeFilter(date) AND
    data->>'avgDuration' NOT ilike 'None'
ORDER BY 1

我觉得我已经很接近了,但还不是很接近。我已经尝试了许多不同的变体,但无法弄清楚。

任何帮助都会是巨大的。

谢谢

(我正在运行 Grafana v5.4.2(提交:d812109))

【问题讨论】:

    标签: json postgresql grafana


    【解决方案1】:

    我已经搞定了。

    我相信这是由时区引起的。我在一些 Grafana 论坛上发现了一个讨论,讨论了一个问题,当返回数据时,它会在表格上显示的所有内容都是“1.56 Tri”。我更改了数据库的架构,我将数据列从类型 DATE 更改为类型 TIMESTAMPTZ。

    这是 PostgreSQL 表现在的样子:

    postgres=# SELECT * FROM phonedata LIMIT 5;
     id |          date          |                                   data
    ----+------------------------+---------------------------------------------------------------------------
      1 | 2019-06-03 00:00:00+12 | {"avgDuration": "543", "avgQueuetime":"0:04:13", "voicemailCount": "7"}
      2 | 2019-06-02 00:00:00+12 | {"avgDuration": "524", "avgQueuetime":"None", "voicemailCount": "2"}
      3 | 2019-06-01 00:00:00+12 | {"avgDuration": "573", "avgQueuetime":"0:03:04", "voicemailCount": "6"}
      4 | 2019-05-31 00:00:00+12 | {"avgDuration": "621", "avgQueuetime":"0:02:14", "voicemailCount": "15"}
      5 | 2019-05-30 00:00:00+12 | {"avgDuration": "729", "avgQueuetime":"0:02:39", "voicemailCount": "5"}
    (5 rows)
    

    这就是 Grafana 代码现在的样子:

    SELECT
      phonedata.date AS time,
      ((data->>'avgDuration')::NUMERIC) as values
    FROM
      phonedata
    WHERE
      $__timeFilter(phonedata.date)
    

    这就是图表现在的样子:

    我还发现,如果无法将任何值转换为 NUMERIC,则图表将无法继续绘制。我会有一天 avgDuration 为“无”,因为那天没有打电话,这会破坏图表。因此,如果它发生在 5 天前,它会绘制前 4 天的图表,在第 5 天失败,然后再到第 6 天。

    【讨论】:

      猜你喜欢
      • 2012-04-16
      • 2020-10-03
      • 1970-01-01
      • 1970-01-01
      • 2018-07-08
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多