用filebeat收集 /tmp/testlog/no7.log 的内容后,传送给Logstash服务器,Logstash把收到的内容输出为 /tmp/logstash/no7.log
传送没有出现日志缺失,但是发现时间顺序是混乱的,具体情况如下:
filebeat.inputs:
input {
beats {
port => 5044
}
}
output {
file {
path => "/tmp/logstash/no7.log"
codec => line { format => "%{message}"}
}
}
----------------------------------------------------------------------------
时间乱序情况如下:
no7 0 2020年 1月 14日 火曜日 17:48:36 JST
no7 1 2020年 1月 14日 火曜日 17:48:37 JST
no7 2 2020年 1月 14日 火曜日 17:48:38 JST
no7 3 2020年 1月 14日 火曜日 17:48:39 JST
no7 4 2020年 1月 14日 火曜日 17:48:40 JST
no7 5 2020年 1月 14日 火曜日 17:48:41 JST
no7 6 2020年 1月 14日 火曜日 17:48:42 JST
no7 7 2020年 1月 14日 火曜日 17:48:43 JST
no7 8 2020年 1月 14日 火曜日 17:48:44 JST
no7 9 2020年 1月 14日 火曜日 17:48:45 JST
----------------------------------------------------------------------------
no7 2 2020年 1月 14日 火曜日 17:48:38 JST
no7 6 2020年 1月 14日 火曜日 17:48:42 JST
no7 3 2020年 1月 14日 火曜日 17:48:39 JST
no7 7 2020年 1月 14日 火曜日 17:48:43 JST
no7 0 2020年 1月 14日 火曜日 17:48:36 JST
no7 4 2020年 1月 14日 火曜日 17:48:40 JST
no7 8 2020年 1月 14日 火曜日 17:48:44 JST
no7 1 2020年 1月 14日 火曜日 17:48:37 JST
no7 5 2020年 1月 14日 火曜日 17:48:41 JST
no7 9 2020年 1月 14日 火曜日 17:48:45 JST
----------------------------------------------------------------------------
可以看见,Logstash接受到的所有内容都是乱序排列,请问怎么才能让它按照Filebeat服务器里的顺序输出呢
请大家帮帮忙,麻烦了
——————
有在网上搜过解决方法,都说是用filter的date来处理,但是按照目前能找到的所有回答都试了一遍,乱序问题依旧没有解决
如果试了一遍没有解决,说明你并没有成功使用你的日志时间作为logstash时间戳解析,否则不会再乱序了。再尝试一下,看下是不是过程出错了
谢谢您的回答
我在网上搜索之后,试过在logstash.conf里加入以下内容
---------------------------------------------------------------
filter {
grok {
match => ["message", "%{TIMESTAMP_ISO8601:logdate}"]
}
date {
match => ["logdate", "yyyy-MM-dd HH:mm:ss.SSS"]
target => "@timestamp"
}
}
--------------------------------------------------------------------
但是问题没有任何改善,请问是有哪里出错了么?
如果方便的话,请问能够给个模板?
@hatsuhi: 模板没有,不过可以看出你还没有理解这个东西。思路是这样子,先用grok写个规则切分你的日志,你的切分应该是失败的吧,找个例子理解一下。切分后得到时间字段,再使用date插件指定时间戳,你这个时间只到秒,应该也要注意时间格式
logstash设置:
input { stdin {} }
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:logdate}" }
}
date {
match => [ "logdate", "ISO8601" ]
target => "@timestamp"
}
}
output { stdout { codec => rubydebug }}
---------------------------------------------------------------------------------------------
结果:
{
"@timestamp" => 2020-01-21T04:46:50.000Z,
"logdate" => "2020-01-21T13:46:50+0900",
"host" => "rhel75-cranemg7407",
"message" => "1111 2020-01-21T13:46:50+0900",
"@version" => "1"
}