06_去除不需要的字段以及ELK時間軸問題


去除字段只能去除_source中的,不是_source內的無法去除。

  去除不必要的字段,不僅可以節省ES的存儲內容,同時因為節省了ES的內容,可以加速搜索的速度

Logstash配置去除不需要的字段

filter {
    grok {
        match => {
            "message" => '(?<clientip>[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) - - \[(?<requesttime>[^ ]+ \+[0-9]+)\] "(?<requesttype>[A-Z]+) (?<requesturl>[^ ]+) HTTP/\d\.\d" (?<status>[0-9]+) [0-9]+ "[^"]+" "(?<ua>[^"]+)" "(?<realip>[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}),? [^"]+"'
        }
        remove_field => ["message", "@version"]
    }
}

重啟logstash之后,再次在kibana中查看數據,已經沒有了@version和message

table

當然如果沒有刪除掉之前的數據的話,左邊欄依然還是有@version和message,但是新的數據中已經沒有了@version 和message

如果這一步看到的字段信息比我少是正常的,因為我這里已經開始采用filebeat去收集日志了,filebeat相對於logstash更加輕量級,具體的使用會在后面說明。

ELK時間展示問題

Kibana自帶的@timestamp是日志發送到ES的時間,所以會跟真正日志中記錄的時間有出入

timestamp

 

默認ELK時間軸

  1. 以發送日志的時間為准

  2. Nginx本身記錄了用戶訪問的時間

  3. 分析Nginx上的日志以用戶訪問時間為准,而不應該以發送日志的時間

 

Logstash分析所有的Nginx日志

input {
    file {
        path => "/var/log/nginx/access.log"
        start_position => "beginning"
        sincedb_position => "/dev/null"
    }
}

此時再次查看@timestamp

stamp

所有的時間都為剛才日志發送的時間,如果通過這樣的時間去分析日志,是十分不准確的,所以我們可以將timestamp的時間修改為之前自己匹配的requesttime即刻顯示為正常時間

在filter中添加如下信息

  date {
    match => ["requesttime", "dd/MMM/yyyy:HH:mm:ss Z"]
    target => "@timestamp"
  }

此時再次查看,時間與日志中一致

time

不同的時間格式,覆蓋的時間格式要對應

  1. 20/Feb/2019:16:13:09 -------> dd/MMM/yyyy:HH:mm:ss

  2. 2019-09-20 16:14:23.230 --------> yyyy-MM-dd HH:mm:ss.SSS

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM