Grok是一種流行的日志解析工具,可將任何結構化和非結構化數據解碼為可查詢的格式。當與JSON日志一起使用時,Grok可以輕松地匹配和提取JSON數據。下面將介紹如何使用Grok對JSON日志進行解析。
input { file { path =>"/var/log/nginx/access.log" codec =>json } } filter { grok { match =>{ "message" =>"%{COMBINEDAPACHELOG}" } } date { match =>[ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ] } }
在上面的代碼片段中,我們使用了一個名為“codec”的參數,它表示輸入數據的編碼格式。在這種情況下,我們使用了JSON的編碼格式。然后,我們使用Grok將帶時間戳的消息提取出來,并使用DATE插件將時間戳正確地解碼為可用的日期格式。
下面是Grok如何匹配JSON數據的示例:
{ "timestamp": "2020-06-01T12:01:43+00:00", "client_ip": "192.168.1.1", "request": "GET /index.html HTTP/1.1", "response_code": 200, "bytes_sent": 1250 }
我們可以使用以下Grok表達式來匹配上面的JSON數據:
%{TIMESTAMP_ISO8601:timestamp} %{IPV4:client_ip} %{WORD:method} %{URIPATHPARAM:path} HTTP/%{NUMBER:http_version} %{NUMBER:response_code} %{NUMBER:bytes_sent}
上面的代碼片段將時間戳、客戶端IP地址、請求方法、請求路徑、HTTP版本、響應代碼和發送的字節數提取為字段。現在,我們可以使用Logstash的json插件將數據重新轉換為JSON格式:
output { stdout { codec =>json } file { path =>"/var/log/nginx/access.log-json" codec =>json } }
在上面的代碼片段中,我們使用了兩個輸出插件,一個是stdout,它將輸出轉儲到控制臺,另一個是file,它將輸出轉儲到文件中。
總之,使用Grok對JSON日志進行解析和提取是一項非常強大且常用的技能。我們可以使用JSON編碼格式來輕松讀取并提取JSON數據,然后將它們轉換回JSON格式以供使用。
上一篇python 降為一維
下一篇mysql原始數據備份