B i M A P

Grafana|How to setup variable makes dashboard more flexible - Part II

上一章我們設定了許多變數,現在來試著用用看吧!

How to Use Variable in Panels

  • 如何引用變數進flux查詢語法? 用${variable_name}引用變數值,例如:
from(bucket: "${bucket}")
  • 可以多選的變數怎麼辦呢? 用正規表達式來模糊比對${variable_name:regex},例如:

filter(fn: (r) => r["_measurement"] =~ /${measurement:regex}/)
  • 利用所選的measurement和對應的field畫圖,將所有的資料畫圖flux查詢語法法如下:
from(bucket: "${bucket}")
    |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
    |> filter(fn: (r) => r["host"] =~ /${host:regex}/)
    |> filter(fn: (r) => r["_measurement"] =~ /${measurement:regex}/)
    |> filter(fn: (r) => r["_field"] =~ /${field:regex}/)
    |> rename(columns:{_measurement:"measurement"})
    |> aggregateWindow(every: v.windowPeriod, fn: mean)

Use Variable to Duplicate Panels

當很多個host和很多measurement都在同一張圖時,很不容易看。這時候就可以利用variable另一個好用的地方,就是自動產生多張圖表!

  • 自動產生相同的圖:在編輯panel時,可在Panel options選擇重複panel的方式。
    • 選擇變數(會依照變數值有幾個而自動產生)
    • Horizontal:圖會橫向自動產生(同時要選擇橫排最多幾張)/  Vertical:圖會往下自動產生
    • 建議在Panel Title加入Repeat的變數,讓表頭可以看出這張讀的變數值。
    • 查詢語法更新:將原來measurement的模糊比較filter改為判斷是否等於變數measurement,因為每個圖的查詢語法,將只會讀取該變數的多個值得其中一個;若變數有多個值,將會產生多個圖表對應相對應的變數值。
     from(bucket: "${bucket}")
        |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
        |> filter(fn: (r) => r["host"] =~ /${host:regex}/)
        |> filter(fn: (r) => r["_measurement"] == "${measurement}")  ##修改了這裡
        |> filter(fn: (r) => r["_field"] =~ /${field:regex}/)
        |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  • 依類別自動產生相同類別的圖
    • 先新增Raw,並將相同類別的圖表放在Raw下面
    • 點選Raw的編輯
    • Repeat For選擇希望圖表的分類指標變數
    • 建議在Title加入Repeat的變數,讓Raw可以看出是讀取哪個變數值
    • 查詢語法更新:將原來host的模糊比較filter改為判斷是否等於變數host,因為每個圖的查詢語法,將只會讀取該變數的多個值得其中一個;若變數有多個值,將會產生多個圖表對應相對應的變數值。
    from(bucket: "${bucket}")
        |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
        |> filter(fn: (r) => r["host"] == "${host}")                 ##修改了這裡
        |> filter(fn: (r) => r["_measurement"] == "${measurement}")
        |> filter(fn: (r) => r["_field"] =~ /${field:regex}/)
        |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)

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

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