如何配置Logstash为一个文件使用一个事件(用于解析邮件)?

时间:2017-01-16 00:15:02

标签: email parsing logstash imap elastic-stack

目标:分析存储在文件中的大量电子邮件。 我使用 offlineimap 工具将电子邮件下载到本地文件。

我熟悉ELK但不确定如何正确配置Logstash以存储每个文件一个事件。

我还没有尝试过多行插件,因为我没有完整的开始/结束文件规则。我只是想解析所有文件并为每个文件存储一个事件,无论它是如何开始/结束的。

注意:无法使用Logstash imap 插件,因为它只提取和存储新电子邮件,但不会从服务器加载所有邮件。

针对不同用例的类似问题:Logstash Multiline filter 遗憾的是,几年来没有任何答案。

1 个答案:

答案 0 :(得分:0)

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"
    }
  }
}