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

Мониторинг 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 шаблон для мониторинга ленточной библиотеки HP MSL 4048 (G3 Series)

Делюсь полезным шаблоном для мониторинга сервера ленточной библиотеки HP MSL 4048. Мониторим по SNMP. Шаблон делал сам. Шаблон также подходит для других библиотек HP MSL G3 Series.

Zabbix, ProLiant и тормоза IPMI

Я раньше сталкивался с проблемой мониторинга серверов HP ProLiant девятого поколения по SNMP, ссылку добавлю ниже. В тот раз я вышел из тупика переходом на мониторинг северов по IPMI. Со временем девятое поколение серверов стало плавно меняться на десятое, при этом мониторинг так и остался на IPMI, я просто для каждой новой модели сервера делал новый шаблон. И вот натыкаюсь на странный баг с IPMI.

Теги