41
Почта в интернет-проекте: инфраструктура, статистика, мониторинг Лебедев Алексей

Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Embed Size (px)

DESCRIPTION

- Общие рекомендации по проектированию и настройки почтовой инфраструктуры. Как выбрать почтовый сервер, как правильно делегировать почтовый домен, на что обращают внимания ведущие почтовые сервисы при приёме писем. - Зачем нужна почтовая статистика? В большинстве интернет-проектов на почтовую статистику не обращают особого внимания. Отсутствие почтовой статистики не дает возможности объективно оценивать почтовый канал возврата трафика на сайт, привлечение новых пользователей и т. д. - Как сделать систему почтовой статистики при трафике в десятки миллионов писем в день? При большом потоке писем сбор почтовой статистики (как и отправка такого количества писем) превращается в высоконагруженный сервис, требующий определенных подходов к проектированию и агрегации данных. - Какие параметры важны для почтовой статистики? Стоит упомянуть о том, какие параметры являются обязательными в почтовой статистике, как правильно их измерять, как анализировать почтовый лог MTA. Нужно иметь представление и о том, какие параметры, вероятно, стоит добавить в почтовую статистику в зависимости от бизнес-логики проекта. - Как правильно анализировать собранные данные? Как правильно делать выводы о том, насколько хорошо работают письма в системе. Посмотрим, на что в первую очередь стоит обращать внимание при подготовке и проведении массовых почтовых рассылок. - Как локализовать проблемы с письмами? Как правильно применять систему фильтров в статистике в зависимости от бизнес-логики проекта? Какие панели мониторинга (dashboards) являются наиболее удачными и репрезентативными? - Мониторинг: как делать большие почтовые рассылки и спать спокойно. Какие показатели и их пороговые значения являются критичными при проведении рассылок? Важная дифференциация: на что необходимо обращать внимание в 3 часа ночи, а что может подождать до утра.

Citation preview

Page 1: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Почта в интернет-проекте:

инфраструктура, статистика, мониторинг

Лебедев Алексей

Page 2: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Почтовая инфраструктура

● IP адрес● Почтовый домен● Почтовый сервер● Программный код (отправка писем,

обработка жалоб и т. д.)● Статистика

Page 3: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

IP адрес

● Должен быть статическим● Лучше если у этого IP адреса не было

почтовой истории в течении последних 6 месяцев

● Идеально было бы иметь почтовый IP адрес из собственной автономной сети

Page 4: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Почтовый домен — DNS записи● Тип «А» - по домену возвращает IP адрес. На этом

домене лучше не иметь веб-версии сайта.

● Тип «PTR» - по IP адресу получаем домен. PTR запись для IP адреса должна соответствовать имени отправляющего почтового сервера, которым он представляется в процессе SMTP-сессии (HELO).

● SPF-запись (заполняется в TXT) - указывает список серверов, имеющих право отправлять email-сообщения с обратными адресами в этом домене.

● Открытый ключ для ЭЦП (заполняется в TXT)

● abuse@, postmaster@ и whois-контакты — рабочие.

Page 5: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

DomainKeys Identified Mail (DKIM)

● Это метод E-mail аутентификации для антифишинга

● Открытый ключ добавляется в txt-поле DNS-записи.

● Добавляет в письмо цифровую подпись, связанную с именем домена отправителя письма

● Для создания ЭЦП использует извлеченный из хранилища закрытый ключ, созданный на основе информации о письме. Подпись вставляется в заголовок письма (DKIM-Signature).

● Проверка подлинности происходит при помощи открытого ключа.

Page 6: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

DomainKeys

● Система e-mail аутентификации, разработанная для проверки DNS домена отправителя e-mail сообщения и достоверности сообщения.

● Проект DomainKeys начала компания Yahoo

● DomainKeys выпущен в 2007 году со статусом «historical» - RFC 4870

● Подпись вставляется в заголовок письма (DomainKey-Signature).

Page 7: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Почтовый сервер (MTA)

● Гибкая настройка почтовых логов.● Вменяемая производительность.● Наш почтовый сервер — Postfix.

