Назад | Перейти на главную страницу

мониторинг postfix или sendmail

Меня интересует оповещение группы поддержки по электронной почте о том, что почта копируется и не пересылается должным образом, т. Е. Отправка задерживается. Пробовал в nagios, решения нет. Я пробовал с logwatch, это не тот, который нужен.

Желаемое решение: Если письмо не отправлено «status = sent (250 Ok)», то оповещение по почте. Это просто, проблемная часть - избежать повторения. Таким образом, если обнаружено предупреждение в случае, если вторая проверка не отправлена, к этому относится какое-либо предупреждение.

Как это можно сделать?

Может у postfix есть свое решение?

SMTP не предназначен для связи в реальном времени и с малой задержкой!
Даже если сообщение покинуло ваш сервер, обычно оно еще не доставлено получателям INBOX, оно все еще может подвергаться обработке удаленным спам-фильтром и / или AV-фильтром.

поскольку серый список одновременно довольно эффективен и распространен, даже временные ошибки не являются проблемой.

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

Работа с повторением должна быть управляемой, если вы хотите создать где-нибудь дополнительный файл / журнал. Например, выполните обычные шаги для отправки электронного письма с предупреждением, а затем после того, как сообщение будет успешно отправлено, добавьте дополнительную строку в сценарий, который записывает метку времени и, возможно, некоторую другую информацию в новый файл журнала, что-то вроде этого будет работать:

echo $(date +%s),sent_queuealert >> /path/to/postfix/logs/sentalerts.log

Который будет хранить штамп даты unix и предпринятые действия. Теперь, когда файл журнала записан, некоторая дополнительная логика в операторах if-else - это все, что требуется для управления отправкой сообщения, вот простой пример.

#!/bin/bash
lastalert=$(grep "sent_queuealert" ./sentalerts.log |tail -n1 |cut -d"," -f1)
ctime=$(date +%s)
dtime=$(expr $ctime - $lastalert)
if [ "$dtime" -lt 250 ]
then
    echo "Too soon to send"
    echo $(date +%s),skip_send >> sentalerts.log
else
    echo "place holder for alert sender"
    echo $(date +%s),sent_queuealert >> sentalerts.log
fi

Это довольно грубая версия, но ее достаточно легко изменить для ваших целей. Использование cron для запуска соответствующего сценария каждые несколько минут позволит вам проверять файл журнала и не обязательно полагаться на внутренние механизмы в postfix. Есть интересная информация о мониторинг постфикса в этом ответе. Объединение этих знаний с какой-либо проверкой журнала с отметками времени может дать более элегантное решение.

Мониторинг электронной почты должен начинаться с нескольких простых вещей:

  • принимают ли почтовые серверы соединение через порты SMTP или SMTPS?
  • принимают ли почтовые серверы новую почту для ваших пользователей? ретранслируемые пользователи?
  • есть ли свободное место на почтовом сервере?
  • очереди заполняются?

Когда вы освоите основы, подумайте о расширении до

  • отправлять электронное письмо каждые п минут в ролевую учетную запись, затем убедитесь, что в последние n * 2 минуты у нее есть новый адрес электронной почты.
  • смотреть, сколько ЦП используется postfix и его помощники
  • график, сколько спама вы фильтруете
  • задержка доставки графика
  • добавить оповещения по метрикам