Инструмент для разбора логов SMTP, который находит отказы - PullRequest
4 голосов
/ 15 октября 2008

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

Чтобы найти отскоки, я анализирую файл журнала 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 ]

7 голосов
/ 08 июня 2009

Насколько я вижу, анализ файла журнала действительно полезен только для обнаружения писем, которые отклоняются на уровне сеанса SMTP. Как насчет отказов, которые происходят после того, как удаленный адаптер MTA принял сообщение для доставки, но впоследствии не может доставить его?

Мы используем следующую настройку для обнаружения и классификации всех отказов после доставки на удаленный адаптер MTA.

  1. Всем исходящим письмам присваивается уникальный заголовок пути возврата , который при декодировании идентифицирует адрес электронной почты получателя и конкретное почтовое сообщение.

  2. сервер Apache James , который получает почту, возвращаемую на адрес возвращаемого пути.

  3. Пользовательский mailet, разработанный на Java и выполняющийся в Apache James, который декодирует адрес, отправляет текст электронной почты в boogietools bounce studio для классификации отказов и затем сохраняет результаты в нашей базе данных. .

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

6 голосов
/ 15 октября 2008

Эта статья - это именно то, что вы ищете. Он основан на отличном инструменте log parser .

Log parser - мощный, универсальный инструмент, который обеспечивает универсальный запрос доступ к текстовым данным, таким как журнал файлы, файлы XML и файлы CSV, а а также ключевые источники данных на Операционная система Windows®, такая как Журнал событий, реестр, файл система и Active Directory®. Вы расскажите Log Parser какую информацию вы нужно и как вы хотите это обработать. Результаты вашего запроса могут быть пользовательский формат в текстовом выводе, или они могут быть сохранены для более специальные цели, такие как SQL, SYSLOG или график. Большая часть программного обеспечения предназначена для выполнить ограниченное количество конкретные задачи. Log Parser is разные ... количество способов это может использоваться ограничено только потребностями и воображение пользователя. Мир - это ваша база данных с журналом Parser.

1 голос
/ 31 декабря 2008

Мне нравится logParser. Когда мне нужно разобрать что-то очень специфическое или нестандартное или используя регулярные выражения, я использую biterScripting. На самом деле у них есть несколько примеров сценариев, которые я использовал для начала. Один на http://www.biterscripting.com/Download/SS_WebLogParser.txt.

0 голосов
/ 08 июля 2009

Вы не хотите анализировать журналы, чтобы попытаться идентифицировать отскоки. У вас будут как ложные, так и ложные срабатывания, если вы просто посмотрите на логи.

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

Сопоставление наивного шаблона для отказов во входящих журналах (от нулевого отправителя до одного из ваших адресов VERP) будет неточным. Есть несколько причин, почему:

  • Будут предупреждения о задержке, смешанные с фактическими отказами.
  • Большинство автоответчиков Out-of-Office и подобных им используют нулевого отправителя для предотвращения синдрома battlin-bots.
  • Точно так же системы ответа на вызов (например, * spit * boxbe.com), как правило, используют нулевого отправителя.
  • Ваши адреса отправителей VERP, если они постоянны для каждого получателя, будут собираться спаммерами и возвращаться либо как цели спама, либо как обратное рассеяние.

Так что, к сожалению, единственный надежный способ сделать это - изучить сами сообщения о сбое. Большинство из них будут иметь часть MIME «отчет / статус доставки» в соответствии с RFC1894, и, в зависимости от вашего языка, возможно, есть библиотеки или модули, которые помогут с другими форматами отказов. Единственный, с которым у меня есть непосредственный опыт, это модуль Perl Mail :: DeliveryStatus :: BounceParser, который работает достаточно хорошо.

0 голосов
/ 27 января 2009

Я основал программу-счетчик отказов на этом посте, чтобы потом выяснить, что этот метод на самом деле не работает для отправителей с большим объемом, поскольку журналы SMTP расположены не в последовательном порядке. В моем блоге есть больше об этом: Обнаружение отказов в электронной почте в журналах SMTP и почему это невозможно .

...