Конфигурация модуля 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
  1. Создайте конфигурационные файлы службы 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 — файл, в котором указываются конечные точки, куда должны быть отправлены обработанные данные после прохождения через фильтры.

  1. /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 — формат времени, используемый для разбора временных меток.

  1. /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 — парсер, который используется для обработки данных из указанного файла журнала.

  1. /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 — фильтр, который используется для вложения полей журнальных записей в другие поля.

  1. /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 — формат временной метки сообщения.