Почтовый шлюз: задание со звёздочкой (Статистика и мониторинг)

Настройка почты - это длительный процесс, результаты будут видны далеко не сразу и могут различаться в зависимости от времени суток и дня недели.

Пока мы не начали ничего делать, предлагаю для начала обложить всё статистикой и мониторингом, для отчётности, быстрой реакции на ошибки и чтоб потом показывать руководству результаты работы.

В составе самого exim'а идёт скрипт eximstats, который выполняет львиную часть работы. Осталось только организовать сохранение статистики.

#!/bin/sh

mkdir -p /var/stats/exim{exim,greylisting,rspamd}
DATE=$(date +%Y-%m-%d)

# статистика самого exim'а
cd "/var/stats/exim"
eximstats -nr -byedomain \
  -pattern "Warnings from logs" /Warning/ \
  /var/log/exim/mainlog > "stats_${DATE}.txt"
rm -f "stats_latest.txt"
ln -s "stats_${DATE}.txt" "stats_latest.txt"

exit 0; # грейлистинг пока не настроен
# статистика sqlgrey
cd "/var/stats/greylisting"
sqlgrey-logstats.pl -t < /var/log/maillog > "stats_${DATE}.txt"

exit 0; # антиспам пока не настроен
# статистика rspamd
cd "/var/stats/rspamd"
rspamc stat_reset > "${DATE}_stat.txt"
rspamc counters   > "${DATE}_hits.txt"

Также, я для себя наваял скрипт, который считает статистику использования роутов. В выше он не используется, но иногда бывает полезен.

Мониторинг

В zabbix всё добавляется достаточно легко. Мы будем мониторить размер очереди (общий/frozen) и доступность сервиса.

/etc/zabbix2/bin/exim-queue-size.sh:

#!/bin/sh
set -e

SUDO='/usr/bin/sudo'
EXQG='/usr/sbin/exiqgrep'

case "$1" in
  "total")
    $SUDO $EXIQ -i | wc -l
    ;;
  "frozen")
    $SUDO $EXIQ -i -z | wc -l
    ;;
  *)
    echo "ZBX_NOTSUPPORTED"
    ;;
esac

Поправить пути, не забыть chmod +x.

/etc/zabbix2/zabbix_agent.conf.d/exim.conf:

UserParameter=exim.queue[*],/etc/zabbix2/bin/exim-queue-size.sh $1

Убедиться, что в основном конфиге заббикса есть строчка типа Include=/etc/zabbix2/zabbix_agentd.conf.d/.

/etc/sudoers.d/10-zabbix:

Defaults:zabbix !requiretty
zabbix  ALL=(ALL) NOPASSWD: \
  /etc/zabbix2/bin/exim-queue-size.sh

Здесь нужно убедиться, что в основном конфиге sudo есть строчка #includedir /etc/sudoers.d. Да, прямо так, как оно указано, с "#" в начале. Затем - проверить как вышеуказанный скрипт запускается из-под юзера zabbix:

sudo -u zabbix /bin/sh
sudo -l
# ^^ должно вылезти нечто подобное тому, что мы писали в файлик 10-zabbix.
/etc/zabbix2/bin/exim-queue-size.sh total
# ^^ должно вылезти число
exit

Если всё работает - здесь работа закончена, осталось написать шаблон для заббикса. Хорошим началом может стать следующий список item'ов для мониторинга:

  • tcp.listen[25] + tcp.listen[465]
  • exim.queue[total], exim.queue[frozen]
  • proc.num[exim], proc.num[sqlgrey]
  • proc.num[fail2ban]
  • proc.num[redis]
  • proc.num[rspamd]
  • proc.num[clamd]

Последние четыре пункта - можно растащить по разным шаблонам, они могут использоваться отдельно.

К оглавлению, Далее: Настройка самого exim'а