1. 程式人生 > >Grafana中踩過的坑

Grafana中踩過的坑

1、時間戳

遇到將過去某一時間範圍內的放到今天顯示的需求,琢磨的一陣,是可以的。
t i m e S e r i

e s timeSeries以及 timeFilter的變化技巧

SELECT
    $timeSeries+86400*7*1000 as t,
    domain,
    sum(hit) as hit_2
FROM $table
WHERE date = today(
) - 7 AND datetime >= toDateTime($timeFilter-toDateTime(86400*7)) GROUP BY t,domain ORDER BY t,domain

2、group by 的技巧

$colums()的功能有限,當需要多個select或group by多列時。其實查詢出來是想要的結果,但在圖上未表現出來,即沒有聚合(一條線)
例如:本來應該寫成:

SELECT
    $timeSeries+86400*7*1000 as t,
    domain,
    sum(hit) as hit_2
FROM $table
WHERE date
= today() - 7 AND datetime >= toDateTime($timeFilter-toDateTime(86400*7)) GROUP BY t,domain ORDER BY t,domain

最後需要寫成(顯示多條線):

SELECT t,groupArray((domain, diff)) as groupArr 
FROM
(SELECT
    $timeSeries+86400*7*1000 as t,
    domain,
    sum(hit) as hit_2
FROM $table
WHERE date = today() - 7
AND datetime >= toDateTime($timeFilter-toDateTime(86400*7))
GROUP BY t,domain
ORDER BY t,domain)
GROUP BY t ORDER BY t

3、表格

操作表格時,需要將Metrics下方的Format as選擇Time series改為Table。表格的group by多列可以直接寫SQL。

4、時間datetime/ts/time

在選擇資料庫時,檢查Metrics下方的date有沒有需要填寫的時間列。

5、pie/donut圖

pie/donut圖需要有一個額外的sum(1) as tp,這樣圖形才能正常顯示 。

SELECT
sum(1) as tp,
sum(duration/60 <= 1) as  le1min,
sum(duration/60 > 1 AND duration/60<=2) as in1_2min,
sum(duration/60 > 2) as gt2min
FROM $table
WHERE $timeFilter

6、圖例或者變數等中文顯示

圖例或者變數等中文顯示需要反引號就可以 。

SELECT
sum(1) as tp,
sum(duration/60 <= 1) as  `小於1min`,
sum(duration/60 > 1 AND duration/60<=2) as `1-2min`,
sum(duration/60 > 2) as `大於2min`
FROM $table
WHERE $timeFilter