logstash-使用日誌的生成時間戳替換日誌收集時間戳@timestamp

默認狀況下ELK收集到的日誌在kibana上展現出來的時間戳和日誌的生成時間是不一致的,或許不少朋友來講和日誌生成的時間相差無幾,nginx

那我只能說,你的日誌系統可能資源比較充足,處理的比較及時,因此你看到的日誌收集時間戳和日誌產生時間戳是相差無幾的效果,ide

但若是是想導入歷史日誌數據進行相應的分析,這個時候恐怕你的日誌系統處理速度再塊也沒法解決日誌收集時間和日誌生成時間相差太spa

遠的問題。若是不進行處理,你在kibana上所看到的時間序列根本不是日誌生成的時間戳,因此說如何使用日誌的生成時間戳去替換掉存日誌

儲在Elasticsearch中的時間戳也即@timestamp字段就顯得尤其重要了。場景搞明白了,重要的就是如何實現了!server


看過不少博客,最後發現是把本身給繞進去了,爲何這麼說了,不少人都只是想下文同樣,貼上了本身的配置,別的什麼也沒多說。索引

filter {資源

    if [type] == "nginx-log" {rem

        grok {博客

            match => { "message" => "%{HOSTNAME:logserver} %{PATH:logpath} %{NGINX_ACCESS_LOG}" }it

            match => { "message" => "%{HOSTNAME:logserver} %{PATH:logpath} %{NGINX_ERROR_LOG}" }

            remove_field  => "message"

        }

date {

    match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]

}

}

}

對於本文來其實要講的是以下段落

date {

    match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]

}

容易出現問題的是不少人在上文使用grok解析日誌時都沒有使用timestamp這個字段名稱,他也直接照抄,那你能夠想一下,date這一部分

是基於上一個流程的結果進行的,因此會報錯"date plug-in parsing exception"。

但也有人說了,我有timestamp這個字段,仍是沒有解析正確,那很大的可能就是"dd/MMM/yyyy:HH:mm:ss Z"這個字段的配置沒理解正確,

筆者當初也是同樣,誤覺得這個字段是設定格式化後的日期時間顯示格式,但最後查詢了不少資料以後,終於看到有人詳說了,這個是本身的

日誌文件裏面日期日間的格式,也就是說"dd/MMM/yyyy:HH:mm:ss Z"這個字段是要看源日誌裏面的日期時間格式後在此配置的,並不是全部的

日誌裏面的日期時間都是同樣的,因此須要根據不一樣的文件日誌設定爲不一樣的配置,固然若是在同一類日誌文件裏面有多種日期時間格式,是

能夠,用空格+逗號配置成能夠匹配多個日期時間格式的。


由此以來,咱們就能夠很方便的根據用戶的訪問時間直接去查詢該時間段內的相應日誌,這是很是有用的。

除此以外,若是想導入歷史日誌進行相應的分析,這個時間戳能以以前的真實生成時間進行索引也是至關有益的。

相關文章
相關標籤/搜索