• Grafana 系列 (1):以 table 的方式顯示 Elasticsearch 的資料,並且在 dashboard 介面上輸入關鍵字即時查詢 Elasticsearch 的資料(转)


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

    先把目標 Elasticsearch index 跟 Grafana 串起來

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

     

    按下 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 的資料筆數折線圖,如下所示,表示成功:

     

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

     

    試著用 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 萬筆資料。

     

    但是要注意!Size 調高可能會出錯,因為 Elasticsearch 那邊也需要做設定才行。參考官方文件 Index modulesUpdate Indices Settings,設定目標 index 的 max_result_window 值,如下圖左邊。按下 Request 按鈕得到 true 的回應表示設定成功。

     

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

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

     

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

     

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

     

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

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

     

    設定 Dashboard 的變數 (Variable)

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

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

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

     

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

     

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

     

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

     

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

     

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

     

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


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

    結果是不行。例如輸入 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 萬筆的情況。

     

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

    Using Elasticsearch in Grafana

    Guide for using Elasticsearch in Grafana

    grafana.com

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


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

     

     

     

  • 相关阅读:
    [leetCode]09.用两个栈实现队列
    ubuntu:无法获得锁;无法锁定管理目录
    [leetCode]07.重建二叉树
    [leetCode]剑指 Offer 06. 从尾到头打印链表
    [leetCode]剑指 Offer 05. 替换空格
    [leetCode]1330.翻转子数组得到最大的数组值
    [leetCode]312.戳气球
    UVALive
    CodeChef
    CodeChef
  • 原文地址:https://www.cnblogs.com/jatq/p/13254870.html
Copyright © 2020-2023  润新知