Zabbix шаблон для Exim

Zabbix Agent 2.2
Exim 4.84

Шаблон: zbx_template_exim_mta.xml

Items (trappers): Mails Delivered, Mails Delivered Bytes, Mails Received, Mails Received Bytes; Mails Rejected, Mails Errors
Items (by agent): Mails in queue.

Triggers: More than 100 Mails in the Queue, More than 500 Mails in the Queue
Graphs: Exim Traffic, Exim Traffic Bytes

Настройка:

/usr/local/etc/zabbix22/zabbix_agentd.conf

UserParameter=exim.mailqueue,/usr/local/etc/zabbix22/zabbix-exim.sh exim.mailqueue

[collapse]
/usr/local/etc/zabbix22/zabbix-exim.sh

#!/bin/sh
PATH=$PATH:/bin:/usr/bin:/usr/local/bin
ACTION="$1"
EXIM="/usr/local/sbin/exim"

case $ACTION in
    exim.mailqueue)
        result=`sudo $EXIM -bpc`
    ;;
    *)
        result=0
    ;;
esac
echo $result

[collapse]
/usr/local/etc/zabbix22/zabbix-exim-trappers.sh

#!/bin/sh
# FreeBSD 10
# Zabbix agent 2.2
EXIMLOG=/var/log/exim/main.log
OFFSETFILE=/tmp/eximstatusoffset.dat
EXIMSTATS=/usr/local/sbin/eximstats
LOGTAIL=/usr/local/sbin/logtail
ZABBIX_SENDER=/usr/local/bin/zabbix_sender
ZABBIX_CONF=/usr/local/etc/zabbix22/zabbix_agentd.conf
PARTOFLOG=$(mktemp)
STATS=$(mktemp)

# Функция отправки значения на Zabbix-сервер
send2zabbix() {
KEY=$1
VALUE=$2
#echo $KEY $VALUE
$ZABBIX_SENDER -c $ZABBIX_CONF -k $KEY -o $VALUE
}

# Берем часть лога
$LOGTAIL -f $EXIMLOG -o $OFFSETFILE > $PARTOFLOG
# Формируем стат.отчет exim-a
$EXIMSTATS -t0 -nvr -nr -nt -nr $PARTOFLOG > $STATS

# Считаю корректным отдать 0 - если в логах ничего нет.
# Если не отдать ничего, получим в zabbix-е сообщение по триггеру nodata().
# Актуально Для сервера у которого за время опроса ничего не происходит
# (Если файл c результатом eximstats по части лога НЕ пуст)
if [ -s $STATS ]
then

    send2zabbix exim.received `grep -m 1 Received $STATS | awk '{print $3}'`
    send2zabbix exim.receivedbytes `grep -m 1 Received $STATS | awk '{print $2}'`....
    send2zabbix exim.rejected `grep -m 1 Rejects $STATS | awk '{print $2}'`....
    send2zabbix exim.delivered `grep -m 1 Delivered $STATS | awk '{print $3}'`
    send2zabbix exim.deliveredbytes `grep -m 1 Delivered $STATS | awk '{print $2}'`
    send2zabbix exim.errors `grep -m 1 "Errors encountered:" $STATS | awk '{print $2}'`
....
else
    send2zabbix exim.received 0
    send2zabbix exim.receivedbytes 0....
    send2zabbix exim.rejected 0
    send2zabbix exim.delivered 0
    send2zabbix exim.deliveredbytes 0
    send2zabbix exim.errors 0....
fi

rm $PARTOFLOG
rm $STATS

[collapse]
/etc/cron

# EXIM Statistics for  Zabbix
*/5  *  *  *  *  root  /usr/local/etc/zabbix22/zabbix-exim-trappers.sh 1>/dev/null 2>/dev/null

[collapse]

UPDATE 21.09.2017

  • Cron не используется
  • Значения отправляются пакетом, а не по одному
  • Уменьшены значения в тригерах до 10 и 50

UPDATE 29.11.2017

  • Добавлен элемент данных Количество замороженных сообщений в очереди

Шаблон: zabbix_template_exim

Настройка:

/etc/sudoers.d/sudoers-zabbix

#
zabbix ALL=(ALL) NOPASSWD:/usr/sbin/exim, /usr/sbin/exipick,/usr/sbin/eximstats, /usr/sbin/logtail, /usr/bin/zabbix_sender
#

[collapse]
/etc/zabbix/zabbix_agentd.d/zabbix-exim.conf

#
UserParameter=exim.ping,/etc/zabbix/scripts/exim-ping.sh

[collapse]
/etc/zabbix/scripts/exim-ping.sh

#!/bin/bash
# Zabbix Exim ping script
EXIMLOG=/var/log/exim4/main.log
OFFSETFILE=/tmp/eximstatusoffset.dat
EXIMSTATS=/usr/sbin/eximstats
EXIM=/usr/sbin/exim
EXIPICK=/usr/sbin/exipick
LOGTAIL=/usr/sbin/logtail
ZABBIX_SENDER=/usr/bin/zabbix_sender
ZABBIX_CONF=/etc/zabbix/zabbix_agentd.conf
PARTOFLOG=$(mktemp)
STATS=$(mktemp)
VALUES=$(mktemp)
# Вспомогательные функции
toval() {
# второй параметр - значение, может прийти пустым
if [ "$2" == "" ]
then {
VAL="0"
}
else {
VAL=$2
}
fi
    echo "-" $1 $VAL >>$VALUES
}
# Берем часть лога
sudo $LOGTAIL -f $EXIMLOG -o $OFFSETFILE > $PARTOFLOG
# Формируем стат.отчет exim-a
sudo $EXIMSTATS -t0 -h0 -nvr -nr -nt -nr $PARTOFLOG > $STATS 2>/dev/null
# зачистка файла с данными
rm $VALUES
# Наполняем файл значениями для отправки
toval exim.mailqueue `sudo $EXIM -bpc`
toval exim.frozen `sudo $EXIPICK -zi | wc -l`
# Если файл окажется пуст, то 0-ые значения обработает функция toval
toval exim.received `grep -m 1 Received $STATS | awk '{print $3}'`
toval exim.receivedbytes `grep -m 1 Received $STATS | awk '{print $2}'`
toval exim.rejected `grep -m 1 Rejects $STATS | awk '{print $2}'`
toval exim.delivered `grep -m 1 Delivered $STATS | awk '{print $3}'`
toval exim.deliveredbytes `grep -m 1 Delivered $STATS | awk '{print $2}'`
toval exim.errors `grep -m 1 "Errors encountered:" $STATS | awk '{print $3}'`
# Отправляем значения на Zabbix-сервер
sudo $ZABBIX_SENDER -c $ZABBIX_CONF -i $VALUES >/dev/null 2>&1
# зачистка
rm -f $PARTOFLOG
rm -f $STATS
rm -f $VALUES
#
echo 1
# end of file

[collapse]