Grafana 系列 (1):以 table 的方式顯示 Elasticsearch 的資料,並且在 dashboard 介面上輸入關鍵字即時查詢 Elasticsearch 的資料(转) 先把目標 Elasticsearch index 跟 Grafana 串起來 試畫 Fortigate ES 的圖 試著用 Table 直接顯示 Elasticsearch 的資料 實驗:Dashboard 時間區間的選擇與 Panel 資料筆數的優先權? 設定 Dashboard 的變數 (Variable) 實驗:輸入的關鍵字可以使用星號 * 嗎? 實驗:用 Datatable plugin 可以做到這個即時查詢的效果嗎? 問題:Querying Logs 的這個新功能 (Grafana v6.3+) 可以做到這個即時查詢的效果嗎?

Grafana 系列 (1):以 table 的方式顯示 Elasticsearch 的資料,並且在 dashboard 介面上輸入關鍵字即時查詢 Elasticsearch 的資料(转)
先把目標 Elasticsearch index 跟 Grafana 串起來
試畫 Fortigate ES 的圖
試著用 Table 直接顯示 Elasticsearch 的資料
實驗:Dashboard 時間區間的選擇與 Panel 資料筆數的優先權?
設定 Dashboard 的變數 (Variable)
實驗:輸入的關鍵字可以使用星號 * 嗎?
實驗:用 Datatable plugin 可以做到這個即時查詢的效果嗎?
問題:Querying Logs 的這個新功能 (Grafana v6.3+) 可以做到這個即時查詢的效果嗎?

文章出处:https://medium.com/@maiccaejfeng/grafana-%E4%BB%A5-table-%E7%9A%84%E6%96%B9%E5%BC%8F%E9%A1%AF%E7%A4%BA-elasticsearch-%E7%9A%84%E8%B3%87%E6%96%99-%E4%B8%A6%E4%B8%94%E5%9C%A8-dashboard-%E4%BB%8B%E9%9D%A2%E4%B8%8A%E8%BC%B8%E5%85%A5%E9%97%9C%E9%8D%B5%E5%AD%97%E5%8D%B3%E6%99%82%E6%9F%A5%E8%A9%A2-elasticsearch-%E7%9A%84%E8%B3%87%E6%96%99-b7f3ea0204a3

輸入查詢關鍵字、顯示查詢結果,都在 Grafana 的 Dashboard 上操作。


目標需求:

  1. http://192.168.70.124:9200/) 裡面有一些從 Fortigate、Paloalto 收來的 syslog,index 名稱分別是 fortigate_fortiwifi-60c、paloalto_pa-500。documents 的欄位都是 timestamp 跟 message (也就是 syslog) 而已。
  2. 希望可以在 Grafana 輸入關鍵字,然後就出現符合這個關鍵字的有哪些 documents。

在 Grafana > Configuration > Data Sources > Add data source > Elasticsearch 做以下設定:

 
Grafana 系列 (1):以 table 的方式顯示 Elasticsearch 的資料,並且在 dashboard 介面上輸入關鍵字即時查詢 Elasticsearch 的資料(转)
先把目標 Elasticsearch index 跟 Grafana 串起來
試畫 Fortigate ES 的圖
試著用 Table 直接顯示 Elasticsearch 的資料
實驗:Dashboard 時間區間的選擇與 Panel 資料筆數的優先權?
設定 Dashboard 的變數 (Variable)
實驗:輸入的關鍵字可以使用星號 * 嗎?
實驗:用 Datatable plugin 可以做到這個即時查詢的效果嗎?
問題:Querying Logs 的這個新功能 (Grafana v6.3+) 可以做到這個即時查詢的效果嗎?

按下 Save & Test 出現綠色 OK 表示串接成功。後來同事把 fortigate 的 index 改成分日期的 index,例如 fortigate_fortiwifi-60c.2019–07–17、fortigate_fortiwifi-60c.2019–07–18,就把 Elasticsearch details > Index name 改成 fortigate_* 表示要 fortigate_ 開頭的全部 indexes。

試畫 Fortigate ES 的圖

