如何配置 Logstash 对一个文件使用一个事件(用于解析邮件)?
How to configure Logstash to use one event for one file (for parsing mails)?
目标:分析存储在文件中的大量电子邮件。
我使用 offlineimap 工具将电子邮件下载到本地文件。
我对 ELK 有点熟悉,但不确定如何正确配置 Logstash 以在每个文件中存储一个事件。
我还没有尝试过多行插件,因为我没有 starting/ending 文件的完整规则集。我只想解析所有文件并为每个文件存储一个事件,无论它如何 starts/ends.
注意:无法使用 Logstash imap 插件,因为它只获取和存储新电子邮件,不会从服务器加载所有邮件。
不同用例的类似问题:Logstash Multiline filter
不幸的是,超过几年没有任何答案。
Logstash Multiline filter 的评论中提出了解决方案,并且有效。基本上我必须在所有文件的末尾添加一些字符串,然后使用多行插件。
已创建 shell 脚本以使用额外行更新所有文件:
for file in **/**/*; do
echo 'ENDOFMAILFILE' >> "$file"
done
之后我在 logstash 中使用了多行插件
input {
file {
type => "logmail"
path => [ "/var/log/mail/**/*" ]
start_position => "beginning"
codec => multiline {
pattern => "^ENDOFMAILFILE$"
negate => "true"
what => "previous"
}
}
}
目标:分析存储在文件中的大量电子邮件。 我使用 offlineimap 工具将电子邮件下载到本地文件。
我对 ELK 有点熟悉,但不确定如何正确配置 Logstash 以在每个文件中存储一个事件。
我还没有尝试过多行插件,因为我没有 starting/ending 文件的完整规则集。我只想解析所有文件并为每个文件存储一个事件,无论它如何 starts/ends.
注意:无法使用 Logstash imap 插件,因为它只获取和存储新电子邮件,不会从服务器加载所有邮件。
不同用例的类似问题:Logstash Multiline filter 不幸的是,超过几年没有任何答案。
Logstash Multiline filter 的评论中提出了解决方案,并且有效。基本上我必须在所有文件的末尾添加一些字符串,然后使用多行插件。
已创建 shell 脚本以使用额外行更新所有文件:
for file in **/**/*; do
echo 'ENDOFMAILFILE' >> "$file"
done
之后我在 logstash 中使用了多行插件
input {
file {
type => "logmail"
path => [ "/var/log/mail/**/*" ]
start_position => "beginning"
codec => multiline {
pattern => "^ENDOFMAILFILE$"
negate => "true"
what => "previous"
}
}
}