我正在使用 Postfix,我需要在发送邮件后解析邮件日志。现在,我一直在尝试使用 Fluentd 使用 tail 插件来解析 Postfix 日志。
我面临的问题是我无法使用 tail 插件的 multiline 选项解析它们。我可以使用正则表达式单独解析它们,但不能一起解析。这可能是因为日志本质上是异步的,并且每个进程只要有要记录的信息就会登录到文件中。我打算为此编写一个 ruby 脚本,但这可能需要很长时间。
考虑到我不了解 Ruby/Perl,有没有比为 Fluentd 编写脚本/自定义插件更好的解决方案?
我不想从中提取信息的日志:
Jan 5 09:02:48 localhost postfix/pickup[5501]: 1733D16A90A: uid=0 from=<root>
Jan 5 09:02:51 localhost postfix/qmgr[2596]: 1733D16A90A: removed
我关心从中提取信息的日志:
Jan 5 09:02:48 localhost postfix/cleanup[5978]: 1733D16A90A: message-id=<20170105140248.1733D16A90A@mail.testserver.com>
Jan 5 09:02:48 localhost postfix/qmgr[2596]: 1733D16A90A: from=<root@mail.testserver.com>, size=460, nrcpt=1 (queue active)
Jan 5 09:02:51 localhost postfix/smtp[5980]: 1733D16A90A: to=<divij.sehgaal7@gmail.com>, relay=gmail-smtp-in.l.google.com[74.125.130.27]:25, delay=3.4, delays=0.05/0.01/1.9/1.5, dsn=2.0.0, status=sent (250 2.0.0 OK 1483624971 s11si76004239pgc.259 - gsmtp)
示例日志需要以 JSON 文件的形式发送到 ElasticSearch,然后保存以供进一步处理。