到 Grafana > Dashboards > Home > Create your first dashboard > New Panel > Add Query,在 Queries to 的下拉選單選擇剛剛的 Fortigate ES,會畫出 default 的資料筆數折線圖,如下所示,表示成功:

 
Grafana 系列 (1):以 table 的方式顯示 Elasticsearch 的資料,並且在 dashboard 介面上輸入關鍵字即時查詢 Elasticsearch 的資料(转)
先把目標 Elasticsearch index 跟 Grafana 串起來
試畫 Fortigate ES 的圖
試著用 Table 直接顯示 Elasticsearch 的資料
實驗:Dashboard 時間區間的選擇與 Panel 資料筆數的優先權?
設定 Dashboard 的變數 (Variable)
實驗:輸入的關鍵字可以使用星號 * 嗎?
實驗:用 Datatable plugin 可以做到這個即時查詢的效果嗎?
問題:Querying Logs 的這個新功能 (Grafana v6.3+) 可以做到這個即時查詢的效果嗎?

之後把圖的 title、legend 文字更新成資料筆數如下圖。Title 在 Panel > General > Title 那邊設定,legend 文字在 Panel > Queries > Alias 那邊設定。然後下圖還有更改資料的時間區間,所以才會長得跟上圖不一樣。

 
Grafana 系列 (1):以 table 的方式顯示 Elasticsearch 的資料,並且在 dashboard 介面上輸入關鍵字即時查詢 Elasticsearch 的資料(转)
先把目標 Elasticsearch index 跟 Grafana 串起來
試畫 Fortigate ES 的圖
試著用 Table 直接顯示 Elasticsearch 的資料
實驗:Dashboard 時間區間的選擇與 Panel 資料筆數的優先權?
設定 Dashboard 的變數 (Variable)
實驗:輸入的關鍵字可以使用星號 * 嗎?
實驗:用 Datatable plugin 可以做到這個即時查詢的效果嗎?
問題:Querying Logs 的這個新功能 (Grafana v6.3+) 可以做到這個即時查詢的效果嗎?

試著用 Table 直接顯示 Elasticsearch 的資料

這個 YouTube 影片,目標是想要在 Grafana 中,直接顯示跟 Elasticsearch 裡面一樣的資料。Elasticsearch 的欄位是 timestamp 跟 message,那麼 Grafana 的 table 欄位就是 timestamp 跟 message 這樣。Elasticsearch 資料如下圖:

好,在 Grafana 的做法是,開一個新的 panel,在 Queries 的地方 Query 的 data source 下拉選單選擇剛剛的 Fortigate ES,Metric 選擇 Raw Document,Size 預設是 10,000,這邊因為我們的資料有 8 萬多筆,所以我先設定 Size 是 10 萬,這表示這個 panel 可以顯示 10 萬筆資料。

 
Grafana 系列 (1):以 table 的方式顯示 Elasticsearch 的資料,並且在 dashboard 介面上輸入關鍵字即時查詢 Elasticsearch 的資料(转)
先把目標 Elasticsearch index 跟 Grafana 串起來
試畫 Fortigate ES 的圖
試著用 Table 直接顯示 Elasticsearch 的資料
實驗:Dashboard 時間區間的選擇與 Panel 資料筆數的優先權?
設定 Dashboard 的變數 (Variable)
實驗:輸入的關鍵字可以使用星號 * 嗎?
實驗:用 Datatable plugin 可以做到這個即時查詢的效果嗎?
問題:Querying Logs 的這個新功能 (Grafana v6.3+) 可以做到這個即時查詢的效果嗎?

Update Indices Settings,設定目標 index 的 max_result_window 值,如下圖左邊。按下 Request 按鈕得到 true 的回應表示設定成功。

 
Grafana 系列 (1):以 table 的方式顯示 Elasticsearch 的資料,並且在 dashboard 介面上輸入關鍵字即時查詢 Elasticsearch 的資料(转)
先把目標 Elasticsearch index 跟 Grafana 串起來
試畫 Fortigate ES 的圖
試著用 Table 直接顯示 Elasticsearch 的資料
實驗:Dashboard 時間區間的選擇與 Panel 資料筆數的優先權?
設定 Dashboard 的變數 (Variable)
實驗:輸入的關鍵字可以使用星號 * 嗎?
實驗:用 Datatable plugin 可以做到這個即時查詢的效果嗎?
問題:Querying Logs 的這個新功能 (Grafana v6.3+) 可以做到這個即時查詢的效果嗎?

{
“index”: { “max_result_window”: 100000 }
}

