Filter Plugin to parse Postfix status line log.
Installation
Add this line to your application's Gemfile:
gem 'fluent-plugin-filter-parse-postfix'
And then execute:
$ bundle
Or install it yourself as:
$ gem install fluent-plugin-filter-parse-postfix
Configuration
<filter> @type parse_postfix #key message #mask true #use_log_time false #include_hash false #salt my_salt #sha_algorithm 512 # 1, 224, 256, 384, 512 (default) #parse_header_checks false </filter>
Usage
$ cat fluent.conf <source> @type forward </source> <source> @type tail path /var/log/maillog pos_file /var/log/td-agent/postfix-maillog.pos tag postfix.maillog format none </source> <filter postfix.maillog> @type grep regexp1 message status= </filter> <filter postfix.maillog> @type parse_postfix </filter> <match postfix.maillog> @type stdout </match> $ fluentd -c fluent.conf
$ echo '{"message":"Feb 27 09:02:38 MyHOSTNAME postfix/smtp[26490]: 5E31727A35D: to=<bellsouth@myemail.net>, relay=gateway-f1.isp.att.net[204.127.217.17]:25, conn_use=2, delay=0.58, delays=0.11/0.03/0.23/0.20, dsn=2.0.0, status=sent (250 ok ; id=en4req0070M63004172202102)"}' | fluent-cat postfix.maillog #=> 2015-12-22 02:02:22 +0900 postfix.maillog: {"time":"Feb 27 09:02:38","hostname":"MyHOSTNAME","process":"postfix/smtp[26490]","queue_id":"5E31727A35D","to":"<*********@myemail.net>","domain":"myemail.net","relay":"gateway-f1.isp.att.net[204.127.217.17]:25","conn_use":2,delay":0.58,"delays":"0.11/0.03/0.23/0.20","dsn":"2.0.0","status":"sent","status_detail":"(250 ok ; id=en4req0070M63004172202102)"}
Output
see https://github.com/winebarrel/postfix_status_line
{
"time":"Feb 27 09:02:38",
"hostname":"MyHOSTNAME",
"process":"postfix/smtp[26490]",
"queue_id":"5E31727A35D",
"to":"*********@myemail.net",
"domain":"myemail.net",
"relay":"gateway-f1.isp.att.net[204.127.217.17]:25",
"conn_use":2,
"delay":0.58,
"delays":"0.11/0.03/0.23/0.20",
"dsn":"2.0.0",
"status":"sent",
"status_detail":"(250 ok ; id=en4req0070M63004172202102)"
}Parse header_checks
$ cat fluent.conf ... <filter postfix.maillog> @type grep regexp1 message warning: header </filter> <filter postfix.maillog> @type parse_postfix parse_header_checks true </filter> ... $ fluentd -c fluent.conf
$ echo '{"message":"Mar 4 14:44:19 P788 postfix/cleanup[7426]: E80A9DF6F7E: warning: header Subject: test from local; from=<sugawara@P788.local> to=<sgwr_dts@yahoo.co.jp>"}' | fluent-cat postfix.maillog #=> 2017-03-04 18:26:46.146399000 +0900 postfix.maillog: { # "time":"Mar 4 14:44:19", # "hostname":"P788", # "process":"postfix/cleanup[7426]", # "queue_id":"E80A9DF6F7E", # "to":"********@yahoo.co.jp", # "domain":"yahoo.co.jp", # "from":"********@P788.local", # "header_from":"local", # "priority":"warning", # "Subject":"test"}