Перейти к основному содержимому

Настроить Fluent Bit

Последнее изменение:

Fluent Bit — приложение, позволяющее настроить процесс сбора, обработки и выгрузки логов. Fluent Bit расширяется с помощью output- и input-плагинов. Перечень плагинов можно посмотреть на сайте Fluent Bit (Outputs, Inputs).

С помощью встроенного плагина fluent-bit-cloudwatch-input-plugin вы можете настроить выгрузку событий из платформы логов в свою инфраструктуру, например в Elasticsearch, Loki или Kafka. Отправка событий в платформу логов на текущий момент недоступна.

  1. Создайте сервисного пользователя.
  2. Выдайте пользователю S3-ключ.
  3. Настройте получение событий.

1. Создать сервисного пользователя

Создайте сервисного пользователя с ролью Администратор проекта или Наблюдатель проекта. Создавать пользователей могут пользователи с ролью Владелец аккаунта или Администратор пользователей.

2. Выдать S3-ключ пользователю

Пользователи панели управления могут выдавать себе S3-ключи самостоятельно, но мы рекомендуем создавать сервисных пользователей и использовать ключи совместно с ними.

Выдавать S3-ключи другим пользователям может только Владелец аккаунта или Администратор пользователей. Сервисный пользователь не может получить S3-ключ самостоятельно, потому что у него нет доступа в панель управления — ему должен выдать ключ Владелец аккаунта или Администратор пользователей.

Для каждого проекта необходимо создавать отдельный ключ. На один проект можно выпустить несколько ключей.

  1. В панели управления в верхнем меню нажмите Аккаунт.

  2. Перейдите в раздел с нужным типом пользователей:

    • Пользователи — для пользователей панели управления;
    • Сервисные пользователи — для сервисных пользователей.
  3. Откройте страницу пользователя → вкладка Доступ .

  4. В блоке S3-ключи нажмите Добавить ключ.

  5. Введите имя ключа.

  6. Выберите проект, для которого будет работать ключ.

  7. Нажмите Сгенерировать. Будет сгенерировано два значения:

    • Access key — Access Key ID, идентификатор ключа;
    • Secret key — Secret Access Key, секретный ключ.
  8. Нажмите Скопировать и сохраните ключ — после закрытия окна его нельзя будет просмотреть.

3. Настроить получение событий

  1. Скопируйте файл конфигурации 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.

  2. Опционально: чтобы в рамках одного конфигурационного файла настроить сбор данных из нескольких групп и потоков, в блоке pipeline добавьте соответствующие блоки inputs.

  3. Запустите 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> в контейнер можно любым способом:

    Пример вывода в 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}]
    ...