B i M A P

Grafana | How to Use Transform to Grouping Data

除了透過查詢語法將原始資料做完群組後,在圖表上呈現。亦可以透過Grafana中的Transform來將查詢回來的原始資料進行後處理,最後呈現於圖表中。

What is Transform in Panel

在編輯Panel時,可透過Transform對查詢回來的原始資料進行後處理,包含計算、重新命名、新增欄位、排序...等等。若是使用圖形化的Panel,建議先將上方的Table View打開,來查看資料經過Transform處理的結果,最後資料後處理完成時,在查看圖形化的結果。

grafana | transform and table view

接下來,將透過簡單的範例示範如何利用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")

grafana | tables of raw data

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。

grafana | transform - labels to fields

Merge

在上一步,雖然已經將Labels轉為欄位。因此,我們可以依據相同的欄位名稱合併所有的表格,此步驟可透過Merge來實現。

grafana | transform - merge

Group by

所有表格已經合併為單一表格時,可透過Group by來整合資料。在Group by設定中,必須先選擇要依據哪一個欄位(或多個欄位)來合併,該欄位在下拉選單中選擇『Group by』;其餘需要計算的欄位,選擇『Calculate』,計算方式可自由選擇,最常用的包含:

  • Last:最後一筆資料
  • Mean:依據Group by欄位取得該值的平均數
  • Distinct Count:計算該欄位不重複的值有幾個

grafana | transform - group by

Sort

在前一步驟中,可依據所有Host及path取得硬碟使用率的平均。透過Sort將資料依據平均使用率從高到低排序,讓表格更易於閱讀。Sort中的參數包含:

  • field : 排序的欄位
  • Reverse : 由高到低排序或由低到高排序

grafana | transform - sort

延伸閱讀
jessie.shen的大頭照
Grafana 達人

在大數據時代,如何透過視覺化圖表及分析工具,是每間數位轉型中的公司必學的課程。在多不勝數的軟體工具中,我們期望透過ELK、InfluxDB、Grafana等開源軟體,與企業夥伴一同邁向成功!