Настроить Fluent Bit
Fluent Bit — приложение, позволяющее настроить процесс сбора, обработки и выгрузки логов. Fluent Bit расширяется с помощью output- и input-плагинов. Перечень плагинов можно посмотреть на сайте Fluent Bit (Outputs, Inputs).
С помощью встроенного плагина fluent-bit-cloudwatch-input-plugin вы можете настроить выгрузку событий из платформы логов в свою инфраструктуру, например в Elasticsearch, Loki или Kafka. Отправка событий в платформу логов на текущий момент недоступна.
1. Создать сервисного пользователя
Создайте сервисного пользователя с ролью Администратор проекта или Наблюдатель проекта. Создавать пользователей могут пользователи с ролью Владелец аккаунта или Администратор пользователей.
2. Выдать S3-ключ пользователю
Пользователи панели управления могут выдавать себе S3-ключи самостоятельно, но мы рекомендуем создавать сервисных пользователей и использовать ключи совместно с ними.
Выдавать S3-ключи другим пользователям может только Владелец аккаунта или Администратор пользователей. Сервисный пользователь не может получить S3-ключ самостоятельно, п отому что у него нет доступа в панель управления — ему должен выдать ключ Владелец аккаунта или Администратор пользователей.
Для каждого проекта необходимо создавать отдельный ключ. На один проект можно выпустить несколько ключей.
-
В панели управления в верхнем меню нажмите Аккаунт.
-
Перейдите в раздел с нужным типом пользователей:
- Пользователи — для пользователей панели управления;
- Сервисные пользователи — для сервисных пользователей.
-
Откройте страницу пользователя → вкладка Доступ .
-
В блоке S3-ключи нажмите Добавить ключ.
-
Введите имя ключа.
-
Выберите проект, для которого будет работать ключ.
-
Нажмите Сгенерировать. Будет сгенерировано два значения:
- Access key — Access Key ID, идентификатор ключа;
- Secret key — Secret Access Key, секретный ключ.
-
Нажмите Скопировать и сохраните ключ — после закрытия окна его нельзя будет просмотреть.
3. Настроить получение событий
-
Скопируйте файл конфигурации
config/fluent-bit.yaml
. В файле укажите:region
— пул, напримерru-1
;endpoint
— адрес платформы логов в выбранном пуле, напримерhttps://ru-1.logs.selcloud.ru
;log_group_name
— имя группы логов, напримерs/lbaas/Chromie-lb
;log_stream_name
— имя потока событий (stream), напримерhttp-21380357
;sqlite_path
— адрес базы данных SQLite, которая хранит информацию о последних полученных событиях. Одну БД можно использовать для нескольких групп и потоков.
Фильтр Lua используется для разделения списка событий из метода GetLogEvents Amazon CloudWatch API на отдельные записи. Благодаря этому каждое событие будет преобразовано в отдельную независимую запись (record) Fluent Bit, что позволит обрабатывать их по отдельности, тегировать и отправлять в разные output-плагины. В конфигурационном файле используется output-плагин stdout, но вы можете использовать любой, например Elasticsearch или Kafka.
-
Опционально: чтобы в рамках одного конфигурационного файла настроить сбор данных из нескольких групп и потоков, в блоке
pipeline
добавьте соответствующие блокиinputs
. -
Запу стите Fluent Bit:
docker run \
--name fluent-bit-cloudwatch \
--rm \
-v ${PWD}/config/fluent-bit.yaml:/fluent-bit/etc/fluent-bit.yaml:ro \
-v ${PWD}/sqlite:/var/lib/fluent-bit/cloudwatch/sqlite:rw \
-e AWS_ACCESS_KEY_ID=<access_key> \
-e AWS_SECRET_ACCESS_KEY=<secret_key> \
ghcr.io/selectel/fluent-bit-cloudwatch-input-plugin:latestУкажите:
<access_key>
— значение поля Access key из S3-ключа;<secret_key>
— значение поля Secret key из S3-ключа.
Добавить
<access_key>
и<secret_key>
в контейнер можно любым способом:- через переменные среды окружения, подробнее в инструкции Using environment variables to globally configure AWS SDKs and tools документации Amazon;
- или через файлы
config
иcredentials
, подробнее в инструкции Using shared config and credentials files to globally configure AWS SDKs and tools документации Amazon.
Пример вывода в stdout в формате MessagePack:
...
[1029] cloudwatch-input.0: [[1751577177.000000000, {}], {"ingestion_time"=>1750606362344, "message"=>"{"level":"System", "msg":"InnoDB initialization has started."}", "timestamp"=>1750606335369}]
[1031] cloudwatch-input.0: [[1751577177.000000000, {}], {"ingestion_time"=>1750608768923, "message"=>"{"level":"System", "msg":"InnoDB initialization has ended."}", "timestamp"=>1750608747624}]
...