Logstash將日誌產生時間替換@timestamp,並保留日誌收集時間到其他字段

1.需求

EFK日誌系統採集日誌時,採集時間日誌真正生成的時間會有差異,開發一般需要根據日誌真正的生成時間在kibana中進行查詢

2.解決方案

將收集到的日誌的時間抽取出來,替換默認的@timestamp字段(將@timestamp字段賦值給其他字段用來記錄)

 

logstash的配置(測試環境):

filter {
    grok {
      match => {  "message" => "(\s*%{TIMESTAMP_ISO8601:timestamp}\s*\[.*\]\s*%{LOGLEVEL:loglevel}.*%{UUID:traceId})"  }
    }
    ruby {
        code => "event.set('collection_time', event.get('@timestamp'))"
    }
    date {
        match => ["timestamp", "yyyy-MM-dd HH:mm:ss.SSS"]
        target => "@timestamp"
    }
    mutate {
      remove_field => [ "host","timestamp" ]
    }
}

 

注意:@timestamp被賦值後會比當前時間少8h,所以需要在ruby代碼中設置

code => "event.set('collection_time', event.get('@timestamp')+8*60*60)"

注意:生產環境和測試環境輸出日誌的精度可能不一樣

比如,生產環境的日誌精度最後是四位,那麼date插件的配置如下:

match => ["timestamp", "yyyy-MM-dd HH:mm:ss.SSSS"]

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章