Репликация логов в Object Storage с помощью Fluent Bit
Агрегаторы данных позволяют транслировать данные, такие как логи, с виртуальных машин в сервисы просмотра логов и хранения данных.
С предлагаемой инструкцией вы научитесь автоматически реплицировать логи с виртуальной машины в бакет Object Storage с помощью обработчика логов Fluent Bit
Решение, которое описано ниже, работает по следующей схеме:
- На рабочей ВМ запущен Fluent Bit как systemd
-модуль. - Fluent Bit собирает логи в соответствии с настройками конфигурации и отправляет их в поток Data Streams по протоколу Amazon Kinesis Data Streams
. - В рабочем каталоге настроен трансфер Data Transfer, который забирает данные из потока и сохраняет в бакет Object Storage.
Чтобы настроить репликацию логов:
- Подготовьте облако к работе.
- Настройте окружение.
- Создайте бакет Object Storage, в котором будут храниться логи.
- Создайте поток данных Data Streams.
- Создайте трансфер Data Transfer.
- Установите Fluent Bit.
- Подключите Fluent Bit к потоку данных.
- Проверьте отправку и получение данных.
Если вы больше не хотите хранить логи, удалите используемые ресурсы.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки хранения данных входит:
- плата за обслуживание потока данных (см. тарифы Yandex Data Streams);
- плата за перенос данных между источниками и приемниками (см. тарифы Yandex Data Transfer);
- плата за хранение данных (см. тарифы Yandex Object Storage).
Настройте окружение
-
Создайте сервисный аккаунт, например
logs-sa
, с рольюeditor
на каталог. -
Создайте статический ключ доступа для сервисного аккаунта. Сохраните идентификатор и секретный ключ. Они понадобятся, чтобы авторизоваться в AWS.
-
Создайте ВМ из публичного образа Ubuntu 20.04. В блоке Доступ укажите сервисный аккаунт, который создали на предыдущем шаге.
-
Подключитесь к ВМ по SSH.
-
Установите на ВМ утилиту AWS CLI
. -
Выполните команду:
aws configure
-
Последовательно введите:
AWS Access Key ID [None]:
— идентификатор ключа сервисного аккаунта.AWS Secret Access Key [None]:
— секретный ключ сервисного аккаунта.Default region name [None]:
— регионru-central1
.
Создайте бакет
- В консоли управления
выберите каталог, в котором хотите создать бакет. - Выберите сервис Object Storage.
- Нажмите кнопку Создать бакет.
- Введите имя бакета.
- В поле Класс хранилища выберите
Холодное
. - Нажмите кнопку Создать бакет.
Создайте поток данных
- В консоли управления
выберите каталог, в котором хотите создать поток данных. - Выберите сервис Data Streams.
- Нажмите кнопку Создать поток.
- Укажите существующую бессерверную базу данных YDB или создайте новую. Если вы создали новую БД, нажмите значок , чтобы обновить список БД.
- Введите имя потока данных, например
logs-stream
. - Нажмите кнопку Создать.
Дождитесь запуска потока данных. Когда поток станет готов к использованию, его статус изменится с Creating
на Active
.
Создайте трансфер
- В консоли управления
выберите каталог, в котором хотите создать трансфер. - Выберите сервис Data Transfer.
- Создайте эндпоинт-источник:
- На вкладке
Эндпоинты нажмите кнопку Создать эндпоинт. - В поле Направление выберите
Источник
. - Введите имя эндпоинта, например
logs-source
. - В списке Тип базы данных выберите
Yandex Data Streams
. - Выберите базу данных, которую указали в настройках потока данных, созданного ранее.
- Введите имя потока данных
logs-stream
. - Выберите созданный ранее сервисный аккаунт
logs-sa
. - В блоке Расширенные настройки укажите правила конвертации для данных
Парсер CloudLogging
. - Нажмите кнопку Создать.
- На вкладке
- Создайте эндпоинт-приемник:
- На вкладке
Эндпоинты нажмите кнопку Создать эндпоинт. - В поле Направление выберите
Приёмник
. - Введите имя эндпоинта, например
logs-receiver
. - В списке Тип базы данных выберите
Object Storage
. - Введите имя созданного ранее бакета.
- Выберите созданный ранее сервисный аккаунт
logs-sa
. - В поле Выходной формат выберите
JSON
. - Нажмите кнопку Создать.
- На вкладке
- Создайте трансфер:
- На вкладке
Трансферы нажмите кнопку Создать трансфер. - Введите имя трансфера, например
logs-transfer
. - Выберите созданный ранее эндпоинт-источник
logs-source
. - Выберите созданный ранее эндпоинт-приемник
logs-receiver
. - Нажмите кнопку Создать.
- На вкладке
- Напротив созданного трансфера нажмите
и выберите Активировать.
Дождитесь активации трансфера. Когда трансфер станет готов к использованию, его статус сменится с Создается
на Реплицируется
.
Установите Fluent Bit
Примечание
В данном руководстве используется актуальная версия Fluent Bit v1.9.
-
Чтобы установить Fluent Bit на ВМ, выполните команду:
curl https://raw.githubusercontent.com/fluent/fluent-bit/master/install.sh | sh
Подробнее о том, как установить Fluent Bit, см. в официальной документации
. -
Запустите сервис
fluent-bit
:sudo systemctl start fluent-bit
-
Проверьте статус сервиса
fluent-bit
, он должен быть активен:sudo systemctl status fluent-bit
Результат должен содержать статус
active (running)
и логи встроенного плагинаcpu
, которые Fluent Bit по умолчанию собирает сразу после установки:● fluent-bit.service - Fluent Bit Loaded: loaded (/lib/systemd/system/fluent-bit.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2022-09-08 10:23:03 UTC; 10s ago Docs: https://docs.fluentbit.io/manual/ Main PID: 1328 (fluent-bit) Tasks: 4 (limit: 2310) Memory: 2.8M CGroup: /system.slice/fluent-bit.service └─1328 /opt/fluent-bit/bin/fluent-bit -c //etc/fluent-bit/fluent-bit.conf Sep 08 10:23:03 ycl-20 fluent-bit[1328]: [2022/09/08 10:23:03] [ info] [output:stdout:stdout.0] worker #0 started Sep 08 10:23:05 ycl-20 fluent-bit[1328]: [0] cpu.local: [1662632584.114661597, {"cpu_p"=>1.000000, "user_p"=>0.000000, > Sep 08 10:23:06 ycl-20 fluent-bit[1328]: [0] cpu.local: [1662632585.114797726, {"cpu_p"=>0.000000, "user_p"=>0.000000, > ...
Подключите Fluent Bit к потоку данных
Примечание
Если у вас установлена версия Fluent Bit ниже, чем 1.9, распространяемая как часть пакета td-agent-bit
, редактируйте файлы /etc/td-agent-bit/td-agent-bit.conf
, /lib/systemd/system/td-agent-bit.service
и перезапускайте сервис td-agent-bit
.
-
Откройте файл
/etc/fluent-bit/fluent-bit.conf
:sudo vim /etc/fluent-bit/fluent-bit.conf
-
Добавьте блок
OUTPUT
с настройками плагинаkinesis_streams
:[OUTPUT] Name kinesis_streams Match * region ru-central-1 stream /<регион>/<идентификатор_каталога>/<идентификатор_базы_данных>/<имя_потока_данных> endpoint https://yds.serverless.yandexcloud.net
Где:
stream
— идентификатор потока данных Data Streams.Например, укажите идентификатор потока
/ru-central1/aoeu1kuk2dht********/cc8029jgtuab********/logs-stream
, если:logs-stream
— имя потока;ru-central1
— регион;aoeu1kuk2dht********
— идентификатор каталога;cc8029jgtuab********
— идентификатор базы данных YDB.
Подробнее о том, как настроить Fluent Bit см. в официальной документации
. -
Откройте файл
/lib/systemd/system/fluent-bit.service
:sudo vim /lib/systemd/system/fluent-bit.service
-
Добавьте в блок
SERVICE
переменные окружения, которые содержат пути к файлам с ключами доступа:Environment=AWS_CONFIG_FILE=/home/<имя_пользователя>/.aws/config Environment=AWS_SHARED_CREDENTIALS_FILE=/home/<имя_пользователя>/.aws/credentials
Где
<имя_пользователя>
— логин, который вы указали в настройках виртуальной машины. -
Перезапустите сервис
fluent-bit
:sudo systemctl daemon-reload sudo systemctl restart fluent-bit
-
Проверьте статус сервиса
fluent-bit
. В нем не должно быть сообщений об ошибках:sudo systemctl status fluent-bit
Результат:
Sep 08 16:51:19 ycl-20 fluent-bit[3450]: Fluent Bit v1.9.8 Sep 08 16:51:19 ycl-20 fluent-bit[3450]: * Copyright (C) 2015-2022 The Fluent Bit Authors Sep 08 16:51:19 ycl-20 fluent-bit[3450]: * Fluent Bit is a CNCF sub-project under the umbrella of Fluentd Sep 08 16:51:19 ycl-20 fluent-bit[3450]: * https://fluentbit.io Sep 08 16:51:19 ycl-20 fluent-bit[3450]: [2022/09/08 16:51:19] [ info] [fluent bit] version=1.9.8, commit=, pid=3450 Sep 08 16:51:19 ycl-20 fluent-bit[3450]: [2022/09/08 16:51:19] [ info] [storage] version=1.2.0, type=memory-only, sync=normal, checksum=disabled, max_chunks_up=128 Sep 08 16:51:19 ycl-20 fluent-bit[3450]: [2022/09/08 16:51:19] [ info] [cmetrics] version=0.3.6 Sep 08 16:51:19 ycl-20 fluent-bit[3450]: [2022/09/08 16:51:19] [ info] [sp] stream processor started Sep 08 16:51:19 ycl-20 fluent-bit[3450]: [2022/09/08 16:51:19] [ info] [output:kinesis_streams:kinesis_streams.1] worker #0 started Sep 08 16:51:19 ycl-20 fluent-bit[3450]: [2022/09/08 16:51:19] [ info] [output:stdout:stdout.0] worker #0 started
Проверьте отправку и получение данных
- В консоли управления
перейдите в каталог, в котором создали поток данных, трансфер и бакет. - Выберите сервис Data Streams.
- Выберите поток данных
logs-stream
. - Перейдите на вкладку Мониторинг и посмотрите графики активности потока.
- Выберите сервис Data Transfer.
- Выберите трансфер
logs-transfer
. - Перейдите на вкладку Мониторинг и посмотрите графики активности трансфера.
- Выберите сервис Object Storage.
- Выберите бакет, созданный ранее.
- Проверьте, что в бакете появились объекты. Скачайте и посмотрите полученные файлы с логами.
Как удалить созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать: