我正在尝试按时间在 Grafana 中显示 HTTP 状态代码。 数据像这样存储在 InfluxDB 中(简化):
# time,status,bytesize
2024-04-27 11:24:00, 404,100
2024-04-28 01:24:00, 200,100
...
目前我使用SQL进行查询:
SELECT $__dateBin(time) AS time,
COUNT(CASE WHEN "status" BETWEEN 200 AND 299 THEN 1 END) AS "2xx",
COUNT(CASE WHEN "status" BETWEEN 400 AND 499 THEN 1 END) AS "4xx",
COUNT(CASE WHEN "status" >= 500 THEN 1 END) AS "5xx"
FROM http_requests
GROUP BY $__dateBin(time)
如您所见,值显示正确,但点是直接连接的,并且图形不会返回到基线 (0)。
我该如何解决这个问题?
我能够通过利用 InfluxDB 的 date_bin_gapfill 函数来实现空行。它可以与 Grafana 中的
$__interval
变量一起使用:
SELECT
date_bin_gapfill($__interval, time) as _time,
COUNT(CASE WHEN "status" BETWEEN 200 AND 299 THEN 1 END) AS "2xx",
COUNT(CASE WHEN "status" BETWEEN 400 AND 499 THEN 1 END) AS "4xx",
COUNT(CASE WHEN "status" >= 500 THEN 1 END) AS "5xx"
FROM "http_requests"
WHERE
time >= $__timeFrom
AND time <= $__timeTo
GROUP BY _time, status
ORDER BY _time
这使得图表看起来符合预期。