Zabbix template for Exim
LEGACY CONTENT! See actual Ansible repository!
Zabbix Agent 2.2
Exim 4.84
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
/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
/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
/etc/cron
# EXIM Statistics for Zabbix
*/5 * * * * root /usr/local/etc/zabbix22/zabbix-exim-trappers.sh 1>/dev/null 2>/dev/null
UPDATE 21.09.2017
- Cron не используется
- Значения отправляются пакетом, а не по одному
- Уменьшены значения в тригерах до 10 и 50
UPDATE 29.11.2017
- Добавлен элемент данных Количество замороженных сообщений в очереди
LEGACY CONTENT! See actual Ansible repository!
Настройка:
/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
/etc/zabbix/zabbix\_agentd.d/zabbix-exim.conf
/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