上一篇們已經教大家如何將 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
Query options
Selection options
若都有配置正確,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 類型的變數。
替代 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 也會依照關鍵字進行更新。
今天的教學就到這邊,希望有幫助到大家。
參考文件