除了透過查詢語法將原始資料做完群組後,在圖表上呈現。亦可以透過Grafana中的Transform來將查詢回來的原始資料進行後處理,最後呈現於圖表中。
What is Transform in Panel
在編輯Panel時,可透過Transform對查詢回來的原始資料進行後處理,包含計算、重新命名、新增欄位、排序...等等。若是使用圖形化的Panel,建議先將上方的Table
View打開,來查看資料經過Transform處理的結果,最後資料後處理完成時,在查看圖形化的結果。
接下來,將透過簡單的範例示範如何利用Transform整理資料。
首先,我們查詢選定時間區間內,所有伺服器及其硬碟的使用率資料,查詢結果將依據不同的tags(host、device、path...等)分為五個表格。flux查詢語法如下:
from(bucket: "${bucket}") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement"] == "disk") |> filter(fn: (r) => r["_field"] == "used_percent") |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> yield(name: "mean")
Labels to fields
在influxDB 2.0中的tags在Grafana中稱為labels,表示為這組資料的標註。透過Labels
to fields的處理方式,可將所有的label轉換為欄位。
在Labels to fields中,可以處理的設定還包含:
- Mode :
Columns會將所有的labels都轉為欄位;而Rows則會以列來顯示所有label的值。 - Labels : Mode為Columns時,可選擇要轉為欄位的labels。
Merge
在上一步,雖然已經將Labels轉為欄位。因此,我們可以依據相同的欄位名稱合併所有的表格,此步驟可透過Merge來實現。
Group by
所有表格已經合併為單一表格時,可透過Group by來整合資料。在Group
by設定中,必須先選擇要依據哪一個欄位(或多個欄位)來合併,該欄位在下拉選單中選擇『Group
by』;其餘需要計算的欄位,選擇『Calculate』,計算方式可自由選擇,最常用的包含:
- Last:最後一筆資料
- Mean:依據Group by欄位取得該值的平均數
- Distinct Count:計算該欄位不重複的值有幾個
Sort
在前一步驟中,可依據所有Host及path取得硬碟使用率的平均。透過Sort將資料依據平均使用率從高到低排序,讓表格更易於閱讀。Sort中的參數包含:
- field : 排序的欄位
- Reverse : 由高到低排序或由低到高排序