[英]Logstash Beats Input - multiple multiline codec
我正在尝试发送带有节拍的多种类型的日志并在 logstash 服务器上解析它们。
我已经配置好节拍并正常工作,并且几乎让 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
过滤器插件,但它会导致
“找不到任何名为‘多行’的过滤器插件。你确定这是正确的吗?尝试加载多行过滤器插件导致此错误:LoadError”
有没有人知道如何使这项工作?
文件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"] }
}
我将多行移动到filebeat.yml
,这解决了我的问题:)
将多行移动到 filebeat.yaml 的配置在这里。 我使用以下配置捕获了多行日志。 这是我的 filebeat.yaml 配置:
# ============================== Filebeat inputs ===============================
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
- /var/log/nginx/error.log
multiline.pattern: '^[[:space:]]' // these
multiline.negate: false // three
multiline.match: after // lines are important for capturing multiline logs
------------------ Logstash Output -------------------------------
output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"]
index: "my-index-name"
您也可以参考此博客
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.