Перейти к основному содержанию

Мониторинг Postfix через Zabbix

Zabbix

После настройки постфикса неожиданно понадобилось его мониторить. Глаза боятся — руки делают.

У нас есть zabbix сервер версии 3.4.15 и недавно настроенный postfix на Ubuntu: Установка и настройка postfix на ubuntu.

Вот мой шаблон: Zabbix-шаблон для postfix.

Ставим софт на постфикс, нам понадобится logtail:

apt-get install logtail -y

Создаём файл /etc/zabbix/zabbix_scripts/postfix_data.sh:

#!/bin/bash

MAILLOG=/var/log/mail.log
PARTLOG=/tmp/postfix_data_partlog.log
OFFSETFILE=/tmp/postfix_data_offset.dat
DATAFILE=/tmp/postfix_data.dat
LOGTAIL=/usr/sbin/logtail

VALS=( 'bounced' 'deferred' 'sent' 'expired' 'reject' 'connect_from' 'connect_to' 'refused' 'queue' )

[ ! -e "${DATAFILE}" ] && touch "${DATAFILE}" && chown zabbix:zabbix "${DATAFILE}"
[ ! -e "${PARTLOG}" ] && touch "${PARTLOG}" && chown zabbix:zabbix "${PARTLOG}"

# если читаем данные
if [ -n "$1" ]; then
    key=$(echo ${VALS[@]} | grep -wo $1)
    if [ -n "${key}" ]; then
        value=$(cat "${DATAFILE}" | sort -u | grep -e "^${key};" | cut -d ";" -f2)
        echo "${value}"
    else
        exit 2
    fi

# если пишем данные
else
    "${LOGTAIL}" -f"${MAILLOG}" -o"${OFFSETFILE}" > ${PARTLOG}
    for i in "${VALS[@]}"; do
        case ${i} in
            "bounced")
            value=$(grep "status=bounced" ${PARTLOG} | wc -l)
            ;;
            "deferred")
            value=$(grep "status=deferred" ${PARTLOG} | wc -l)
            ;;
            "sent")
            value=$(grep "status=sent" ${PARTLOG} | wc -l)
            ;;
            "expired")
            value=$(grep "status=expired" ${PARTLOG} | wc -l)
            ;;
            "reject")
            value=$(grep "NOQUEUE: reject" ${PARTLOG} | wc -l)
            ;;
            "connect_from")
            value=$(grep ": connect from" ${PARTLOG} | wc -l)
            ;;
            "connect_to")
            value=$(grep ": connect to" ${PARTLOG} | wc -l)
            ;;
            "refused")
            value=$(grep "refused to talk to me:" ${PARTLOG} | wc -l)
            ;;
            "queue")
            value=$(mailq | grep -v "Mail queue is empty" | grep -c "^[A-F0-9]")
            ;;
        esac
        if grep -q ${i} ${DATAFILE}; then
            sed -i "s/^${i};.*$/${i};${value}/" "${DATAFILE}"
        else
            echo "${i};${value}" >> "${DATAFILE}"
            sort -u "${DATAFILE}" -o "${DATAFILE}"
        fi
    done
fi

Разрешаем выполнение:

chmod a+x postfix_data.sh

Добавляем данный скрипт в cron от рута: 

crontab -e
*/10 * * * * bash /etc/zabbix/zabbix_scripts/postfix_data.sh
service cron restart

Добавляем файл /etc/zabbix/zabbix_agent.d/userparameter_postfix.conf:

UserParameter=postfix[*],/etc/zabbix/zabbix_scripts/postfix_data.sh $1

Перезапускаем агента:

service zabbix-agent restart

Цеплаяем шаблон заббикса к хосту и наблюдаем картинку:

postfix

postfix

 

postfix

Обновление от 04.05.2022

Внёс изменение в скрипт /etc/zabbix/zabbix_scripts/postfix_data.sh. Оказалось, что при большом количестве писем возможна ситуация, когда значения во временном файле /tmp/postfix_data.dat дублируются после перезагрузки сервера.

Сделал сортировку с удалением дублей. Также считываю только уникальное значение, чтобы уменьшить вероятность считывания неверных данных.

Теги

 

Похожие материалы

Zabbix шаблон для мониторинга сервера HPE Proliant DL360 Gen10

Делюсь полезным шаблоном для мониторинга сервера  HPE Proliant DL360 Gen10. Мониторим по IPMI. Шаблон делал сам. В шаблоне 8 приложений, 112 элементов данных, 49 триггеров и 4 графика.

Теги

Zabbix шаблон для мониторинга RAID контроллеров LSI в Linux

Делюсь полезным шаблоном для мониторинга RAID контроллеров LSI (Broadcom, Avago). Мониторим с помощью утилиты storcli. Шаблон делал сам.