Logstash 透過 filter 把 event timestamp 換成 log 日期

2019-07-05 Log

預設 Elasticsearch 本身 @timestamp 是以收到 event 的時間而定,而圖表呈現的時間又是以 @timestamp 為主,所以通常跟實際 Log 的時間會有差異,這時候就必須透過 Logstash 處理這一段的 timestamp。

一般來說沒處理過的會長這樣:

  • @timestamp 是 elasticsearch / logstash 收到 log 的時間 (並非實際 log 的時間)
  • timestamp 是用 gork 切出來的 log date filed。

實際上應該要以 timestamp 為主才對 (實際 log 時間),所以必須透過寫 Logstash filter 把 @timestamp 換掉。

拿 Apache / Nginx 的 access.log 為範例,用 date 這個 plugin 來達成:

  • locale 是用來判斷時區,實際上與系統的時區有關 (ex. LANG=en_US.UTF-8)
  • match 判斷 timestamp 這個 filed 的來源格式為 “dd/MMM/yyyy:HH:mm:ss Z” (ex. 04/Jul/2019:23:59:58 +0800)
  • remove_field 取代 @timestamp 之後當然要移除原本的 timestamp filed。

處理完後就會變這樣:

最後呈現的 timestamp 就會是真實 log time。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

彙整

分類

展開全部 | 收合全部

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱

%d 位部落客按了讚: