---
title: 'Fluent Bit'
sidebar_label: 'Fluent Bit'
description: 'Возможности Fluent Bit, как настроить Fluent Bit для получения событий в свою инфраструктуру и добавления событий'
sidebar_position: 3
---

import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
import {TabItemLabel} from '@selectel/docux/components'
import Formbricks from '@theme/MDXComponents/Formbricks'
import IssueS3Key from '@site/docs/_partials/common/issue-s3-key.mdx'

# Fluent Bit

[Fluent Bit](https://docs.fluentbit.io/manual) — агент, который позволяет настроить процесс сбора, обработки и выгрузки логов, а также импортировать логи из сторонних хранилищ.
Fluent Bit расширяется с помощью output- и input-плагинов.
Перечень плагинов можно посмотреть на сайте Fluent Bit ([Outputs](https://docs.fluentbit.io/manual/pipeline/outputs), [Inputs](https://docs.fluentbit.io/manual/pipeline/inputs)).

С помощью Fluent Bit вы можете работать с логами в сервисе Логи: получать логи или добавлять логи из собственного хранилища.

Перед началом работы [настройте Fluent Bit](#configure-fluent-bit).

## Настроить Fluent Bit \{#configure-fluent-bit}

1. [Добавьте сервисного пользователя](#add-service-user).
2. [Выдайте пользователю S3-ключ](#issue-s3-key).
3. [Настройте агент](#configure-agent) для получения или добавления событий.

### 1. Добавить сервисного пользователя \{#add-service-user}

[Добавьте сервисного пользователя](/access-control/manage/add-user.mdx#add-service-user) с разрешением в области доступа **Проекты** и ролью:

* [`member`](/access-control/role-reference.mdx#member) или [`logs.admin`](/logs/manage-access.mdx#logs-admin) для доступа на чтение и запись логов;
* [`logs.write`](/logs/manage-access.mdx#logs-writer) для доступа на запись логов;
* [`reader`](/access-control/role-reference.mdx#reader) или [`logs.viewer`](/logs/manage-access.mdx#logs-viewer) только для чтения логов.

Добавлять пользователей может [Владелец аккаунта](/access-control/user-types.mdx#account-owner) или пользователи с ролью [`iam.admin`](/access-control/role-reference.mdx#iam-admin).

### 2. Выдать S3-ключ пользователю \{#issue-s3-key}

<IssueS3Key />

### 3. Настроить агент \{#configure-agent}

<Tabs queryString="configure-agent">
  <TabItem value="get-logs">
    <TabItemLabel>
      Получение логов
    </TabItemLabel>

    С помощью встроенного плагина [fluent-bit-cloudwatch-input-plugin](https://github.com/selectel/fluent-bit-cloudwatch-input-plugin) вы можете настроить выгрузку событий из сервиса Логи в свою инфраструктуру, например в [Elasticsearch](https://docs.fluentbit.io/manual/pipeline/outputs/elasticsearch), [Loki](https://docs.fluentbit.io/manual/pipeline/outputs/loki) или [Kafka](https://docs.fluentbit.io/manual/pipeline/outputs/kafka).

    1. Скачайте файл конфигурации [`config/fluent-bit.yaml`](https://github.com/selectel/fluent-bit-cloudwatch-input-plugin/blob/master/config/fluent-bit.yaml).

    2. Откройте файл конфигурации `config/fluent-bit.yaml` в текстовом редакторе.

    3. В параметрах файла конфигурации укажите:

       * `region` — [пул](/infrastructure/locations.mdx#pool), например `ru-9`;
       * `endpoint` — URL для обращения к API логов. Список URL можно посмотреть в инструкции [Список URL](/api/urls/);
       * `log_group_name` — имя группы логов, например `s/lbaas/Chromie-lb`;
       * `log_stream_name` — имя стрима событий (stream), например `http-21380357`;
       * `sqlite_path` — адрес базы данных SQLite, которая хранит информацию о последних полученных событиях.
         Одну базу данных можно использовать для нескольких групп и стримов.

       Список событий из метода [GetLogEvents](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_GetLogEvents.html) Amazon CloudWatch API разделяется на отдельные записи с помощью фильтра Lua.
       Каждое полученное событие преобразовывается в отдельную независимую запись (record) Fluent Bit. Это позволяет обрабатывать события по отдельности, тегировать и отправлять в разные output-плагины.
       В конфигурационном файле используется output-плагин [stdout](https://docs.fluentbit.io/manual/pipeline/outputs/standard-output), но вы можете использовать любой, например [Elasticsearch](https://docs.fluentbit.io/manual/pipeline/outputs/elasticsearch) или [Kafka](https://docs.fluentbit.io/manual/pipeline/outputs/kafka).

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

    5. Запустите Fluent Bit:

       ```bash
       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-ключа, который вы [выдали пользователю](#issue-s3-key);
       * `<secret_key>` — значение поля **Secret key** из S3-ключа, который вы [выдали пользователю](#issue-s3-key).

       Добавить `<access_key>` и `<secret_key>` в контейнер можно любым способом:

       * через переменные среды окружения. Подробнее в инструкции [Using environment variables to globally configure AWS SDKs and tools](https://docs.aws.amazon.com/sdkref/latest/guide/environment-variables.html) документации Amazon;
       * или через файлы `config` и `credentials`. Подробнее в инструкции [Using shared config and credentials files to globally configure AWS SDKs and tools](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html) документации Amazon.

       Пример вывода в stdout в формате MessagePack:

       ```bash
       ...
       [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}]
       ...
       ```
  </TabItem>

  <TabItem value="add-logs">
    <TabItemLabel>
      Добавление логов
    </TabItemLabel>

    1. Установите агент Fluent Bit. Используйте инструкцию [Download and install Fluent Bit](https://docs.fluentbit.io/manual/installation/downloads) официальной документации Fluent Bit.

    2. Откройте файл конфигурации `config/fluent-bit.yaml` в текстовом редакторе.

    3. Добавьте в файл `fluent-bit.yaml` конфигурацию для добавления логов. Пример конфигурации:

       ```yaml
       service:
         log_level: debug

       pipeline:
         inputs:
           - name: tail
             path: /tmp/fluentbit.log

         outputs:
           - name: stdout
             match: '*'

           - name: cloudwatch_logs
             match: '*'
             region: <pool>
             endpoint: <log_endpoint>
             log_group_name: <log_group_name>
             log_stream_name: <log_stream_names>
             auto_create_group: true
       ```

       Укажите:

       * `<pool>` — [пул](/infrastructure/locations.mdx#pool), например `ru-9`;
       * `<log_endpoint>` — URL для обращения к API сервиса Логи. Список URL можно посмотреть в инструкции [Список URL](/api/urls/);
       * `<log_group_name>` — имя группы логов, в которую нужно добавить события, например `user-log-group`;
       * `<log_stream_name>` — название стрима, в который нужно добавить события, например `user-log-stream`;

    4. Добавьте значения полей **Access Key** и **Secret Key** из [S3-ключа](#issue-s3-key) одним из способов:

       * через переменные окружения. Подробнее в инструкции [Using environment variables to globally configure AWS SDKs and tools](https://docs.aws.amazon.com/sdkref/latest/guide/environment-variables.html) документации Amazon;
       * или файлы `config` и `credentials`. Подробнее в инструкции [Using environment variables to globally configure AWS SDKs and tools](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html) документации Amazon

    5. Запустите Fluent Bit:

       ```bash
       sudo /opt/fluent-bit/bin/fluent-bit -c /etc/fluent-bit/fluent-bit.conf -vv
       ```
  </TabItem>
</Tabs>

<Formbricks />
