Передача событий Yandex Cloud Postbox в Yandex Data Streams и их анализ с помощью Yandex DataLens
- Подготовьте облако к работе
- Создайте сервисные аккаунты
- Создайте статический ключ доступа
- Настройте базу данных Managed Service for YDB
- Создайте поток данных Data Streams
- Подготовьте ресурсы Yandex Cloud Postbox
- Подготовьте ресурсы Cloud Functions
- Отправьте письма
- Настройте визуализацию в DataLens
- Как удалить созданные ресурсы
В этом руководстве вы настроите передачу событий Yandex Cloud Postbox в Yandex Data Streams и визуализацию этих событий с помощью Yandex DataLens для последующего анализа. Источник событий — отправка электронных писем.
Реализовать предлагаемое решение можно с помощью консоли управления
Чтобы настроить передачу событий и их визуализацию:
- Подготовьте облако к работе.
- Создайте сервисные аккаунты.
- Создайте статический ключ доступа.
- Настройте базу данных Managed Service for YDB.
- Создайте поток данных Data Streams.
- Подготовьте ресурсы Yandex Cloud Postbox.
- Подготовьте ресурсы Cloud Functions.
- Отправьте письма.
- Настройте визуализацию в DataLens.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входят:
- плата за операции с YDB и хранение данных (см. тарифы Yandex Managed Service for YDB);
- плата за хранение данных Data Streams (см. тарифы Yandex Data Streams);
- плата за количество вызовов функции, вычислительные ресурсы, выделенные для выполнения функции, и исходящий трафик (см. тарифы Cloud Functions);
- плата за использование Yandex Cloud Postbox (см. тарифы Yandex Cloud Postbox);
- плата за тариф DataLens (см. тарифы Yandex DataLens).
Создайте сервисные аккаунты
Создайте два сервисных аккаунта:
yds-functions— от его имени будет вызываться функция Cloud Functions и будут записываться данные в базу данных YDB;postbox-user— от его имени будут отправляться письма через Yandex Cloud Postbox.
-
Создайте сервисный аккаунт
yds-functions:Консоль управления- В консоли управления
выберите каталог, в котором вы будете создавать инфраструктуру. - В списке сервисов выберите Identity and Access Management и нажмите кнопку Создать сервисный аккаунт.
- В поле Имя укажите имя
yds-functions. - Нажмите кнопку
Добавить роль и выберите ролиyds.editorиfunctions.functionInvoker. - Нажмите кнопку Создать.
- В консоли управления
-
Аналогичным образом создайте сервисный аккаунт
postbox-userи назначьте ему рольpostbox.sender.
Создайте статический ключ доступа
Создайте статический ключ доступа, который будет использоваться для отправки писем:
-
В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. -
В списке сервисов выберите Identity and Access Management и в списке сервисных аккаунтов выберите
postbox-user. В открывшемся окне:-
На панели сверху нажмите кнопку
Создать новый ключ и выберите Создать статический ключ доступа. -
Нажмите кнопку Создать.
-
Сохраните идентификатор и секретный ключ.
Внимание
После закрытия диалога значение ключа будет недоступно.
-
Настройте базу данных Managed Service for YDB
В качестве хранилища событий может использоваться любая подходящая для задач аналитики СУБД. В данном руководстве используется бессерверная база данных Managed Service for YDB. Для других СУБД SQL-запрос создания таблицы и код функции загрузки событий в нее могут отличаться.
Создайте базу данных
- В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. - В списке сервисов выберите Managed Service for YDB и нажмите кнопку Создать базу данных.
- В поле Имя укажите
postbox-events-ydb. - В поле Тип базы данных выберите
Serverless. - Другие параметры базы данных оставьте без изменений и нажмите кнопку Создать базу данных.
Дождитесь запуска БД. В процессе создания база данных будет находиться в статусе Provisioning, а когда станет готова к использованию, ее статус изменится на Running.
Создайте таблицу
-
На странице Базы данных выберите вновь созданную БД
postbox-events-ydb. -
Чтобы открыть корневую директорию БД, перейдите на вкладку
Навигация. -
Чтобы создать запрос к БД, в правом верхнем углу нажмите кнопку Новый SQL-запрос.
-
В открывшемся поле Запрос введите:
CREATE TABLE postbox_events ( saved_datetime Datetime NOT NULL, eventid String NOT NULL, eventtype String, mail_timestamp Timestamp, mail_messageid String, mail_ch_from String, mail_ch_to String, mail_ch_messageid String, mail_ch_subject String, delivery_timestamp Timestamp, delivery_time_ms Uint64, delivery_recipients String, bounce_bounceType String, bounce_bounceSubType String, bounce_bouncedRecipients String, bounce_timestamp Timestamp, -- message Json, PRIMARY KEY (saved_datetime, eventid) ) -
Нажмите кнопку
Выполнить.В результате выполнения запроса в базе данных появится новая таблица
postbox_events.
Создайте поток данных Data Streams
Создайте поток данных, в котором будут регистрироваться события Yandex Cloud Postbox:
- В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. - В списке сервисов выберите Data Streams и нажмите кнопку Создать поток.
- В поле База данных выберите созданную ранее базу данных
postbox-events-ydb. - В поле Имя укажите имя потока данных
postbox-events-stream. - В поле Режим тарификации выберите
По фактическому использованию. - Другие параметры потока данных оставьте без изменений и нажмите кнопку Создать.
Дождитесь запуска потока данных. Когда поток станет готов к использованию, его статус изменится с Creating на Active.
Подготовьте ресурсы Yandex Cloud Postbox
В сервисе Yandex Cloud Postbox настройте конфигурацию для регистрации событий в Data Streams, создайте адрес для отправки писем и пройдите проверку прав на домен.
Создайте конфигурацию Yandex Cloud Postbox
-
В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. -
В списке сервисов выберите Cloud Postbox.
-
На панели слева выберите
Конфигурации и нажмите кнопку Создать конфигурацию. -
В поле Имя укажите имя конфигурации
postbox-events-config. -
В блоке Подписки нажмите кнопку Добавить и в появившейся форме:
- В поле Название укажите название подписки
postbox-events-subscribe. - В поле Поток данных выберите поток данных
postbox-events-stream. - Включите опцию Включено, чтобы активировать подписку.
- В поле Название укажите название подписки
-
Другие параметры конфигурации оставьте без изменений и нажмите кнопку Создать конфигурацию.
Создайте адрес Yandex Cloud Postbox
-
На вашем компьютере сгенерируйте ключ
privatekey.pemдля создания DKIM-подписи. Для этого в терминале выполните команду:openssl genrsa -out privatekey.pem 2048Примечание
В операционных системах Linux и macOS утилита
opensslпредустановлена. В Windows эту утилиту необходимо предварительно установить. Подробнее см. на сайте проекта. -
Создайте адрес Yandex Cloud Postbox:
Консоль управления- В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. - В списке сервисов выберите Cloud Postbox.
- На панели слева выберите
Адреса и нажмите кнопку Создать адрес. - В поле Домен укажите домен, с которого вы будете отправлять письма. Домен может быть любого уровня и должен принадлежать вам.
- В поле Селектор укажите селектор, например
postbox. Указанный селектор должен использоваться только в одной ресурсной записи — той, которую необходимо создать при прохождении проверки прав на домен. - В поле Конфигурация выберите созданную ранее конфигурацию
postbox-events-config. - В поле Приватный ключ вставьте содержимое файла приватного ключа
privatekey.pem, созданного на предыдущем шаге. - Другие параметры адреса оставьте без изменений и нажмите кнопку Создать адрес.
- В открывшемся списке адресов нажмите на строку с вновь созданным адресом.
- На странице с информацией об адресе в блоке Подтверждение подписи из поля Значение скопируйте и сохраните значение TXT-записи.
- В консоли управления
Пройдите проверку владения доменом
Чтобы отправлять письма, подтвердите владение доменом. После создания адреса на его странице сформируются настройки DKIM-подписи. Их нужно указать в качестве значений ресурсной записи, которую необходимо добавить в вашу доменную зону. Вы можете добавить запись у вашего регистратора или в сервисе Yandex Cloud DNS, если вы делегировали ваш домен Yandex Cloud.
Пример создания ресурсной записи в Yandex Cloud DNS
-
В консоли управления
выберите каталог, в котором находятся адрес и ваша доменная зона.Если у вас еще нет публичной зоны DNS, создайте ее.
-
Выберите сервис Cloud DNS.
-
Выберите вашу доменную зону.
-
Нажмите кнопку Создать запись.
-
В поле Имя укажите часть имени, сгенерированного при создании адреса, без домена в формате
<селектор>._domainkey. Напримерpostbox._domainkey.Примечание
Для других DNS-сервисов может потребоваться скопировать запись целиком. Итоговая запись должна иметь вид
<селектор>._domainkey.<домен>., напримерpostbox._domainkey.example.com.. -
В поле Тип выберите
TXT. -
В поле Значение скопируйте содержимое поля Значение из блока Подтверждение подписи. Обратите внимание, что значение записи нужно взять в кавычки, например:
"v=DKIM1;h=sha256;k=rsa;p=M1B...aCA8" -
Нажмите кнопку Создать.
-
Перейдите в сервис Cloud Postbox.
-
Выберите созданный адрес.
-
Нажмите кнопку Проверить адрес. Если запись верна, статус проверки на странице адреса изменится на
Success.
Ответы DNS-сервера кешируются, поэтому возможны задержки при обновлении ресурсной записи.
Подготовьте ресурсы Cloud Functions
Создайте функцию для отправки данных из потока данных в БД, а также триггер, который будет вызывать функцию при регистрации событий в потоке данных.
Получите код функции
Скачайтеpostbox-events.zip на свой компьютер. В архиве находятся файлы index.py и requirements.txt, содержащие код функции.
На своем компьютере выполните следующие операции:
-
Склонируйте репозиторий
с кодом функции:git clone https://github.com/yandex-cloud-examples/yc-postbox-events/blob/main/build/postbox-events.gitПерейдите в директорию с репозиторием. В ней должны появиться файлы
index.pyиrequirements.txt, содержащие код функции. -
Создайте архив с именем
postbox-events.zipи добавьте в него файлыindex.pyиrequirements.txt.
Получите реквизиты для подключения к БД
-
В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. -
В списке сервисов выберите Managed Service for YDB.
-
Выберите базу данных, для которой нужно получить эндпоинт и путь.
-
Эндпоинт БД указан в блоке Соединение в первой части значения поля Эндпоинт (часть до вхождения
/?database=):Например, эндпоинт для БД в режиме Serverless —
grpcs://ydb.serverless.yandexcloud.net:2135. -
Путь БД указан в блоке Соединение во второй части значения поля Эндпоинт (часть после вхождения
/?database=).Пример пути БД:
/ru-central1/b1gia87mbaom********/etnudu2n9ri3********.
-
Создайте функцию
Для создания функции вам потребуется код функции и реквизиты для подключения к БД.
-
В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. -
В списке сервисов выберите Cloud Functions.
-
Создайте функцию:
- Нажмите кнопку Создать функцию.
- В поле Имя введите имя функции. Например,
postbox-events-function. - Нажмите кнопку Создать.
-
Создайте версию функции:
-
В открывшемся окне Редактор выберите
Python 3.12. -
Отключите опцию Добавить файлы с примерами кода.
-
Нажмите кнопку Продолжить.
-
В поле Способ выберите
ZIP-архив. -
Нажмите кнопку Прикрепить файл и выберите архив
postbox-events.zip. -
В поле Точка входа укажите
index.handler. -
В блоке Параметры укажите:
-
Таймаут —
10 секунд. -
Память —
128 МБ. -
Сервисный аккаунт —
yds-functions. -
Переменные окружения:
Ключ Описание Пример значения YDB_DATABASEПуть БД /ru-central1/b1go123e9vjq********/etnu15kr22********YDB_ENDPOINTЭндпоинт БД grpcs://ydb.serverless.yandexcloud.net:2135YDB_TABLEИмя таблицы postbox_events
-
-
Нажмите кнопку Сохранить изменения.
-
Создайте триггер
- В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. - В списке сервисов выберите Cloud Functions.
- На панели слева выберите
Триггеры и нажмите кнопку Создать триггер. - В поле Имя введите имя триггера
postbox-events-trigger. - В поле Тип выберите
Data Streams. - В поле Запускаемый ресурс выберите
Функция. - В блоке Настройки Data Streams выберите поток данных
postbox-events-streamи сервисный аккаунтyds-functions. - В блоке Настройки функции выберите функцию
postbox-events-functionи сервисный аккаунтyds-functions. - Нажмите кнопку Создать триггер.
Отправьте письма
-
Удобным вам способом отправьте несколько тестовых писем с использованием адреса Yandex Cloud Postbox и статического ключа доступа, созданных ранее.
-
Убедитесь, что письма доставлены. Для этого проверьте почту, на которую вы отправляли эти письма.
-
Убедитесь, что данные об отправке писем поступают в сервисы:
Консоль управления-
Проверьте поток данных:
-
В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. -
В списке сервисов выберите Data Streams.
-
Выберите поток данных
postbox-events-stream. -
Перейдите на вкладку
Просмотр данных.На графиках должны отобразиться события отправки писем.
-
-
Проверьте БД:
-
В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. -
В списке сервисов выберите Managed Service for YDB.
-
Выберите базу данных
postbox-events-ydb. -
Перейдите на вкладку
Навигация -
Выберите таблицу
postbox_events.В таблице должны появиться записи. В некоторых столбцах может быть значение
NULL— это зависит от типа уведомления, которое было получено от сервиса Yandex Cloud Postbox.
-
-
Настройте визуализацию в DataLens
Чтобы наблюдать за отправкой писем, настройте подключение, создайте датасет, чарты и дашборд.
Создайте подключение
-
Перейдите на главную страницу
DataLens. -
На панели слева выберите
Подключения и нажмите кнопку Создать подключение. -
Выберите коннектор YDB.
-
Укажите параметры подключения:
- Облако и каталог — выберите каталог, в котором выполняете руководство.
- Сервисный аккаунт —
yds-functions. - База данных —
postbox-events-ydb. - Время жизни кеша в секундах —
По умолчанию. - Включите опцию Уровень доступа SQL запросов и выберите
Разрешить подзапросы в датасетах.
-
Нажмите кнопку Создать подключение.
-
В открывшемся окне выберите воркбук, в котором будет создано подключение, и нажмите кнопку Создать.
-
Введите имя подключения
postbox-events-connectionи нажмите Создать.
Создайте датасет
- Перейдите на главную страницу
DataLens. - На панели слева выберите
Датасеты и нажмите кнопку Создать датасет. - В открывшемся окне выберите воркбук, в котором вы создали подключение, и нажмите кнопку Создать.
- В блоке Подключения нажмите
Добавить и выберите созданное ранее подключениеpostbox-events-connection. - В блоке Таблицы выберите таблицу
postbox-eventsи перетащите ее вправо. - Нажмите кнопку Сохранить.
- В открывшемся окне укажите имя датасета
postbox-events-datasetи нажмите Создать.
Создайте чарты
В качестве примера приведено создание чартов Количество событий по дням и Список событий. Аналогичным способом вы можете создать и другие чарты.
Количество событий по дням
-
Перейдите на главную страницу
DataLens. -
На панели слева выберите
Чарты, нажмите кнопку Создать чарт и выберите Чарт в Wizard. -
В открывшемся окне выберите воркбук, в котором вы создали подключение, и нажмите кнопку Создать.
-
В секции слева нажмите
Выберите датасет и выберитеpostbox-events-dataset. -
Выберите тип чарта Столбчатая диаграмма.
-
Перетащите измерения:
delivery_timestampв секцию X — по оси X будут расположены даты;eventidв секцию Y — значение по оси Y будет соответствовать количеству событий;eventtypeв секцию Цвета — типы событий будут выделены на диаграмме разными цветами.
-
Нажмите кнопку Сохранить.
-
В открывшемся окне укажите имя чарта
Количество событий по днями нажмите Сохранить.
Список событий
-
Перейдите на главную страницу
DataLens. -
На панели слева выберите
Чарты, нажмите кнопку Создать чарт и выберите Чарт в Wizard. -
В открывшемся окне выберите воркбук, в котором вы создали подключение, и нажмите кнопку Создать.
-
В секции слева нажмите
Выберите датасет и выберитеpostbox-events-dataset. -
Выберите тип чарта Таблица.
-
Перетащите следующие измерения в секцию Столбцы:
saved_datetime— дата и время сохранения события;eventid— тип события;mail_ch_to— адрес получателя;delivery_timestamp— дата и время доставки письма;delivery_time_ms— время доставки в миллисекундах;mail_ch_subject— тема письма;bounce_bounceType— тип ошибки доставки;bounce_bounceSubType— сообщение недоставки.
-
Перетащите измерение
delivery_timestampв секцию Сортировка, чтобы отсортировать таблицу по времени доставки. -
Нажмите кнопку Сохранить.
-
В открывшемся окне укажите имя чарта
Список событийи нажмите Сохранить.
Создайте дашборд
-
Перейдите на главную страницу
DataLens. -
На панели слева выберите
Дашборды и нажмите кнопку Создать дашборд. -
В открывшемся окне выберите воркбук, в котором вы создали подключение, и нажмите кнопку Создать.
-
Добавьте на дашборд чарты
Количество событий по дням,Список событийи другие, которые вы создали ранее:- На нижней панели нажмите Чарт.
- В открывшемся окне нажмите кнопку Выбрать и выберите чарт
Количество событий по дням. - Нажмите кнопку Добавить.
- Повторите действия, чтобы добавить на дашборд чарт
Список событийи (при необходимости) другие чарты.
-
С помощью мыши измените размер и положение чартов.
-
Нажмите кнопку Сохранить.
-
В открывшемся окне введите название дашборда
postbox-events-dashboard. -
Нажмите кнопку Создать.
В результате выполнения руководства вы сможете анализировать события на графиках и в таблицах.
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
- Удалите триггер для вызова функции Cloud Functions.
- Удалите функцию Cloud Functions.
- Удалите базу данных Managed Service for YDB.
- Удалите поток данных Data Streams.
- Удалите адрес и конфигурацию Yandex Cloud Postbox.
- При необходимости удалите созданные сервисные аккаунты.
- При необходимости удалите ресурсную запись и публичную зону DNS.