Хранение журналов работы приложения
Важно
Часть ресурсов, необходимых для прохождения практического руководства, доступны только в регионе Россия.
Чтобы анализировать информацию о событиях приложений за произвольный период, журналы работы приложений необходимо надежно хранить.
Обычно приложения не отправляют журналы в системы хранения напрямую, а используют агрегаторы: fluentd
Такой подход позволяет разработчикам сосредоточиться на функциональности приложения, а поставку и хранение журналов предоставить специализированным системам.
С помощью этой инструкции вы научитесь сохранять журналы работы приложений в Yandex Object Storage.
Чтобы настроить хранение журналов работы приложения:
- Подготовьте облако к работе.
- Настройте окружение.
- Создайте бакет для хранения журналов.
- Создайте поток данных.
- Создайте трансфер.
- Установите Fluentd.
- Подключите Fluentd к потоку данных.
- Проверьте отправку и получение данных.
Если хранение журналов вам больше не нужно, удалите используемые им ресурсы.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки хранения журналов приложений входит:
- плата за обслуживание потока данных (см. тарифы Yandex Data Streams);
- плата за перенос данных между источниками и приемниками (см. тарифы Yandex Data Transfer);
- плата за хранение данных (см. тарифы Yandex Object Storage).
Настройте окружение
- Создайте сервисный аккаунт и назначьте ему роль
editor
на ваш каталог. - Создайте статический ключ доступа.
Идентификатор и секретный ключ понадобятся вам на следующих шагах.
Создайте бакет для хранения журналов
- В консоли управления
выберите каталог, в котором хотите создать бакет. - В списке сервисов выберите Object Storage.
- Нажмите кнопку Создать бакет.
- Укажите имя бакета.
- В полях Доступ на чтение объектов, Доступ к списку объектов и Доступ на чтение настроек выберите Ограниченный.
- В поле Класс хранилища выберите
Холодное
. - Нажмите кнопку Создать бакет.
Создайте поток данных
- В консоли управления
выберите каталог, в котором хотите создать поток данных. - Выберите сервис Yandex Data Streams.
- Нажмите кнопку Создать поток.
- Укажите существующую бессерверную базу данных YDB или создайте новую. Если вы создали новую базу данных, после ее создания нажмите кнопку Обновить для обновления списка баз.
- Введите имя потока данных.
- Нажмите кнопку Создать.
Дождитесь запуска потока данных. Когда поток станет готов к использованию, его статус изменится с CREATING
на ACTIVE
.
Создайте трансфер
- На странице созданного потока данных нажмите кнопку Действия и выберите Создать трансфер данных.
- Создайте эндпоинт-источник:
- В поле Направление выберите
Источник
. - Укажите имя эндпоинта.
- В списке Тип базы данных выберите
Yandex Data Streams
. - Выберите базу данных для источника.
- Введите имя созданного ранее потока данных.
- Выберите созданный ранее сервисный аккаунт.
- Нажмите кнопку Создать.
- В поле Направление выберите
- Создайте эндпоинт-приемник:
- Нажмите кнопку Создать эндпоинт.
- В поле Направление выберите
Приемник
. - Укажите имя эндпоинта.
- В списке Тип базы данных выберите
Object Storage
. - Введите имя созданного ранее бакета.
- Выберите созданный ранее сервисный аккаунт.
- Нажмите кнопку Создать.
- Создайте трансфер:
- На панели слева выберите Трансферы.
- Нажмите кнопку Создать трансфер.
- Введите имя трансфера.
- Выберите созданный ранее эндпоинт-источник.
- Выберите созданный ранее эндпоинт-приемник.
- Нажмите кнопку Создать.
- Нажмите на значок
рядом с именем созданного трансфера и выберите Активировать.
Дождитесь активации трансфера. Когда трансфер станет готов к использованию, его статус сменится с Создается на Реплицируется.
Установите Fluentd
- Скачайте и установите Fluentd
. - Установите плагин Fluentd для поддержки протокола AWS Kinesis Data Streams. По этому протоколу будет осуществляться поставка данных.
sudo td-agent-gem install fluent-plugin-kinesis
Подключите Fluentd к потоку данных
- На странице созданного потока данных нажмите кнопку Подключиться и перейдите на вкладку Fluentd.
- Скопируйте пример файла конфигурации и вставьте его в файл
/etc/td-agent/td-agent.conf
. Вместо<key_id>
и<secret>
введите полученные ранее идентификатор и секретный ключ.
Пример файла конфигурации
<system>
log_level debug
</system>
<source>
@type http
@id input_http
port 8888
</source>
<match kinesis>
@type copy
<store>
@type stdout
</store>
<store>
@type kinesis_streams
aws_key_id <key_id>
aws_sec_key <secret>
# kinesis stream name
stream_name /ru-central1/b1gia92mbaom********/etnhstu01nin********/my-stream
# region
region ru-central-1
endpoint https://yds.serverless.yandexcloud.net
<buffer>
flush_interval 5s
</buffer>
</store>
</match>
Проверьте отправку и получение данных
Чтобы отправить данные в поток через Fluentd, выполните команду:
curl --request POST --data 'json={"user_id":"user1", "score": 100}' http://localhost:8888/kinesis
Если настройка выполнена успешно, в логе работы Fluentd /var/log/td-agent/td-agent.log
появятся сообщения о получении данных и записи их в Yandex Data Streams по протоколу AWS Kinesis Data Streams:
...
2022-04-20 19:36:37.770311035 +0000 kinesis: {"user_id":"user1","score":100}
2022-04-20 19:36:42 +0000 [debug]: #0 /ru-central1/b1gia92mbaom********/etnhstu01nin********/my-stream: Write chunk 5dd1b1ca1bd788e49185aa681e8132b9 / 1 records / 0 KB
2022-04-20 19:36:42 +0000 [debug]: #0 /ru-central1/b1gia92mbaom********/etnhstu01nin********/my-stream: Finish writing chunk
...
В созданном бакете появится файл, который содержит отправленное сообщение.
Как удалить созданные ресурсы
Чтобы перестать платить за используемые ресурсы: