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]