回到 Grafana 的 panel。在 Visualization 的地方選擇 Table,Table Transform 選擇 JSON Data,Columns 的地方輸入 Grafana table 想要呈現的 Elasticsearch index 欄位 (field),例如 timestamp、message。如下圖:

 
Grafana 系列 (1):以 table 的方式顯示 Elasticsearch 的資料,並且在 dashboard 介面上輸入關鍵字即時查詢 Elasticsearch 的資料(转)
先把目標 Elasticsearch index 跟 Grafana 串起來
試畫 Fortigate ES 的圖
試著用 Table 直接顯示 Elasticsearch 的資料
實驗:Dashboard 時間區間的選擇與 Panel 資料筆數的優先權?
設定 Dashboard 的變數 (Variable)
實驗:輸入的關鍵字可以使用星號 * 嗎?
實驗:用 Datatable plugin 可以做到這個即時查詢的效果嗎?
問題:Querying Logs 的這個新功能 (Grafana v6.3+) 可以做到這個即時查詢的效果嗎?

可以在 Column Styles 的地方為每個欄位 (這裡是 timestamp 跟 message) 做設定。在 Apply to columns names 輸入目標欄位的原始名稱 (例如:timestamp),Column Header 自訂在 Grafana table 顯示的欄位名稱 (例如:時間戳),Type 選擇欄位資料內容的類型 (例如:Date、String)。如下圖:

 
Grafana 系列 (1):以 table 的方式顯示 Elasticsearch 的資料,並且在 dashboard 介面上輸入關鍵字即時查詢 Elasticsearch 的資料(转)
先把目標 Elasticsearch index 跟 Grafana 串起來
試畫 Fortigate ES 的圖
試著用 Table 直接顯示 Elasticsearch 的資料
實驗:Dashboard 時間區間的選擇與 Panel 資料筆數的優先權?
設定 Dashboard 的變數 (Variable)
實驗:輸入的關鍵字可以使用星號 * 嗎?
實驗:用 Datatable plugin 可以做到這個即時查詢的效果嗎?
問題:Querying Logs 的這個新功能 (Grafana v6.3+) 可以做到這個即時查詢的效果嗎?

在 Panel > General 的地方設定 panel 的 Title 之後就可以啦!如下圖:

 
Grafana 系列 (1):以 table 的方式顯示 Elasticsearch 的資料,並且在 dashboard 介面上輸入關鍵字即時查詢 Elasticsearch 的資料(转)
先把目標 Elasticsearch index 跟 Grafana 串起來
試畫 Fortigate ES 的圖
試著用 Table 直接顯示 Elasticsearch 的資料
實驗:Dashboard 時間區間的選擇與 Panel 資料筆數的優先權?
設定 Dashboard 的變數 (Variable)
實驗:輸入的關鍵字可以使用星號 * 嗎?
實驗:用 Datatable plugin 可以做到這個即時查詢的效果嗎?
問題:Querying Logs 的這個新功能 (Grafana v6.3+) 可以做到這個即時查詢的效果嗎?

實驗:Dashboard 時間區間的選擇與 Panel 資料筆數的優先權?

在 Grafana dashboard 的右上角可以選擇時間區間,而在 dashboard 的每個 panel 可以設定資料筆數。若設定 panel 的資料筆數為 500 筆,時間區間為近 1 分鐘的話,那麼只會顯示近 1 分鐘的資料,如下圖所示,只有 4 筆資料。由此可知,Dashboard 時間區間的優先權是比 Panel 資料筆數高的!

 
Grafana 系列 (1):以 table 的方式顯示 Elasticsearch 的資料,並且在 dashboard 介面上輸入關鍵字即時查詢 Elasticsearch 的資料(转)
先把目標 Elasticsearch index 跟 Grafana 串起來
試畫 Fortigate ES 的圖
試著用 Table 直接顯示 Elasticsearch 的資料
實驗:Dashboard 時間區間的選擇與 Panel 資料筆數的優先權?
設定 Dashboard 的變數 (Variable)
實驗:輸入的關鍵字可以使用星號 * 嗎?
實驗:用 Datatable plugin 可以做到這個即時查詢的效果嗎?
問題:Querying Logs 的這個新功能 (Grafana v6.3+) 可以做到這個即時查詢的效果嗎?

設定 Dashboard 的變數 (Variable)

