#!/bin/bash # Author: Giovanni Mancini # Date 24/05/2017 # Content: scan dovecot logs for proxy remote errors [[ -z $1 ]] && DEFAULT_BACKTIME=10 || DEFAULT_BACKTIME=$1 [[ -z $2 ]] && NRERR_THRESHOLD=10 || NRERR_THRESHOLD=$2 ACTUAL_LOG=$(echo /var/log/dovecot_$(date +%Y%m%d).$(date +%H).log) PREVIOUS_LOG=$(echo /var/log/dovecot_$(date -d "$DEFAULT_BACKTIME minutes ago" +%Y%m%d).$(date -d "$DEFAULT_BACKTIME minutes ago" +%H).log) TMPFILE="/tmp/proxy_errors.tmp" >"${TMPFILE}" if [ "$ACTUAL_LOG" != "$PREVIOUS_LOG" ] then sudo /usr/bin/tail -n 500000 $PREVIOUS_LOG | awk -vSTART="$(date -d "$DEFAULT_BACKTIME minutes ago" '+%T')" ' $3 > START { print $0 }' | grep -i 'imap-login: Error: proxy: Remote' | awk '{ print $10 }' | sort | uniq -c >> "${TMPFILE}" sudo /usr/bin/tail -n 500000 $ACTUAL_LOG | awk -vSTART="$(date -d "$DEFAULT_BACKTIME minutes ago" '+%T')" ' $3 > START { print $0 }' | grep -i 'imap-login: Error: proxy: Remote' | awk '{ print $10 }' | sort | uniq -c >> "${TMPFILE}" else sudo /usr/bin/tail -n 500000 $ACTUAL_LOG | awk -vSTART="$(date -d "$DEFAULT_BACKTIME minutes ago" '+%T')" ' $3 > START { print $0 }' | grep -i 'imap-login: Error: proxy: Remote' | awk '{ print $10 }' | sort | uniq -c >> "${TMPFILE}" fi ERR_HOSTS=$(awk -v NRERR="$NRERR_THRESHOLD" '$1>NRERR { gsub(/:.*/,"",$2) ; print $2"["$1" errors]"}' "${TMPFILE}" | xargs) TOTERROR=$(awk '{ sum+=$1 } END { print sum }' "${TMPFILE}") if [ -z "$ERR_HOSTS" ] then echo "OK: no proxy errors on backends | proxy_tot_err=${TOTERROR}" && exit 0 else echo "CRITICAL: proxy remote error for $ERR_HOSTS | proxy_tot_err=${TOTERROR}" | xargs && exit 2 fi