我正在尝试通过使用Filebeat Logstash和Elasticsearch分析mysql-slow.log。我在mysql-slow.log文件中有如下消息:
# Time: 2019-11-08T20:02:05.474508Z
# User@Host: user[user] @ localhost [] Id: 2
# Query_time: 0.000716 Lock_time: 0.000223 Rows_sent: 2 Rows_examined: 2
SET timestamp=1573243325;
select * from Persons;
首先,我尝试让Filebeat将这行日志消息以5行的形式发送到elasticsearch,但将它们全部一起发送到一行。
我在filebeat.yml中设置多行输入
multiline.pattern = `^\#`
multiline.negate = true
multiline.match = after
不幸的是,这行不通,elasticsearch分别接收行
等等...
我想在以下格式的一封邮件中收到它:
# Time: 2019-11-08T20:02:05.474508Z # User@Host: user[user] @ localhost [] Id: 2 # Query_time: 0.000716 Lock_time: 0.000223 Rows_sent: 2 Rows_examined: 2 SET timestamp=1573243325; select * from Persons;
最佳答案
您的多行模式是错误的,它将与以#
开头的任何行匹配,因此示例中的前三行将是filebeat / logstash的事件。
您需要更改多行模式以仅匹配事件的第一行,即以# Time
开头的行。
以下filebeat配置适用于我的测试。
filebeat.inputs:
- type: log
enabled: true
paths:
- /opt/data/stackoverflow/*.log
multiline.pattern: '^\#[[:space:]]Time'
multiline.negate: true
multiline.match: after
output.logstash:
hosts: ["elk:5044"]
logstash管道简单函数侦听
5044
并输出到elasticsearch,然后结果如下。如您所见,所有文件行都被索引为Elasticsearch上的单个事件。
关于regex - Filebeat将mysql-slow.log的几行合并为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58773202/