elasticsearch Logstash Beats输入-多行编解码器
我正在尝试发送多种类型的带有beats的日志,并在logstash服务器上解析它们 我已经配置好beats,并且工作正常,日志库几乎工作正常 我遇到的问题是other-log.log的条目以不同格式的字符串开头 在理想情况下,我希望能够根据条目的类型应用不同的
elasticsearch Logstash Beats输入-多行编解码器,
elasticsearch,logstash,logstash-grok,
elasticsearch,Logstash,Logstash Grok,我正在尝试发送多种类型的带有beats的日志,并在logstash服务器上解析它们 我已经配置好beats,并且工作正常,日志库几乎工作正常 我遇到的问题是other-log.log的条目以不同格式的字符串开头 在理想情况下,我希望能够根据条目的类型应用不同的多行编解码器 我试过了 if [type] == "server.log" { codec => multiline { pattern => "^
多行
编解码器
我试过了
if [type] == "server.log" {
codec => multiline {
pattern => "^\d{2}:\d{2}:\d{2},\d+"
negate => true
what => "previous"
}
}
然而,这会导致日志存储失败,我的猜测是输入
块中不允许if
我也尝试过使用多行
过滤器插件,但结果是
“找不到任何名为‘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.0.0.0”
端口=>“5044”
编解码器=>多行{
模式=>“^\d{2}:\d{2}:\d{2}\d+”
否定=>true
什么=>“以前的”
}
}
}
滤器{
如果[type]=“server.log”{
格罗克{
match=>{“message”=>“(?^\d{2}:\d{2}:\d{2}\d+\s(?[A-Z]+)\s+\[(?.*?)\]\s+(?(?m.*)”)
覆盖=>[“消息”]
添加标签=>[“server.log”]
}
}
}
#此文件的筛选器部分将被注释掉,以指示它是
#可选。
#滤器{
#
# }
输出{
elasticsearch{hosts=>[“localhost:9200”]}
}
我将多行移动到了filebeat.yml
,这解决了我的问题:)如何在filebeat.yml
中配置多行模式?