Logstash Parse Timestamp

  1. 前言
  2. Logstash Parse Timestamp
  3. Grok debugger
  4. 重啟服務 查看 timestamp 是否有被parse成功

前言

繼上一篇 w4560000 - ELK Stack 介紹建置範例後
最後發現 Timestamp 與 Log 紀錄 應用程式當下的Log時間 不符

其原因為 Filebeat會偵測檔案異動 而進行轉拋 Log 資料的動作,但還是會跟程式內 Log 的時間 有時間差
本篇範例在 Logstash 轉拋資料到 Elasticsearch 進行 Timestamp 處理,改取 Log 紀錄裡的時間
這樣在 Kibana 搜尋時間時,才能知道 Log 發生的精準時間

Logstash Parse Timestamp

上一篇 w4560000 - ELK Stack 在 logstash/conf.d 建立了 logstash.conf
這次需再建立另一個 .conf檔 用來 Parse 時間欄位

在 logstash/conf.d 底下 建立 logstash-custom.conf (檔案名稱可自定義)

vi logstash-custom.conf
filter {
    if [fields][service] == "weblog" {
        grok {
            match => ["message", "%{TIMESTAMP_ISO8601:timestamp} %{NUMBER:threadid} %{LOGLEVEL:loglevel} %{NOTSPACE:logger} %{SPACE}%{GREEDYDATA:message}"]
            overwrite => [ "message" ]
        }
        date {
            match => [ "timestamp", "yyyy-MM-dd HH:mm:ss.SSS" ]
            timezone => "UTC"
        }
        mutate {
            convert => {
                "threadid" => "integer"
            }
            add_field => {
                "webtype" => "%{[fields][webtype]]}"
            }
        }
    }
}

logstash 能使用多個 .conf檔 是因為在上一篇 w4560000 - ELK Stack docker-compose.yml 中
設定logstash 的 command: -f /etc/logstash/conf.d/
代表會吃 /etc/logstash/conf.d/ 底下的所有.conf設定,故 logstash-custom.conf 的設定才能生效

Grok debugger

kibana有提供 grok pattern debugger 頁面 http://YourIP:5601/app/kibana#/dev_tools/grokdebugger
可用來測試 Log 與 grok pattern 格式 是否符合

重啟服務 查看 timestamp 是否有被parse成功

原始Log檔

2022-04-17 17:01:56.338 26 INFO ELK_Test.Controllers.LogTestController   Nlog Test Value: 測試Timestamp 

經過Logstash Parse後
原先的Log 已經被 Parse 成 timestamp & threadid & loglevel & logger & message 各個欄位

message 異動前

message 異動後


轉載請註明來源,若有任何錯誤或表達不清楚的地方,歡迎在下方評論區留言,也可以來信至 leozheng0621@gmail.com
如果文章對您有幫助,歡迎斗內(donate),請我喝杯咖啡

斗內💰

×

歡迎斗內

github