Инструмент для разбора логов SMTP, который находит отказы
Наше веб-приложение отправляет электронные письма. У нас много пользователей, и мы получаем много отказов. Например, пользователь меняет компанию, а его адрес электронной почты больше не действителен.
Чтобы найти отказы, я анализирую файл журнала SMTP с анализатором журнала. Журналы приходят с SMTP-сервера Microsoft.
Некоторые отскоки отличные, как 550+#5.1.0+Address+rejected+user@domain.com
, Есть user@domain.com
в отказов.
Но некоторые не имеют электронной почты в сообщении об ошибке, как 550+No+such+recipient
,
Я создал простой скрипт Ruby, который анализирует журналы (использует анализатор журналов), чтобы найти, какая почта вызвала что-то вроде 550+No+such+recipient
,
Я просто удивлен, что не смог найти инструмент, который это делает. Я нашел такие инструменты, как Zabbix и Splunk для анализа логов, но они выглядят излишне для такой простой задачи.
Кто-нибудь знает инструмент, который будет анализировать логи SMTP, находить отказы и электронные письма, которые их вызывают?
5 ответов
Эта статья именно то, что вы ищете. Он основан на отличном инструменте парсера журнала.
Анализатор журналов - это мощный универсальный инструмент, который обеспечивает универсальный доступ к запросам к текстовым данным, таким как файлы журналов, файлы XML и CSV, а также к ключевым источникам данных в операционной системе Windows®, таким как журнал событий, реестр, файловая система и Active Directory®. Вы сообщаете Log Parser, какая информация вам нужна и как вы хотите ее обрабатывать. Результаты вашего запроса могут быть отформатированы в текстовом выводе или сохранены в более специализированных целях, таких как SQL, SYSLOG или диаграмма. Большая часть программного обеспечения предназначена для выполнения ограниченного числа конкретных задач. Log Parser отличается... количество способов его использования ограничено только потребностями и фантазией пользователя. Мир - это ваша база данных с Log Parser.
Насколько я вижу, анализ файла журнала действительно полезен только для обнаружения писем, которые отклоняются на уровне сеанса SMTP. Как насчет отказов, которые происходят после того, как удаленный адаптер MTA принял сообщение для доставки, но впоследствии не может доставить его?
Мы используем следующую настройку для обнаружения и классификации всех отказов после доставки на удаленный адаптер MTA.
Всем исходящим письмам присваивается уникальный заголовок обратного пути, который при декодировании идентифицирует адрес электронной почты получателя и конкретное почтовое сообщение.
Сервер Apache James, который получает почту, возвращенную по адресу возвращенного пути.
Пользовательский mailet, разработанный на Java и выполняющийся в Apache James, который декодирует адрес, отправляет текст электронной почты в boogietools bounce studio для классификации bounce-типов, а затем сохраняет результаты в нашей базе данных.
Это работает очень, очень хорошо. Мы можем обнаруживать постоянные жесткие и временные мягкие отскоки, которые в дальнейшем подразделяются на очень детализированные типы отказов, такие как отклонение от спама, ответы вне офиса и т. Д.
Вы не хотите анализировать журналы, чтобы попытаться определить наличие отказов. У вас будут как ложные, так и ложные срабатывания, если вы просто посмотрите на логи.
Отказов может быть сгенерирован ниже по потоку от сервера, который вы доставляете. Они будут выглядеть как успешные доставки в журналах вашего исходящего сервера.
Сопоставление наивного шаблона для отскоков во входящих журналах (от нулевого отправителя до одного из ваших адресов VERP) будет неточным. Есть несколько причин, почему:
- Будут предупреждения о задержке, смешанные с фактическими отказами отказов.
- Большинство Out-of-Office и подобных автоответчиков используют нулевого отправителя для предотвращения синдрома battlin-ботов.
- Аналогично, системы "вызов-ответ" (например, *spit* boxbe.com), как правило, используют нулевого отправителя.
- Ваши адреса отправителей VERP, если они постоянны для каждого получателя, будут собираться спаммерами и возвращаться либо как цели спама, либо как обратное рассеяние.
Так что, к сожалению, единственный надежный способ сделать это - проверить сами сообщения отказов. Большинство из них будут иметь часть MIME "отчет / статус доставки" в соответствии с RFC1894, и, в зависимости от вашего языка, возможно, есть библиотеки или модули, которые помогут с другими форматами отказов. Единственный, с которым у меня есть непосредственный опыт, это модуль Perl Mail::DeliveryStatus::BounceParser, который работает достаточно хорошо.
Мне нравится logParser. Когда мне нужно разобрать что-то очень специфическое или нестандартное или используя регулярные выражения, я использую biterScripting. На самом деле у них есть несколько примеров сценариев, которые я использовал для начала. Один из них находится по адресу http://www.biterscripting.com/Download/SS_WebLogParser.txt.
На этом посте я основал программу-счетчик отказов, чтобы потом выяснить, что этот метод на самом деле не работает для отправителей с большим объемом, поскольку журналы SMTP расположены не в последовательном порядке. В моем блоге есть больше об этом: Обнаружение отказов электронной почты в журналах SMTP и почему это невозможно.