在 Graylog 中,Grok Patterns 提供了一套簡潔易用的方式,將複雜的日誌訊息依據預定義或自訂規則,解析成結構化欄位,以利後續搜尋、警示與可視化。
Grok Patterns 本質上是 容器化的正則表達式,透過易讀的關鍵字(如 %{IP}
、%{NUMBER}
)取代複雜的 regex 語法,並自動將匹配結果填入命名欄位。使用 Grok 可提高可維護性、降低人為錯誤,並加速日誌解析流程。
Grok 模式採用 %{PATTERN[:field_name]}
格式:
常見內建模式:
%{IP:client_ip} # IP位址
%{WORD:verb} # 單字(HTTP 方法等)
%{NUMBER:bytes:int} # 數值並轉型為整數
%{TIMESTAMP_ISO8601:ts} # ISO8601 時間戳
可用 System > Grok Patterns
檢視 Graylog 預設清單,並新增自訂項目。
MY_DATE
\d{4}-\d{2}-\d{2}
message
%{MY_DATE:log_date}
日誌範例:
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
欄位不會儲存至訊息文件。
透過掌握 Grok Patterns,能有效提升 Graylog 日誌解析效率,讓後續查詢與警示更精準。