Конфигурация модуля fluent-bit

После установки для корректной работы модуля fluent-bit выполните следующие настройки:

  1. Отредактируйте юнит-файл systemd /lib/systemd/system/fluent-bit.service для службы fluent-bit: в поле ExecStart, где указывается команда для запуска службы, замените .conf на .yaml:

    Пример файла:

    [Unit]
    Description=Fluent Bit
    Documentation=https://docs.fluentbit.io/manual/
    Requires=network.target
    After=network.target
    
    [Service]
    Type=simple
    EnvironmentFile=-/etc/sysconfig/fluent-bit
    EnvironmentFile=-/etc/default/fluent-bit
    ExecStart=/opt/fluent-bit/bin/fluent-bit -c //etc/fluent-bit/fluent-bit.yaml
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
  2. Создайте конфигурационные файлы службы fluent-bit:

    1. /etc/fluent-bit/fluent-bit.yaml — главный файл конфигурации службы fluent-bit, который определяет параметры и настройки для сбора и передачи данных.

      Пример файла:

      ---
      service:
          flush: 1
          daemon: Off
          log_level: info
          parsers_file: parsers-audit-osmax-core.conf
          plugins_file: plugins.conf
          http_server: Off
          http_listen: 0.0.0.0
          http_port: 2020
      
      includes:
          - pipeline-inputs.yaml
          - pipeline-filters.yaml
          - pipeline-outputs.yaml

      Где:

      • service — служебный раздел, определяющий настройки службы fluent-bit:

        • flush — интервал сброса;

        • daemon — режим демона;

        • log_level — уровень журналирования;

        • parsers_file — файл с парсером;

        • plugins_file — файл с плагинами;

        • http_server — настройки HTTP-сервера;

        • http_listen — адрес прослушивания;

        • http_port — порт.

      • includes — файлы конфигурации, включенные в основной файл конфигурации:

        • pipeline-inputs.yaml — файл, описывающий источники входных данных;

        • pipeline-filters.yaml — файл, содержащий фильтры, применяющиеся к входящим данным для их обработки и преобразования;

        • pipeline-outputs.yaml — файл, в котором указываются конечные точки, куда должны быть отправлены обработанные данные после прохождения через фильтры.

    2. /etc/fluent-bit/parsers-audit-osmax-core.conf — файл для настройки парсеров, которые выполняют разбор (парсинг) логов аудита.

      Пример файла:

      [PARSER]
          Name        audit-osmax-core
          Format      json
          Time_Key    timestamp
          Time_Format %Y-%m-%dT%H:%M:%S.%L%z

      Где:

      • [PARSER] — секция, в которой задаются настройки используемых парсеров:

        • Name — имя парсера, который используется для анализа соответствующих записей при обработке данных журнала;

        • Format — формат входных данных для парсера;

        • Time_Key — ключ во входных данных, который содержит информацию о времени;

        • Time_Format — формат времени, используемый для разбора временных меток.

    3. /etc/fluent-bit/pipeline-inputs.yaml — файл, описывающий источники входных данных.

      Пример файла:

      ---
      pipeline:
          inputs:
            - name: tail
              path: /app/inno-osmax/audit/osmax/core/audit-osmax-core.log
              db: /app/inno-osmax/audit/osmax/core/audit-osmax-core-fluent-bit.db
              parser: audit-osmax-core

      Где:

      • inputs — список источников данных, из которых Fluent Bit читает информацию;

        • name — тип входного источника данных;

        • path — путь к файлу журнала, из которого Fluent Bit считывает данные;

        • db — путь к базе данных, используемой Fluent Bit для хранения состояния чтения файла журнала;

        • parser — парсер, который используется для обработки данных из указанного файла журнала.

    4. /etc/fluent-bit/pipeline-filters.yaml — файл, содержащий фильтры, которые применяются к входящим данным для их обработки и преобразования.

      Пример файла
      ---
      pipeline:
          filters:
            - name: record_modifier
              match: '*'
              Allowlist_key:
                  - correlationId
                  - type
                  - code
                  - object.id
                  - object.name
                  - class
                  - message
                  - initiator.sub
                  - ipAddress
                  - context.sessionId
                  - context.url
                  - context.method
                  - context.traceId
                  - context.spanId
                  - additionalParams.action
                  - additionalParams.сomponentName
                  - additionalParams.collectionId
                  - additionalParams.collectionName
                  - additionalParams.configurationId
                  - additionalParams.configurationName
                  - additionalParams.configurationPackageName
                  - additionalParams.configurationVersionId
                  - additionalParams.configurationVersionName
                  - additionalParams.datasourceName
                  - additionalParams.roleName
                  - additionalParams.userName
                  - additionalParams.trigger
                  - additionalParams.installation
                  - additionalParams.minion
                  - additionalParams.store
                  - additionalParams.formula
                  - additionalParams.fileName
                  - additionalParams.turn
                  - additionalParams.object
                  - additionalParams.format
                  - additionalParams.relativeConfigurationId
                  - additionalParams.reportName
                  - additionalParams.user
                  - additionalParams.fqdn
                  - additionalParams.hostName
                  - additionalParams.mac
                  - additionalParams.salt_file_name
                  - additionalParams.salt_file_status
                  - additionalParams.import_result
                  - additionalParams.protocol
                  - additionalParams.softName
                  - scmCategory
      
            - name: modify
              match: '*'
              condition: Key_Does_Not_Exist object.name
              add: object.name ""
      
            - name: modify
              match: '*'
              condition: Key_Does_Not_Exist scmCategory
              add: scmCategory ""
      
            - name: modify
              match: '*'
              add: initiator.channel <customer-channel>
              add: deploymentContext.namespace <customer-namespace>
              add: deploymentContext.podName <customer-podName>
      
            - name: nest
              match: '*'
              operation: nest
              wildcard: object.*
              nest_under: object
              remove_prefix: object.
      
            - name: nest
              match: '*'
              operation: nest
              wildcard: initiator.*
              nest_under: initiator
              remove_prefix: initiator.
      
            - name: nest
              match: '*'
              operation: nest
              wildcard: context.*
              nest_under: context
              remove_prefix: context.
      
            - name: nest
              match: '*'
              operation: nest
              wildcard: deploymentContext.*
              nest_under: deploymentContext
              remove_prefix: deploymentContext.
      
            - name: nest
              match: '*'
              operation: nest
              wildcard: additionalParams.*
              nest_under: additionalParams
              remove_prefix: additionalParams.
      
            - name: modify
              match: '*'
              copy: message operation
              copy: message title
              add: infoSystemCode 2158
              add: infoSystemId SCMM
              add: version 1.0
              add: mandatory true
              add: ipNearbyNode <customer-ipNearbyNode>
              add: ipRecepient <customer-ipRecepient>
      
            - name: modify
              match: '*'
              condition: Key_Exists exception
              hard_copy: exception message

      Где:

      • record_modifier — фильтр, который используется для изменения или модификации записей журналов, например, для добавления, изменения или удаление полей в записях журналов;

      • modify — фильтр, который также используется для изменения или модификации записей журналов, например, для изменения значений полей, удаления или переименования полей и выполнения других подобных операций;

      • nest — фильтр, который используется для вложения полей журнальных записей в другие поля.

    5. /etc/fluent-bit/pipeline-outputs.yaml — файл, в котором указываются конечные точки, куда должны быть отправлены обработанные данные после прохождения через фильтры.

      Пример файла:

      ---
      pipeline:
          outputs:
            - name: kafka
              match: '*'
              brokers: 10.31.1.9:9092
              topics: audit
              message_key_field: correlationId
              timestamp_key: timestamp
              timestamp_format: iso8601

      Где:

      • outputs — список выходных потоков данных;

        • name — тип выходного потока данных;

        • match — параметр, который определяет, какие данные отправляются в указанный выходной поток;

        • brokers — переменная, содержащая адреса брокеров Kafka, к которым подключается Fluent Bit для отправки данных;

        • topics — переменная, определяющая имя темы Kafka, в которую отправляются данные;

        • message_key_field —  поле в сообщении, которое используется в качестве ключа (key) для Kafka-сообщения;

        • timestamp_key — поле в сообщении, которое используется для временной метки (timestamp) Kafka-сообщения;

        • timestamp_format — формат временной метки сообщения.