如何配置 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"
    }
  }
}