iT邦幫忙

1

如何使用 Loki 創建用於搜索 Windows 日誌的 Grafana 儀表板

  • 分享至 

  • xImage
  •  

上一篇們已經教大家如何將 Windows Event Logs 推送到 Grafana Loki,透過 Explore 功能透過預先設置的標籤進行日誌搜索。

雖然 Explore 非常適合熟悉 LogQL 的系統管理員用來快速進行除錯,但對於初次使用或在第一線的 Help Desk 的人員來說,它就有點不友善了。

所以我們將教大家如何透過模板變量創建用於搜索日誌的 Grafana 儀表板

如果您的 Grafana 功能跟我不太一樣,請先升級至最新版本 9.3.2。

複習一下在 promtail-local-config.yaml 中,我們用 Pipeline Stages 將日誌轉成 JSON 格式並將 source、event_id 與 leveltext 欄位貼上標籤。

- job_name: windows
  windows_events:
    eventlog_name: "System"
    use_incoming_timestamp: true
    xpath_query: '*'
    bookmark_path: "./bookmark-system.xml"
    exclude_event_data: true
    exclude_user_data: true
    labels:
      logsource: windows-eventlog
  pipeline_stages:
  - json:
      expressions:
        source: source
        eventID: event_id
        level: levelText
  - labels:
      source:
      eventID:
      level:

我們希望這些欄位與預設產生的 Channel 與 Computer 標籤,都可以成為儀表板的過濾條件。

建立一個 Windows EventLogs 儀表板,點選 Setting 中的 Variables。

General

  • Name 輸入 computer 當作變數名稱使用
  • Label 輸入電腦做為顯示名稱

Query options

  • Data Source 選擇 Loki
  • Query Type 選擇 Label vaules,Label 選擇 computer
  • Sort 就依照個人喜好選擇
  • Refresh 選擇 On dashboard load

Selection options

  • 勾選 Multi-value
  • 勾選 Include All option

若都有配置正確,Preview of vaules 會出現您想要的變數數值,按下 Apply 後,即建立完成。

若變數出現橘色警告,那是因為儀錶板還沒有任何 LogQL 使用該變數。

依序建立 channel、level、source 與 eventID 變數

Dashboard
回到儀錶板,此時變數已成為可挑選的下拉選項。

新增一個 Panel,資料來源選擇 Loki。

Label browser 輸入 LogQL 語法如下,日誌流選擇器帶入我們設定的變數。

{computer=~"$computer",channel=~"$channel",level=~"$level",source=~"$source",eventID=~"$eventID"}

點擊 Open visualization suggestions

挑左邊的 Logs 可視化

順便填入 Title 為 Logs Panel,打開 Logs 時間顯示。

按下 Apply 後,日誌會根據我們的變數條件篩選出來了。

接下來我們想要知道時間序列內事件的數量

新增一個 Panel,選擇 Time series 可視化。資料來源選擇 Loki,順便填入 Title 為 Logs Volume。

Label browser 輸入 LogQL 語法如下,日誌流選擇器帶入我們設定的變數。

可根據下拉選項的過濾,依照事件等級的數量進行統計。

sum by (level) (count_over_time({computer=~"$computer",channel=~"$channel",source=~"$source",eventID=~"$eventID"} [$__interval]))

Query Options 可以使用 Legend 對 {{level}} 標籤值進行重寫

Graph styles 選擇 Bars 進行呈現,Stack series 選擇 Normal 將統計結果堆疊在一起。

按下 Apply 後,我們就完成了一個用於搜索日誌的儀表板。

第一線的 Help Desk 的人員即使不懂得 LogQL 語法也可以透過該儀表板,快速地協助團隊進行故障排除與分析。

搜尋功能
除了透過下拉式選單來過濾事件,若想要透過關鍵字來查找日誌也是可以的,接下來我們把搜尋功能也放進去吧。

回到 Setting 中的 Variables,這次我們建立一個 Text box 類型的變數。

  • Name 輸入 search 當作變數名稱使用
  • Label 輸入搜尋做為顯示名稱

替代 Logs Panel 的 LogQL 語法如下

{computer=~"$computer",channel=~"$channel",level=~"$level",source=~"$source",eventID=~"$eventID"} |~ "(?i)$search"

替代 Logs Volume 的 LogQL 語法如下

sum by (level) (count_over_time({computer=~"$computer",channel=~"$channel",source=~"$source",eventID=~"$eventID"} |~ "(?i)$search" [$__interval]))

可以用 (?i) 做為正規表達式的前缀,切換為不區分大小寫。

順便讓 Logs Volume 顯示加總的數值, Legend 的 Values 選擇 Count。

接著再把事件等級顏色重寫成你想要的顏色

回到儀表板便多了一個搜尋欄位可以進行關鍵字搜尋,Logs Volume 加總的數值與 Logs Panel 也會依照關鍵字進行更新。

今天的教學就到這邊,希望有幫助到大家。

參考文件

  1. https://grafana.com/blog/2020/04/08/loki-quick-tip-how-to-create-a-grafana-dashboard-for-searching-logs-using-loki-and-prometheus/
  2. https://grafana.com/blog/2022/11/15/grafana-9.2-create-edit-queries-easier-with-the-new-grafana-loki-query-variable-editor/

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言