Dashboard 變數會出現在 dashboard 的最上面,可以讓使用者選擇,然後下面的圖表就會根據使用者的選擇做出變化。例如一個同時監控很多台 servers 的 dashboard,可以建立 server 變數,提供下拉式選單讓使用者選擇某一台 server,例如 server A,然後下方圖表就會變化成只有 server A 資料的圖表。

但是在這裡,我們的目標是想要有一個輸入 input 用來輸入想查找的關鍵字,輸入後下方 table 就顯示有該關鍵字的資料。

範例 Dashboard,按下 Dashboard 右上角 Dashboard settings 的小按鈕可以到設定 Dashboard 的地方。在 Dashboard > Dashboard settings > Variables 可以新增跟編輯變數,如下圖所示:

 
Grafana 系列 (1):以 table 的方式顯示 Elasticsearch 的資料,並且在 dashboard 介面上輸入關鍵字即時查詢 Elasticsearch 的資料(转)
先把目標 Elasticsearch index 跟 Grafana 串起來
試畫 Fortigate ES 的圖
試著用 Table 直接顯示 Elasticsearch 的資料
實驗:Dashboard 時間區間的選擇與 Panel 資料筆數的優先權?
設定 Dashboard 的變數 (Variable)
實驗:輸入的關鍵字可以使用星號 * 嗎?
實驗:用 Datatable plugin 可以做到這個即時查詢的效果嗎?
問題:Querying Logs 的這個新功能 (Grafana v6.3+) 可以做到這個即時查詢的效果嗎?

新增一個變數,Name 隨便取名為 adhoc (好像是可以用變數 $adhoc 來用在 panel 的 query 上)。Type 選擇 Ad hoc filters (可讓使用者新增 key/value filters 然後會自動被加在所有用該 Data source 的 metric queries)。Label 是出現在 dashboard 的文字。Data source 選擇目標的 Elasticsearch。如下圖:

 
Grafana 系列 (1):以 table 的方式顯示 Elasticsearch 的資料,並且在 dashboard 介面上輸入關鍵字即時查詢 Elasticsearch 的資料(转)
先把目標 Elasticsearch index 跟 Grafana 串起來
試畫 Fortigate ES 的圖
試著用 Table 直接顯示 Elasticsearch 的資料
實驗:Dashboard 時間區間的選擇與 Panel 資料筆數的優先權?
設定 Dashboard 的變數 (Variable)
實驗:輸入的關鍵字可以使用星號 * 嗎?
實驗:用 Datatable plugin 可以做到這個即時查詢的效果嗎?
問題:Querying Logs 的這個新功能 (Grafana v6.3+) 可以做到這個即時查詢的效果嗎?

建立完成後會出現在 Dashboard 的最上面:

 
Grafana 系列 (1):以 table 的方式顯示 Elasticsearch 的資料,並且在 dashboard 介面上輸入關鍵字即時查詢 Elasticsearch 的資料(转)
先把目標 Elasticsearch index 跟 Grafana 串起來
試畫 Fortigate ES 的圖
試著用 Table 直接顯示 Elasticsearch 的資料
實驗:Dashboard 時間區間的選擇與 Panel 資料筆數的優先權?
設定 Dashboard 的變數 (Variable)
實驗:輸入的關鍵字可以使用星號 * 嗎?
實驗:用 Datatable plugin 可以做到這個即時查詢的效果嗎?
問題:Querying Logs 的這個新功能 (Grafana v6.3+) 可以做到這個即時查詢的效果嗎?

按下+號,先選擇要查詢的目標欄位,例如 message。然後再輸入想查找的關鍵字,例如 dstintf=“wan1”。如下圖:

 
Grafana 系列 (1):以 table 的方式顯示 Elasticsearch 的資料,並且在 dashboard 介面上輸入關鍵字即時查詢 Elasticsearch 的資料(转)
先把目標 Elasticsearch index 跟 Grafana 串起來
試畫 Fortigate ES 的圖
試著用 Table 直接顯示 Elasticsearch 的資料
實驗:Dashboard 時間區間的選擇與 Panel 資料筆數的優先權?
設定 Dashboard 的變數 (Variable)
實驗:輸入的關鍵字可以使用星號 * 嗎?
實驗:用 Datatable plugin 可以做到這個即時查詢的效果嗎?
問題:Querying Logs 的這個新功能 (Grafana v6.3+) 可以做到這個即時查詢的效果嗎?

