#!/bin/sh # Munin plugin for monitoring Postfix SASL logins. Symlink/rename to # 'postfix_sasl_$SYSLOGNAME'. # Copyright © 2015 Guilhem Moulin # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . PATH=/usr/bin:/bin:/usr/sbin:/sbin set -u LOGFILE="/var/log/${logfile:-mail.log}" STATEFILE="$MUNIN_PLUGSTATE/${0##*/}.offset" name="${0##*/}" [ "${name#postfix_sasl_}" != "$name" ] && postfix="${name#postfix_sasl_}" || postfix= case "${1:-}" in config) cat <<- EOF graph_title Postfix SASL ($([ -n "$postfix" -a "$postfix" != postfix ] && echo "'${postfix#postfix-}'" || echo default) instance) graph_vlabel logins per \${graph_period} graph_args --base 1000 -l 0 graph_scale no graph_period minute graph_category postfix successful.label successful successful.type DERIVE successful.draw AREA successful.min 0 failed.label failed failed.type DERIVE failed.draw STACK failed.min 0 EOF exit 0 ;; esac if [ ! -f "$LOGFILE" ]; then for postfix in ${postmulti:-postfix}; do echo "${postfix}_volume.value U" done exit 0; fi tmpfile="$(mktemp --tmpdir)" trap 'rm -f "$tmpfile"' EXIT logtail -f"$LOGFILE" -o"$STATEFILE" | sed -nr "s#^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ $postfix/smtpd\[[[:digit:]]+\]: ##p" >"$tmpfile" echo successful.value $(grep -Ec "^warning: [-._[:alnum:]]+\[[.[:digit:]]+\]: SASL \S+ authentication failed(:.*)?$" "$tmpfile") echo failed.value $(grep -Ec "^[[:xdigit:]]{10}: client=\S+, sasl_method=\S+, sasl_username=" "$tmpfile")