Our Postfix integration consolidates mail server data into one view, so you can track how many emails are sent, bounced, or deferred in a given time period. Our Postfix integration uses our infrastructure agent, and gives you a pre-built dashboard with your most important Postfix metrics like email delivery process, mail queue, and message overview.
After setting up our Postfix integration, we give you a dashboard for your Postfix metrics.
Set up the Postfix integration
Complete the following steps to set up the Postfix integration:
Install the infrastructure agent
To use the Postfix integration, you need to also install the infrastructure agent on the same host. The infrastructure agent monitors the host itself, while the integration you'll install in the next step extends your monitoring with Postfix-specific data.
Export Postfix data
Export your Postfix metrics with pflogsumm
. The Postfix agent usespflogsumm
as a log analyzer, which translates into metric data about your Postfix activity. This gives you enough detail to anticipate potential incidences with email administration.
Follow these steps to use pflogsumm
.
Run the following commands to download and extract
pflogsumm
:bash$wget https://jimsun.linxnet.com/downloads/pflogsumm-1.1.3.tar.gzbash$tar xvf pflogsumm-1.1.3.tar.gzGo to the
pflogsumm
folder.bash$cd pflogsumm-*.*.*Copy the
pflogsumm.pl
file to the path/usr/local/bin/pflogsumm
:bash$sudo cp pflogsumm.pl /usr/local/bin/pflogsummRun the following
pflogsumm
commands to export the Postfix metrics:bash$cat /var/log/mail.log | pflogsumm$cat /var/log/mail.log | pflogsumm -d today
Configure NRI-Flex for Postfix
Flex, our application-agnostic monitoring tool, comes bundled with the New Relic infrastructure agent. Follow these steps to create a flex configuration file for your Postfix data:
Create a file named
postfix-flex-config.yml
:bash$touch /etc/newrelic-infra/integrations.d/postfix-flex-config.ymlUpdate the file
postfix-flex-config.yml
. We recommend you work off our configuration sample below:---integrations:- name: nri-flexconfig:name: postfixFlexapis:#check if Postfix service is up.- event_type: PostfixUpcommands:- run: echo "value:$(systemctl status postfix | grep 'Active':' active' | wc -l)"split_by: ':'#check if Postfix service is down.- event_type: PostfixDowncommands:- run: echo "value:$(systemctl status postfix | grep 'Active':' active' | wc -l)"split_by: ':'#Read the grand totals messages by using the below script.- event_type: PostfixGrandTotalscommands:- run: cat /var/log/mail.log | pflogsumm | grep -A 21 'Grand Totals'split: horizontalset_header: [metricValue, message]regex_match: truesplit_by: \s+(\d+\w*)\s+(.*)#Read the number of messages delivered & received in bytes.- event_type: PostfixMessageBytescommands:- run: cat /var/log/mail.log | pflogsumm | grep -A 1 'bytes received'split: horizontalset_header: [metricValue, messageBytes]regex_match: truesplit_by: \s+(\d+\w*)\s+(.*)#Read the number of messages held by the user.- event_type: PostfixHeldMessagecommands:- run: echo "value:$(cat /var/mail/<USER> | grep -c 'Subject:')"split_by: ':'#Read the count of SASL authentication failure notifications.- event_type: PostfixSASLauthFailedcommands:- run: echo "value:$(cat /var/log/mail.log | grep 'status=deferred (SASL authentication failed' | wc -l)"split_by: ':'#Read the count of bounced non-delivery notifications.- event_type: PostfixBounceNondeliveryNotificationcommands:- run: echo "value:$(cat /var/log/mail.log | grep 'postfix/bounce' | wc -l)"split_by: ':'#Read the number of messages passed through the email delivery process.- event_type: PostfixEmailDeliveryProcesscommands:- run: echo "PICKUPvalue:$(cat /var/log/mail.log | grep 'pickup' | wc -l)"split_by: ':'- run: echo "CLEANUPvalue:$(cat /var/log/mail.log | grep 'cleanup' | wc -l)"split_by: ':'#Read the number of message inserted in mail queue.- event_type: PostfixMessageInsertedinMailQcommands:- run: echo "Ivalue:$(cat /var/log/mail.log | grep 'queue active'| wc -l)"split_by: ':'#Read the number of message handled by SMTP process.- event_type: PostfixMessageHandledBySMTPcommands:- run: echo "SENTmsg:$(cat /var/log/mail.log | grep 'status=sent' | grep "postfix/smtp" | wc -l)"split_by: ':'- run: echo "BOUNCEDmsg:$(cat /var/log/mail.log | grep 'status=bounced' | grep "postfix/smtp" | wc -l)"split_by: ':'- run: echo "DEFERREDmsg:$(cat /var/log/mail.log | grep 'status=deferred' | grep "postfix/smtp" | wc -l)"split_by: ':'#Read the number of message removed from mail queue.- event_type: PostfixMessageRemovedFromMailQcommands:- run: echo "Rvalue:$(cat /var/log/mail.log | grep 'removed'| wc -l)"split_by: ':'#Read the number of SMTPD connection.- event_type: PostfixSMTPDconnectioncommands:- run: echo "value:$(cat /var/log/mail.log | grep ' connect from' | wc -l)"split_by: ':'#Read the number of SMTPD disconnection.- event_type: PostfixSMTPDdisconnectioncommands:- run: echo "value:$(cat /var/log/mail.log | grep 'disconnect from' | wc -l)"split_by: ':'#Read the number of SMTP connection.- event_type: PostfixSMTPconnectioncommands:- run: echo "value:$(cat /var/log/mail.log | grep ' connect to' | wc -l)"split_by: ':'#Read the number of SMTP disconnection.- event_type: PostfixSMTPdisconnectioncommands:- run: echo "value:$(cat /var/log/mail.log | grep 'disconnect to' | wc -l)"split_by: ':'#Read the number of connection timed out.- event_type: PostfixSMTPDtimedOutcommands:- run: echo "value:$(cat /var/log/mail.log | grep 'timeout after CONNECT' | wc -l)"split_by: ':'#Read the number of connection lost.- event_type: PostfixSMTPDconnectionLostcommands:- run: echo "value:$(cat /var/log/mail.log | grep 'lost connection' | wc -l)"split_by: ':'#Read the per-hour traffic report.- event_type: PostfixMessagePerHourReportcommands:- run: cat /var/log/mail.log | pflogsumm -d today | grep -i 'Per-Hour Traffic Summary' -A 27split: horizontalheader_split_by: \s+(\w+)\s+(\w+)\s+(\w+)\s+(\w+)\s+(\w+)\s+(.*)set_header:[time,received.perhour,delivered.perhour,deferred.perhour,bounced.perhour,rejected.perhour,]regex_match: truesplit_by: \s+(\d+-\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)#Read the per-day traffic summary.- event_type: PostfixMessageTrafficPerDaycommands:- run: cat /var/log/mail.log | pflogsumm --zero_fill | grep -C 12 'Per-Day Traffic Summary' -B 0 -A 8 | sed '/Per-Hour Traffic Daily Average/q'split: horizontalheader_split_by: \s+(\w+)\s+(\w+)\s+(\w+)\s+(\w+)\s+(\w+)\s+(.*)set_header:[date, received, delivered, deferred, bounced, rejected]regex_match: truesplit_by: \s+(\w+\s+\d+\s+\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)#Read the host/domain summary: message delivery & received.- event_type: PostfixHostSummarycommands:- run: cat /var/log/mail.log | pflogsumm | grep -i 'Host/Domain Summary':' Message Delivery' -A 8 | sed -n '2,9p'split: horizontalheader_split_by: \s+(\w+\s+\w+)\s+(\w+)\s+(\w+)\s+(\w+\s+\w+)\s+(\w+\s+\w+)\s+(.*.)set_header:[sentCount, bytesDelivered, defers, avgDaily, maxDaily, host]regex_match: truesplit_by: \s+(\d+)\s+(\d+\w*)\s+(\d+)\s+(\d+.\d+\s+\w)\s+(\d+.\d+\s+\w)\s+(.*)- run: cat /var/log/mail.log | pflogsumm | grep -A 15 'Host/Domain Summary':' Messages Received' | sed '/Senders by message count/q'split: horizontalheader_split_by: \s+(\w+\s+\w+)\s+(\w+)\s+(.*.)set_header: [msgCount, bytesReceived, hostDetail]regex_match: truesplit_by: \s+(\d+)\s+(\d+\w*)\s+(.*)#Read the senders & recipients with message count.- event_type: PostfixSenderRecipientMessageCountcommands:- run: cat /var/log/mail.log | pflogsumm | grep -C 11 'Senders by message count' -B 1 -A 9 | sed '/Recipients by message count/q'split: horizontalheader_split_by: (.*.)set_header: [sender.msgCount, senders]regex_match: truesplit_by: \s+(\d+)\s+(.*)- run: cat /var/log/mail.log | pflogsumm | grep -C 11 'Recipients by message count' -B 1 -A 9 | sed '/Senders by message size/q'split: horizontalheader_split_by: (.*.)set_header: [recipient.msgCount, recipients]regex_match: truesplit_by: \s+(\d+)\s+(.*)#Read the daemon message details.- event_type: PostfixDaemonMessagecommands:- run: cat /var/log/mail.log | pflogsumm | grep -A 10 'Master daemon messages'split: horizontalset_header: [daemon.msgCount, daemonMessage]regex_match: truesplit_by: \s*(\d+)\s+(\w+.*.)#Read the message deferral details.- event_type: PostfixDeferralMessagecommands:- run: cat /var/log/mail.log | pflogsumm | grep -A 15 'message deferral detail' | sed '/message bounce detail (by relay)/q'split: horizontalheader_split_by: (\s+\w+\s+.*)set_header: [deferral.msgCount, deferralMessage]regex_match: truesplit_by: \s*(\d+)\s+(\w+.*.)#Read the warning message details.- event_type: PostfixWarningMessagecommands:- run: cat /var/log/mail.log | pflogsumm | grep -v 'mail_queue_enter' | grep -C 100 'Warnings' -B 1 -A 10 | sed '/Fatal Errors/q'split: horizontalheader_split_by: \s+(\w+)\s+(.*)set_header: [Warning.msgCount, warningMessage]regex_match: truesplit_by: \s*(\d+)\s\s\s(.*.)#Read the error message details.- event_type: PostfixErrorMessagecommands:- run: cat /var/log/mail.log | pflogsumm | grep -C 15 'Fatal Errors' -B 1 -A 10 | sed '/Panics/q'split: horizontalheader_split_by: \s+(\w+)\s+(.*)set_header: [Fatal.msgCount, fatalMessage]regex_match: truesplit_by: \s*(\d+)\s\s\s(.*.)#Read the message bounce details.- event_type: PostfixBounceMessagecommands:- run: cat /var/log/mail.log | pflogsumm | grep -A 10 'message bounce detail (by relay)' | sed '/message reject detail/q'split: horizontalheader_split_by: \s+(\w+)\s+(.*)set_header: [Bounce.msgCount, bounceMessage]regex_match: truesplit_by: \s*(\d+)\s\s\s(.*.)If you'd prefer to make your own, then make sure that your yaml file follows the pattern above. Edit the following attributes as needed:
EVENT_TYPE
: A New Relic database table that you can query using NRQL.COMMAND
: The command used to print metrics on the terminal.
Forward your Postfix logs to New Relic
Follow these steps to forward Postfix logs to New Relic:
Create a file named
logging.yml
in the infrastructure agent directory:bash$touch /etc/newrelic-infra/logging.d/logging.ymlAdd the following snippet to the
logging.yml
file:logs:- name: mail.logfile: /var/log/mail.logattributes:logtype: postfix_maillog
Restart the infrastructure agent
Use the instructions in our infrastructure agent docs to restart your infrastructure agent. This is a basic command that should work for most people:
$sudo systemctl restart newrelic-infra.service
Find and use data
Follow these steps to use our pre-built dashboard template to easily view your Postfix data:
Go to one.newrelic.com and click on + Integrations & Agents.
Click on the Dashboards tab.
In the search box, type
Postfix
.When you see our pre-build dashboard, click on it to install it in your account.
Your Postfix dashboard is a custom dashboard. Access it from the Dashboards UI. For docs on using and editing dashboards, see our dashboard docs.
For more on how to find and use your data, see Understand integration data. Here's a few example NRQL queries for Postfix data:
What's next?
To learn more about building NRQL queries and generating dashboards, check out these docs:
- Introduction to the query builder to create basic and advanced queries.
- Introduction to dashboards to customize your dashboard and carry out different actions.
- Manage your dashboard to adjust your display mode, or to add more content to your dashboard.