这个问题,讲多了都是泪,反正我踩过的坑,都要记下来(谁让我是固执的线下日志一族,总是想着法的虐自己)
线上的日志,我个人觉得没有什么大的问题需要改动时间,网上爆得最多的就是相差8小时的问题,其实这也不叫什么问题
我的问题是“kibana上分析的时间是系统当前时间,而不是日志产生的时间”(当然你生产线上的不要拿来探讨,跟当前时间相差无几,除非你有很大延迟或者拥塞),当然我是追求解决问题的方式,就是让日志产生时间,变成kibana分析时间(在分析旧日志相当有效,不然你丫开个10线程,一天分析十天的旧日志,统计一些数据就会出现很大偏差,你会发现,挖槽,日pv几十亿,不得了拉)
扯回来,怎么做:
其实也就是在filter中,和grok并列多加一行date,来处理即可
-
input {
-
file {
-
type => "nginx_access"
-
path => ["/data/logs/*.log"]
-
start_position => beginning
-
ignore_older => 0
-
}
-
}
-
filter {
-
grok {
-
match => {
-
"message" => "%{IPORHOST:client_ip} (%{USER:ident}|-) (%{USER:auth}|-) \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} (%{NOTSPACE:request}|-)(?: HTTP/%{NUMBER:http_version})?|-)\" (%{NUMBER:response}|-) (?:%{NUMBER:bytes}|-) \"(%{NOTSPACE:referrer}|-)\" (%{QS:agent}|-) \"(%{WORD:x_forword}|-)\"\"(?<upstream_cache_status>\S+)\""
-
}
-
}
-
date {
-
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
-
}
-
geoip {
-
source => "client_ip"
-
}
-
}
-
output {
-
elasticsearch {
-
hosts => ["172.16.105.153:9200"]
-
index => "logstash-nginx-access"
-
workers => 2
-
flush_size => 1
-
idle_flush_time => 1
-
template_overwrite => true
-
}
-
}
继续跑起来,你会发现,一切都是你想要的
阅读(11546) | 评论(0) | 转发(0) |