iT邦幫忙

2025 iThome 鐵人賽

DAY 23
0

在 Graylog 中,Grok Patterns 提供了一套簡潔易用的方式,將複雜的日誌訊息依據預定義或自訂規則,解析成結構化欄位,以利後續搜尋、警示與可視化。

Grok Patterns 簡介

Grok Patterns 本質上是 容器化的正則表達式,透過易讀的關鍵字(如 %{IP}%{NUMBER})取代複雜的 regex 語法,並自動將匹配結果填入命名欄位。使用 Grok 可提高可維護性、降低人為錯誤,並加速日誌解析流程。

基本語法與結構

Grok 模式採用 %{PATTERN[:field_name]} 格式:

  • PATTERN:內建或自訂的正則片段
  • field_name:解析後之欄位名稱

常見內建模式:

%{IP:client_ip}         # IP位址  
%{WORD:verb}            # 單字(HTTP 方法等)  
%{NUMBER:bytes:int}     # 數值並轉型為整數  
%{TIMESTAMP_ISO8601:ts} # ISO8601 時間戳  

可用 System > Grok Patterns 檢視 Graylog 預設清單,並新增自訂項目。

建立 Grok Pattern 與 Extractor

  1. 登入 Graylog 後台,依序前往 System → Grok Patterns
  2. 點擊 Create Pattern,填入:
    • Name: MY_DATE
    • Pattern: \d{4}-\d{2}-\d{2}
  3. 新增後,於 Inputs → Extractors 建立新的 Grok Extractor:
    • Select Input: UDP Syslog
    • Extractor type: Grok Pattern
    • Source field: message
    • Pattern: %{MY_DATE:log_date}
    • 點擊 Try 進行測試,再按 Save

實用範例

Apache 日誌解析

日誌範例:

127.0.0.1 - frank [10/Oct/2025:13:55:36 +0800] "GET /index.html HTTP/1.1" 200 1024

簡要 Grok Pattern:

%{IP:client_ip} - %{WORD:user} \[%{HTTPDATE:ts}\] "%{WORD:method} %{DATA:path} HTTP/%{NUMBER:ver}" %{NUMBER:code:int} %{NUMBER:bytes:int}  

此範例將解析出:client_ip、user、ts、method、path、ver、code、bytes。

系統日誌格式

日誌範例:

Oct 07 16:30:00 host1 sshd[1234]: Accepted password for user1 from 10.0.0.5 port 53524

Grok Pattern:

%{SYSLOGTIMESTAMP:timestamp} %{HOSTNAME:host} %{WORD:prog}\[%{NUMBER:pid}\]: %{GREEDYDATA:message}  

忽略無關欄位

若需排除不必要欄位,可在欄位名稱使用特殊關鍵字 UNWANTED

%{WORD:UNWANTED} %{GREEDYDATA:msg} 

此時 skip 欄位不會儲存至訊息文件。

最佳實踐與注意事項

  • 啟用 Named captures only:避免多餘的數字分組干擾。
  • 保持模式簡潔:複雜時可拆分成多個 Extractor。
  • 測試與 Debug:使用 Grok Debugger 外掛或 Graylog 的 Try 功能,確認欄位正確解析。
  • 版本相容性:Graylog 已內建多數常用模式,僅在特殊案例下自訂 Patterns。

透過掌握 Grok Patterns,能有效提升 Graylog 日誌解析效率,讓後續查詢與警示更精準。


上一篇
Day 22: Content Packs
下一篇
Day 24: Lookup Tables 入門指南
系列文
從零開始的 graylog 探險24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言