輸入以後,下面的所有 panel,只要是用同一個 data source 的,都會跟著變動,顯示符合查詢條件的查詢結果,達到我們想要達到的效果!如下圖所示,上面的查詢條件是欄位 message 值有包含 dstintf=“wan1” 的資料,下面的 panels 就都是符合查詢條件的資料:

 
Grafana 系列 (1):以 table 的方式顯示 Elasticsearch 的資料,並且在 dashboard 介面上輸入關鍵字即時查詢 Elasticsearch 的資料(转)
先把目標 Elasticsearch index 跟 Grafana 串起來
試畫 Fortigate ES 的圖
試著用 Table 直接顯示 Elasticsearch 的資料
實驗:Dashboard 時間區間的選擇與 Panel 資料筆數的優先權?
設定 Dashboard 的變數 (Variable)
實驗:輸入的關鍵字可以使用星號 * 嗎?
實驗:用 Datatable plugin 可以做到這個即時查詢的效果嗎?
問題:Querying Logs 的這個新功能 (Grafana v6.3+) 可以做到這個即時查詢的效果嗎?

如果沒有任何查詢條件,可以看到資料本來是有 dstintf=“wan1”、dstintf=“internal” 的差別的:

 
Grafana 系列 (1):以 table 的方式顯示 Elasticsearch 的資料,並且在 dashboard 介面上輸入關鍵字即時查詢 Elasticsearch 的資料(转)
先把目標 Elasticsearch index 跟 Grafana 串起來
試畫 Fortigate ES 的圖
試著用 Table 直接顯示 Elasticsearch 的資料
實驗:Dashboard 時間區間的選擇與 Panel 資料筆數的優先權?
設定 Dashboard 的變數 (Variable)
實驗:輸入的關鍵字可以使用星號 * 嗎?
實驗:用 Datatable plugin 可以做到這個即時查詢的效果嗎?
問題:Querying Logs 的這個新功能 (Grafana v6.3+) 可以做到這個即時查詢的效果嗎?

到這裡就算是達到想要的效果,成功!!!!!


實驗:輸入的關鍵字可以使用星號 * 嗎?

結果是不行。例如輸入 logid=0000000013 有資料,logid=000000001* 就沒資料。


實驗:用 Datatable plugin 可以做到這個即時查詢的效果嗎?

Datatable Panel plugin for Grafana

Datatable panel for Grafana

grafana.com

先講結論,資料量小的時候可以 (500 之類的),但資料量大的時候就不行 (10,000 反應速度就變超慢)。

Datatable plugin 可以讓資料做以下的效果,在右上角 Search 的地方輸入關鍵字,然後下方的 table 就會呈現查詢結果的資料。查的速度很快,但是缺點就是資料量一大,整個 loading 的速度就慢到不能接受的程度。所以這個方法不適用在我們資料量有將近 10 萬筆的情況。

 
Grafana 系列 (1):以 table 的方式顯示 Elasticsearch 的資料,並且在 dashboard 介面上輸入關鍵字即時查詢 Elasticsearch 的資料(转)
先把目標 Elasticsearch index 跟 Grafana 串起來
試畫 Fortigate ES 的圖
試著用 Table 直接顯示 Elasticsearch 的資料
實驗:Dashboard 時間區間的選擇與 Panel 資料筆數的優先權?
設定 Dashboard 的變數 (Variable)
實驗:輸入的關鍵字可以使用星號 * 嗎?
實驗:用 Datatable plugin 可以做到這個即時查詢的效果嗎?
問題:Querying Logs 的這個新功能 (Grafana v6.3+) 可以做到這個即時查詢的效果嗎?

問題:Querying Logs 的這個新功能 (Grafana v6.3+) 可以做到這個即時查詢的效果嗎?

Using Elasticsearch in Grafana

Guide for using Elasticsearch in Grafana

grafana.com

結論是不確定,就算可以也可能不是很理想。不理想的主要原因是 Querying Logs 的這個新功能是在 Explore 底下的,不是在 Dashboard 裡面的,就算可以做到即時查詢可能也沒辦法放在 Dashboard 裡面,所以不符合期待。


以上就是我一路上跌跌撞撞研究 Grafana 即時查詢的過程跟結果啦!看文件看到頭有點暈,幸好最後成功了~ :D