以下是我需要使用logstash解析的示例日志文件:
2016-12-27 07:54:38.621 8407 ERROR oslo_service.service Traceback (most recent call last):
2016-12-27 07:54:38.621 8407 ERROR oslo_service.service File "/usr/lib/python2.7/dist-packages/oslo_service/service.py", line 680, in run_service
2016-12-27 07:54:38.621 8407 ERROR oslo_service.service service.start()
2016-12-27 07:54:38.621 8407 ERROR oslo_service.service File "/usr/lib/python2.7/dist-packages/nova/service.py", line 428, in start
2016-12-27 07:54:38.621 8407 ERROR oslo_service.service self.binary)
2016-12-27 07:54:38.621 8407 ERROR oslo_service.service File "/usr/lib/python2.7/dist-packages/oslo_versionedobjects/base.py", line 181, in wrapper
请给我一些建议如何使用grok multiline过滤器解析此格式的日志,以及我应该使用哪种模式。
提前谢谢!!
答案 0 :(得分:0)
如果您使用grok
和multiline
尝试此类内容怎么办?
input {
file {
path => [""] <-- path to your log directory
start_position => "beginning"
codec => multiline {
pattern => "^%{TIMESTAMP_ISO8601}"
negate => true
what => previous
}
}
}
filter {
grok {
patterns_dir => "./patterns" <-- the path to the patterns file
match=>["message","%{TIMESTAMP_ISO8601:timestamp} %{WORD:level} %{GREEDYDATA:content}"]
}
}
以上只是一个示例,您可以按照自己的意愿重现它。
Multiline
是用于读取数据的模式,将所有以空格开头的行追加到上一行。换句话说,当Logstash读取以空格(空格,制表符)开头的输入行时,该行将与先前读取的输入信息合并。
此SO也可能有所帮助。希望它有所帮助!
答案 1 :(得分:0)
实施
有两种方法这可以使用多个线程来解析日志。
input {
beats {
port => 5044
codec => multiline {
pattern => "^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}[\.,][0-9]{3,7} "
negate => true
what => "previous"
}
congestion_threshold => 40
}
}
不能使用多线程,但可以通过特殊情况设置过滤器
filter {
if [@metadata][beat] =~ "xxxx" {
multiline {
pattern => "^%{TIMESTAMP_ISO8601}"
negate => true
what => "previous"
}
}
}