Filebeat 将 mysql-slow.log 中的几行合并为一行
Filebeat merge several lines from mysql-slow.log into one line
我正在尝试使用 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 单独接收行
- 消息 --> # 时间:2019-11-08T20:02:05.474508Z
- 消息 --> # User@Host: user[user] @localhost[] Id: 2
等等...
我想以下列格式在一封邮件中接收它:
# 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.[=15 的事件=]
您需要更改多行模式以仅匹配事件的第一行,即以 # Time
开头的行。
以下 filebeat 配置适用于我的测试。
filebeat.inputs:
- type: log
enabled: true
paths:
- /opt/data/Whosebug/*.log
multiline.pattern: '^\#[[:space:]]Time'
multiline.negate: true
multiline.match: after
output.logstash:
hosts: ["elk:5044"]
logstash pipeline simples监听5044
输出到elasticsearch,然后结果如下
如您所见,所有文件行在 elasticsearch 上都被索引为单个事件。
我正在尝试使用 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 单独接收行
- 消息 --> # 时间:2019-11-08T20:02:05.474508Z
- 消息 --> # User@Host: user[user] @localhost[] Id: 2 等等...
我想以下列格式在一封邮件中接收它:
# 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.[=15 的事件=]
您需要更改多行模式以仅匹配事件的第一行,即以 # Time
开头的行。
以下 filebeat 配置适用于我的测试。
filebeat.inputs:
- type: log
enabled: true
paths:
- /opt/data/Whosebug/*.log
multiline.pattern: '^\#[[:space:]]Time'
multiline.negate: true
multiline.match: after
output.logstash:
hosts: ["elk:5044"]
logstash pipeline simples监听5044
输出到elasticsearch,然后结果如下
如您所见,所有文件行在 elasticsearch 上都被索引为单个事件。