Передача событий Yandex Cloud Postbox в Yandex Data Streams и их анализ с помощью Yandex DataLens
Важно
Часть ресурсов, необходимых для прохождения практического руководства, доступны только в регионе Россия.
В этом руководстве вы настроите передачу событий Yandex Cloud Postbox в Yandex Data Streams и визуализацию этих событий с помощью Yandex DataLens для последующего анализа. Источник событий — отправка электронных писем.
Вы сможете реализовать все представленные решения в консоли управления
Чтобы настроить передачу событий и их визуализацию:
- Подготовьте облако к работе.
- Настройте базу данных Managed Service for YDB.
- Создайте поток данных Data Streams.
- Подготовьте ресурсы Yandex Cloud Postbox и Cloud DNS.
- Подготовьте ресурсы 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).
Создайте сервисный аккаунт
- В консоли управления
выберите нужный каталог. - В списке сервисов выберите Identity and Access Management.
- Нажмите кнопку Создать сервисный аккаунт.
- Введите имя сервисного аккаунта:
yds-functions
. - Нажмите кнопку
Добавить роль и выберите ролиyds.editor
иfunctions.functionInvoker
. - Нажмите кнопку Создать.
Настройте базу данных 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
Создайте поток данных для регистрации событий.
- В консоли управления
выберите сервис Data Streams. - Нажмите кнопку Создать поток.
- Укажите базу данных
postbox-events-ydb
. - Введите имя потока данных
postbox-events-stream
. - Выберите режим тарификации
По фактическому использованию
. - Нажмите кнопку Создать.
Дождитесь запуска потока данных. Когда поток станет готов к использованию, его статус изменится с Creating
на Active
.
Подготовьте ресурсы Yandex Cloud Postbox и Cloud DNS
Создайте адрес для отправки писем, пройдите проверку владения доменом и настройте конфигурацию для регистрации событий в Data Streams.
Создайте адрес
-
На своем компьютере сгенерируйте ключ
privatekey.pem
для создания DKIM-подписи:Linuxopenssl genrsa -out privatekey.pem 2048
-
Создайте адрес:
Консоль управления- В консоли управления
выберите сервис Cloud Postbox. - Нажмите кнопку Создать адрес.
- В поле Домен укажите домен, с которого будете отправлять письма. Домен может быть любого уровня.
- В поле Селектор укажите селектор, например
postbox
. Указанный селектор должен использоваться только в одной ресурсной записи — той, которую необходимо создать при прохождении проверки владения доменом. - В поле Приватный ключ скопируйте содержимое файла приватного ключа
privatekey.pem
. - Нажмите кнопку Создать адрес.
- В консоли управления
Пройдите проверку владения доменом
Чтобы отправлять письма, подтвердите владение доменом. После создания адреса на его странице сформируются настройки DKIM-подписи. Их нужно указать в качестве значений ресурсной записи, которую необходимо добавить в вашу доменную зону. Вы можете добавить запись у вашего регистратора или в сервисе Yandex Cloud DNS, если вы делегировали ваш домен.
Пример создания ресурсной записи в Cloud 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 Postbox. -
На панели слева выберите
Конфигурации. -
Нажмите кнопку Создать конфигурацию.
-
Введите имя конфигурации
postbox-events-config
. -
В блоке Подписки нажмите Добавить:
- Введите название подписки
postbox-events-subscribe
. - Выберите поток данных
postbox-events-stream
. - Включите опцию Включено, чтобы активировать подписку.
- Введите название подписки
-
Нажмите кнопку Создать конфигурацию.
Подготовьте ресурсы 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
. -
В блоке Параметры укажите:
-
Таймаут, c —
10
. -
Память —
128 МБ
. -
Сервисный аккаунт —
yds-functions
. -
Переменные окружения:
Ключ Описание Пример значения YDB_DATABASE
Путь БД /ru-central1/b1go123e9vjq********/etnu15kr22********
YDB_ENDPOINT
Эндпоинт БД grpcs://ydb.serverless.yandexcloud.net:2135
YDB_TABLE
Имя таблицы postbox_events
-
-
Нажмите кнопку Сохранить изменения.
-
Создайте триггер
- В консоли управления
выберите сервис Cloud Functions. - На панели слева выберите
Триггеры. - Нажмите кнопку Создать триггер.
- В поле Имя введите имя триггера. Например,
postbox-events-trigger
. - В поле Тип выберите
Data Streams
. - В поле Запускаемый ресурс выберите
Функция
. - В блоке Настройки Data Streams выберите поток данных
postbox-events-stream
и сервисный аккаунтyds-functions
. - В блоке Настройки функции выберите функцию
postbox-events-function
и сервисный аккаунтyds-functions
. - Нажмите кнопку Создать триггер.
Отправьте письма
-
Создайте сервисный аккаунт
postbox-user
c рольюpostbox.sender
и статические ключи доступа. -
Отправьте несколько тестовых писем с использованием адреса, созданного ранее.
-
Убедитесь, что письма отправлены — проверьте почту, на которую отправлены письма.
-
Убедитесь, что данные поступают в сервисы:
Консоль управления-
Проверьте поток данных:
-
В консоли управления
выберите сервис 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. -
Нажмите кнопку Создать чарт.
-
На панели слева нажмите
Выберите датасет и выберитеpostbox-events-dataset
. -
Выберите тип чарта Столбчатая диаграмма.
-
Перетащите измерения:
delivery_timestamp
в секцию X — по оси X будут расположены даты;eventid
в секцию Y — значение по оси Y будет соответствовать количеству событий;eventtype
в секцию Цвета — типы событий будут выделены на диаграмме разными цветами.
-
Нажмите кнопку Сохранить.
-
В открывшемся окне укажите имя чарта
Количество событий по дням
и нажмите Сохранить.
Список событий
-
Перейдите на главную страницу
DataLens. -
Нажмите кнопку Создать чарт.
-
На панели слева нажмите
Выберите датасет и выберите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
. -
Нажмите кнопку Создать.
В результате выполнения руководства вы сможете анализировать события на графиках и в таблицах.
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы: