我正在尝试发送多种类型的日志与节拍和解析他们的logstash服务器。
我已经配置了beat,并且工作正常,logstash几乎可以正常工作。
我遇到的问题是other-log.log中的条目以不同的格式字符串开头。
在一个理想的世界里,我希望能够根据条目的type
应用不同的multiline
编解码器。
我试过了
if [type] == "server.log" {
codec => multiline {
pattern => "^\d{2}:\d{2}:\d{2},\d+"
negate => true
what => "previous"
}
}
但是,这会导致logstash失败,我的猜测是input
块中不允许有if
。
我也尝试过使用multiline
过滤器插件,但它导致
“找不到任何名为'multiline'的过滤器插件。您确定这是正确的吗?尝试加载多行过滤器插件导致此错误:加载错误”
有人知道怎么做吗?
文件beat.yml
- input_type: log
paths:
- /application/server.log
document_type: server.log
- input_type: log
paths:
- /tmp/other-log.log
document_type: other.log
管道.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"] }
}
2条答案
按热度按时间e0bqpujr1#
我把多行移到了
filebeat.yml
,这就解决了我的问题:)des4xlb02#
这里是将多行文件移动到filebeat.yaml的配置。我使用以下配置捕获了多行日志。这是我的filebeat.yaml配置:
也可以从this blog获取引用