上一篇已經教大家如何在 Ubuntu 22.04 安裝 Loki,今天就來談談如何透過 Promtail 日誌收集器將Windows Event Logs 推送到 Loki 並於 Grafana 進行可視化的展現吧。
我們可以把 Promtail 視為一種代理程式,負責傳送本地端的日誌到私有的 Loki 或者是 Grafana Cloud,並安裝在想要監控的應用程式的機器中。
主要負責的工作:
安裝 Promtail
從 Loki 存儲庫下載最新的發行版本
https://github.com/grafana/loki/releases
https://github.com/grafana/loki/releases/download/v2.7.1/promtail-windows-amd64.exe.zip
將其解壓縮後放到想要的位置,我們以 C:\promtail 作為範例
在 C:\promtail 目錄底下新增 promtail-local-config.yaml 文件
我們透過 windows_events 區塊告訴 Promtail 如何抓取 Windows Event Logs 並將傳送它們到 Loki。
https://github.com/grafana/loki/blob/main/docs/sources/clients/promtail/scraping.md
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: "./positions.yaml"
clients:
- url: http://your_loki_ip:3100/loki/api/v1/push
scrape_configs:
- job_name: windows
windows_events:
use_incoming_timestamp: false
bookmark_path: "./bookmark.xml"
eventlog_name: "Application"
xpath_query: '*'
labels:
job: windows
relabel_configs:
- source_labels: ['computer']
target_label: 'host'
書籤路徑 bookmark_path 負責記錄最後處理的事件,當 Promtail 重新啟動時需要它,以允許它從中斷的地方繼續讀取日誌。
<BookmarkList>
<Bookmark Channel='Application' RecordId='23520' IsCurrent='true'/>
</BookmarkList>
啟動服務
以系統管理員權限開啟命令提示字元,輸入下列指令啟動 Promtail。
cd C:\promtail
.\promtail-windows-amd64.exe --config.file=promtail-local-config.yaml
這樣便成功啟動 Promtail 並開始傳送 Application 事件紀錄到 Loki
此時回到 Grfana 使用 Loki 做為資料來源,透過 Explore 便可以看到推送過來的紀錄了。
點選 channel 與 job 標籤的屬性當作查詢條件,點選 Show Logs。
如果需要,您可以通過 Relabeling 重新標記預設的標籤。
如上面的範例我們將預設的 computer 標籤重新標記成 host
當 Promtail 接收到一個事件時,它將附加 channel 和 computer 標籤,並將事件序列化成 JSON 格式。
註冊服務
接下來要將剛剛的指令註冊成服務,讓它每次開機自動執行。
我們透過 nssm 安裝並啟動 Windows 服務
https://blog.miniasp.com/post/2021/09/15/Useful-tools-the-Non-Sucking-Service-Manager
Windows 內建的註冊 Windows 服務的工具 sc.exe 跟 New-Service 註冊服務後都無法正常運行。
下載並將 nssm.exe 解壓縮到 C:\promtail 底下
https://nssm.cc/release/nssm-2.24.zip
開啟命令提示字元,輸入下列指令
cd C:\promtail
nssm install "Promtail Agent"
Application Path 選擇 C:\promtail\promtail-windows-amd64.exe
Application Arguments 輸入 --config.file=promtail-local-config.yaml
最後按下 Install Servcie 即可註冊成 Windows 服務
需要注意的是可執行檔所在路徑為 C:\promtail\nssm.exe,如果 nssm.exe 被移動到其他位置服務將無法啟動。
或者請將 nssm.exe 擺在一個確定不會異動或刪除的路徑
Promtail Pipeline 日誌處理
各位看官應該有注意到使用官方提供的 Scrape Configs 實在太過陽春,所以接下來我們要介紹 Promtail Pipeline 日誌處理,Pipeline 用於轉換單行日誌、標籤與時間戳。
Pipeline 至少由一個 Stages 階段組成,而階段有 4 種類型:
修改 promtail-local-config.yaml 文件,內容如下。
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: "./positions.yaml"
clients:
- url: http://your_loki_ip:3100/loki/api/v1/push
scrape_configs:
- job_name: windows
windows_events:
eventlog_name: "Application"
use_incoming_timestamp: true
xpath_query: '*'
bookmark_path: "./bookmark-application.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:
- 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:
這邊我們多新增一個 Job 來推送系統日誌並使用了兩個階段來處理日誌
再回到 Grfana 的 Explore 可以看到推送過來的日誌多了許多標籤可以讓我們進行過濾條件。
雖然 Explore 非常適合系統管理人員快速進行操作,但對於初次使用的用戶或在半夜收到告警的人來說,它也可能有點令人生畏。
下一篇我們將教大家如何擁有自己的儀表板,除了實作 Explore 的現有的功能,還可以簡單地透過預先設置的標籤進行搜索,以幫助一些團隊在故障排除時快速找到他們正在尋找的東西。
參考文件