Page 8: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Почтовые логи

● Анализируем почтовые логи.● Добавляем результаты отправки каждого

письма в статистику.● При неуспешной отправке — делаем

различные действия в зависимости от причины неудачной отправки.

Page 9: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Почтовые логи — sent (2.x.x)

● Письмо успешно отправлено:

Oct 16 11:47:04 relay postfix/smtp[1684]: 80E4EBFBB5134: to=<[email protected]>, relay=imx1.rambler.ru[81.19.66.235]:25, conn_use=7, delay=0.3, delays=0.13/0/0/0.17, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as A4F27516)

● Действия: отправляем результат успешной отправки в статистику.

Page 10: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Почтовые логи — deferred (4.x.x)

● Сообщение временно не отправлено:Oct 16 10:42:52 relay postfix/smtp[16262]: 67D13BF75552F: to=<[email protected]>, relay=relay.nursat.net[195.82.0.9]:25, delay=159, delays=129/0/30/0, dsn=4.4.2, status=deferred (conversation with relay.nursat.net[195.82.0.9] timed out while receiving the initial server greeting)

● Добавляем данные статистику со статусом deferred

● Применяем временную блокировку данного адреса

Page 11: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Почтовые логи — deferred (4.x.x)

● Случился «интересный» deferred:Oct 16 05:10:18 relay postfix/error[30520]: D5A21BE49DF97: to=<[email protected]>, relay=none, delay=0.12, delays=0.12/0/0/0, dsn=4.0.0, status=deferred (delivery temporarily suspended: host tommx.cdn.163.net[202.108.255.210] refused to talk to me: 421 /32 connection rate limit exceeded)

● Добавляем данные в статистику с особым статусом

● Применяем временную блокировку, мониторинг, ...

Page 12: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Почтовые логи — bounced (5.x.x)

● Сообщение не отправлено (и отправлено не будет).

