我正在尝试使用beats发送多种类型的日志,并在logstash服务器上解析它们。
我已经配置好并且正常工作,几乎让logstash正常工作。
我遇到问题的地方是,other-log.log的条目以不同的格式字符串开头。
在理想的世界中,我希望能够应用不同的multiline
编解码器,具体取决于条目的type
。
我试过了
if [type] == "server.log" {
codec => multiline {
pattern => "^\d{2}:\d{2}:\d{2},\d+"
negate => true
what => "previous"
}
}
但是这导致logstash失败,我的猜测是if
块中不允许input
。
我还尝试使用multiline
过滤器插件,但结果是
“找不到任何名为'multiline'的过滤插件。你确定这是正确的吗?试图加载多行过滤插件会导致此错误:LoadError”
有没有人知道如何使这项工作?
filebeat.yml
- input_type: log
paths:
- /application/server.log
document_type: server.log
- input_type: log
paths:
- /tmp/other-log.log
document_type: other.log
pipeline.conf
input {
beats {
host => "0.0.0.0"
port => "5044"
codec => multiline {
pattern => "^\d{2}:\d{2}:\d{2},\d+"
negate => true
what => "previous"
}
}
}
filter {
if [type] == "server.log" {
grok {
match => { "message" => "(?<date>^\d{2}:\d{2}:\d{2},\d+)\s(?<level>[A-Z]+)\s+\[(?<class>.*?)\]\s+(?<message>(?m).*)" }
overwrite => ["message"]
add_tag => [ "server.log" ]
}
}
}
# The filter part of this file is commented out to indicate that it is
# optional.
# filter {
#
# }
output {
elasticsearch { hosts => ["localhost:9200"] }
}
答案 0 :(得分:2)
我将多线移动到filebeat.yml
并解决了我的问题:)