ELK時間戳


ELK時間戳

在我們使用ELK過程中,總會遇到時間戳的問題。首先logstash如果沒有加以處理的話,那么它默認使用的是采集的時間戳,然后存入ES。那么這樣的話時間顯示的是錯誤的,再接着因ES默認使用的是UTC時間,那么我們在看數據的時候,看到的時間與實際的時間也是慢8小時的,但Kibana默認使用的是你瀏覽器的時區,所以這一塊問題不是很大,如果在你logstash時間處理是正常的情況下,kibana看的時候發現時間不正常的話,那么我們只需在web界面修改一下時區即可達到時間正確的目的。接下來我就logstash時間問題來看一下相關配置。

例子,我就拿我前幾天部署的mysql慢日志來做例子吧,yaml文件如下:

input {
    redis {
        host => "10.228.81.51"
        port => 6379
        password => "123456"
        db => "1"
        data_type => "list"
        key => "mysqllog"
    }
}
filter {
    json {
        source => "message"
    }

    grok {
        match => [ "message" , "(?m)^#\s+User@Host:\s+%{USER:user}\[[^\]]+\]\s+@\s+(?:(?<clienthost>\S*) )?\[(?:%{IPV4:clientip})?\]\s+Id:\s+%{NUMBER:row_id:int}\n#\s+Query_time:\s+%{NUMBER:query_time:float}\s+Lock_time:\s+%{NUMBER:lock_time:float}\s+Rows_sent:\s+%{NUMBER:rows_sent:int}\s+Rows_examined:\s+%{NUMBER:rows_examined:int}\n\s*(?:use %{DATA:database};\s*\n)?SET\s+timestamp=%{NUMBER:timestamp};\n\s*(?<sql>(?<action>\w+)\b.*;)\s*(?:\n#\s+Time)?.*$" ]
    }
    date {  # 將日志的 timestamp 時間字段,轉成UNIX格式后,並賦值給默認的時間戳
        locale => "en"
        match => ["timestamp","UNIX"]
        target => "@timestamp"
    }
    
    ruby { ##設置一個自定義字段'timecode'[這個字段可自定義],將默認時間戳中的值加8小時后並重新賦值給 timecode
        code => "event.set('timecode', event.get('@timestamp').time.localtime + 8*3600)"
    }
    #ruby {#設置一個自定義字段 'time' 字段,然后將上一步自定義 ‘timecode’ 時間字段中的值重新賦給 time 自定義字段
    # 因生成環境需要,所我不需要將默認時間戳加八小時
    # 如果需要es展示的就是加八小時的時間戳的話,那么可以直接將 date 字段中的內容注釋掉,然后打開這一塊內容。並將 'time' 字段修改成 '@timestamp' 字段。那么logstash所看到的時間戳則是 加八小時后的時間
    #    code => "event.set('time',event.get('timecode'))"
    #}
#    mutate {
#        remove_field => ["timecode"]
#    }
}

output {
   #stdout {
   #   codec => rubydebug
   #}
   if [tags][0] == "mysql-slow-log" {
        elasticsearch {
        hosts => ["10.228.81.51:9200"]
        index => "%{[tags][0]}-%{+YYYY.MM.dd}"
      }
   }
}

參考文檔


免責聲明!

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



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