Oct 16 07:53:38 relay postfix/smtp[21592]: 4332BBEAC0166: to=<[email protected]>, relay=mxs.mail.ru[94.100.176.20]:25, delay=0.2, delays=0.12/0/0.01/0.07, dsn=5.0.0, status=bounced (host mxs.mail.ru[94.100.176.20] said: 550 Message was not accepted -- invalid mailbox. Local mailbox [email protected] is unavailable: user not found (in reply to end of DATA command)

● Добавляем данные статистику со статусом bounced

● Блокируем отправку писем

● Хранилище «битых» адресов

Page 13: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Почтовые логи — bounced (5.x.x)● Случился «интересный» bounced:

Oct 16 10:03:22 relay postfix/smtp[15411]: 7FF91BF391708: to=<[email protected]>, relay=mta7.am0.yahoodns.net[98.138.112.38]:25, delay=2, delays=0.13/0/0.5/1.4, dsn=5.0.0, status=bounced (host mta7.am0.yahoodns.net[98.138.112.38] said: 554 Message not allowed - [PH01] Email not accepted for policy reasons. Please visit http://postmaster.yahoo.com/errors/postmaster-27.html [120] (in reply to end of DATA command))

● Добавляем данные в статистику с особым статусом

● Применяем временную блокировку, мониторинг, ...

Page 14: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Программный код для отправки писем

● Письмо должно удовлетворять многим RFC: 2821, 2822, 532, 5322, …

● Не надо выдумывать велосипед● Для PHP: swiftmailer, zend-mail,...● Библиотеки сами заботятся о стандартах

Page 15: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Зачем нужна почтовая статистика?

Page 16: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Почтовая рассылка в среднестатистическом проекте

● подняли MTA● Генерация контента письма● mail($recipient, $subject, $body, $header);● ...● PROFIT!

Page 17: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

А что с почтовой статистикой?

● Ммм... ● У нас есть логи MTA!● grep '@#$%@' mail.log | wc -l● Получили статистику отправленных писем!

Page 18: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Почтовая статистика из MTA

Page 19: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Что не хватает?

● А что с просмотрами, кликами?● На какие домены шлем почту?● А если рассылаем разные типы писем?● А если письма на нескольких языках?● ...

Page 20: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Есть готовые решения!

● postmaster.mail.ru● postmaster.yandex.ru● …● И они к тому же бесплатные!

Page 21: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

postmaster.yandex.ru

Page 22: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Минусы готовых решений

● Не все почтовые сервисы предоставляют доступ к почтовой статистике

● postmaster.mail.ru, postmaster.yandex.ru, … - много разных интерфейсов, нет единой статистики

● Платные решения при большом объеме почтового трафика очень дорогие

Page 23: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Делаем свою почтовую статистику

Page 24: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Какие данные передавать в почтовую статистику

● Адрес получателя

● Тип письма

● Время отправки

● Время просмотра

● Время перехода из письма на сайт

● Язык

● Страна, пол, ...

● Статус отправки (MTA: sent, bounced, deferred)

Page 25: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Как передавать данные в почтовую статистику

● Для каждого письма при отправке генерируем уникальный идентификатор, передаем ID и остальные данные в статистику

● В письмо встраиваем pixel:<img src="http://mamba.ru/1.jpg?id=288ade5a9f3fbc45b096dc695" alt=""/>

погрешность!

● В ссылках письма добавляем ID и обрабатываем в контроллерах

● Анализируем логи MTA — получаем статус отправки (sent, bounced, deferred)

Page 26: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Как обрабатывать данные в почтовой статистике

● Письмо могут просмотреть не сразу● Храним данные о каждом письме 2 недели ● В хранилище сотни миллионов записей● Асинхронно!!!● RabbitMQ + MySQL● Шардинг● Хитрая агрегация данных

Page 27: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Новый график статистики

Page 28: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Как анализировать статистику?

● Фильтры:– Почтовый сервис (gmail, hotmail etc..)

– Тип письма

– Язык

– …

● С помощью фильтров делаем полезные графики

● С помощью фильтров локализуем проблему

Page 29: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Статистика без фильтров — как бы все хорошо..

Page 30: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Фильтр «письмо о новом сообщении/Español»- проблема генерации контента на испанском

Page 31: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Фильтр «письмо о новом сообщении/AOL»- письма попали в спам

Page 32: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

MTA: Фильтр «письмо о новом сообщении»- проблема с плохими адресами

Page 33: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Делаем Dashboards

Page 34: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Жалобы пользователей

Page 35: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Жалобы: Feedback Loop (FBL)

● Работает в yahoo, hotmail, mail.ru и т д.● Подключается в интерфейсе postmaster

почтового сервиса.● отсылается уведомление при нажатии на

кнопку «Это спам»● Пересылается оригинал письма, на которое

пожаловались● Обрабатываем жалобы (отписываем от

рассылок) и добавляем в статистику жалоб.

Page 36: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Жалобы: List-Unsubscribe

● Работает в Gmail, yandex и т. д.● Встраиваем в письмо:

List-Unsubscribe: <mailto:[email protected]?subject=...>

● Отсылается уведомление при нажатии на кнопку «Это спам», «Отписаться от рассылки» и т. д.

● Оригинал письма не пересылается, данные для обработки жалобы передаем через

subject письма

Page 37: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Фильтр «письмо о новом сообщении / Italiano»- некорректный перевод письма

Page 38: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Анализ жалоб

● При всплеске жалоб необходимо выяснить причину жалоб

● Локализуем причину жалоб с помощью фильтров в статистике (язык, тип письма,..)

● Практика показывает что пользователи просто так жаловаться не будут — FBL как механизм поиска ошибок.

Page 39: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Мониторинг почты

Page 40: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Мониторинг почты

● Количество отосланных писем, просмотров писем, переходов из писем с применением различных фильтров

● Количество жалоб на письма с применением различных фильтров

● Количественных характеристики логов MTA● Пороги срабатывания мониторинга ставятся

индивидуально, в зависимости от многих параметров

Page 41: Почта в интернет-проекте: инфраструктура, статистика, мониторинг

Спасибо за внимание

Лебедев Алексей, Team leaderhtp://corp.wamba.com/ru/[email protected]