Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
software:monitoring:fluent-bit [2025/11/25 22:48] – удалено - внешнее изменение (Дата неизвестна) 127.0.0.1software:monitoring:fluent-bit [2025/12/06 21:00] (текущий) mirocow
Строка 1: Строка 1:
 +====== Fluent-Bit ======
  
 +{{ :software:monitoring:1696269380-fluent_bit_data_pipeline-2048x1247.webp?800 |}}
 +
 +FluentBit собирает, парсит и фильтрует сообщения из контейнеров, сохраняя их в хранилище Loki. Конфигурационные файлы fluent-bit.conf и parsers.conf расположены в папке /var/log/flb-storage/.
 +
 +===== Встроенные парсеры =====
 +
 +  * docker — поддерживает объединение больших записей логов, разделённых движком контейнера Docker.
 +  * cri — обрабатывает запись лога, генерированную движком контейнера CRI-O, поддерживает объединение записей логов.
 +  * go — обрабатывает записи логов, генерируемые приложением на языке Go, и выполняет объединение, если обнаружены мультистроковые сообщения.
 +  * python — обрабатывает записи логов, генерируемые приложением на языке Python, и выполняет объединение, если обнаружены мультистроковые сообщения.
 +
 +===== Service =====
 +
 +  * Flush 5 — интервал (в секундах), через который Fluent Bit будет отправлять собранные данные (логи) в Loki;
 +  * Daemon Off — указывает, что Fluent Bit не будет работать в фоновом режиме (демоне);
 +  * Parsers_File parsers.conf — задает файл, в котором находятся определения парсеров (форматов логов).
 +
 +===== Input =====
 +
 +  * Name forward — тип входного плагина, используемого Fluent Bit для приема данных. В данном случае используется плагин forward, который позволяет принимать данные через сеть (протокол Fluentd Forward);
 +  * Listen 0.0.0.0 — указывает на то, что Fluent Bit будет слушать на всех доступных сетевых интерфейсах;
 +  * Port 24224 — порт, на котором Fluent Bit принимает входящие данные.
 +
 +<code ini>
 +[INPUT]
 +    Name                tail
 +    Tag                 tenant.*
 +    Path                /var/log/containers/*_tenant2_webapp-*.log
 +    Docker_Mode         On
 +    Docker_Mode_Flush   5
 +    Docker_Mode_Parser  container_firstline
 +    Parser              docker
 +    DB                  /var/log/flb-storage/flb_container.db
 +    Mem_Buf_Limit       50MB
 +    Skip_Long_Lines     On
 +    Refresh_Interval    10
 +    Rotate_Wait         30
 +    storage.type        filesystem
 +    Read_from_Head      ${READ_FROM_HEAD}
 +  
 + [INPUT]
 +     Name               tail
 +     Tag                kube.*
 +     Path               /var/log/containers/*.log
 +     Parser             docker
 +     DB                 /var/log/flb_graylog.db
 +     DB.Sync            Normal
 +     Docker_Mode        On
 +     Buffer_Chunk_Size  512KB
 +     Buffer_Max_Size    5M
 +     Rotate_Wait        30
 +     Mem_Buf_Limit      30MB
 +     Skip_Long_Lines    On
 +     Refresh_Interval   10
 +   
 +[FILTER]
 +     Name kubernetes
 +     Match kube.*
 +     Merge_Log On
 +     Merge_Log_Key log
 +     Keep_Log Off
 +     K8S-Logging.Parser On
 +     K8S-Logging.Exclude Off
 +     Annotations Off
 +     Labels On
 +</code>
 +
 +<code ini>
 +[INPUT[]
 +    Name              tail
 +    Tag               kube.*
 +    Path              /var/log/containers/*.log
 +    DB                /var/log/flb_kubernetes.db
 +    Parser            docker
 +    Docker_Mode       On
 +    Mem_Buf_Limit     64MB
 +    Skip_Long_Lines   On
 +    Refresh_Interval  10
 +  
 +[INPUT]
 +    Name                tail
 +    Tag                 application.*
 +    Exclude_Path        /var/log/containers/cloudwatch-agent*, /var/log/containers/fluent-bit*, /var/log/containers/aws-node*, /var/log/containers/kube-proxy*
 +    Path                /var/log/containers/*.log
 +    Docker_Mode         On
 +    Docker_Mode_Flush   5
 +    Docker_Mode_Parser  container_firstline
 +    Parser              docker
 +    DB                  /var/fluent-bit/state/flb_container.db
 +    Mem_Buf_Limit       50MB
 +    Skip_Long_Lines     On
 +    Refresh_Interval    10
 +    Rotate_Wait         30
 +    storage.type        filesystem
 +  
 +[INPUT]
 +    Name                tail
 +    Tag                 user-api.*
 +    Path                /var/log/containers/user-api*.log
 +    Docker_Mode         On
 +    Docker_Mode_Flush   5
 +    Docker_Mode_Parser  container_firstline_user
 +    Parser              docker
 +    DB                  /var/fluent-bit/state/flb_user_api.db
 +    Mem_Buf_Limit       50MB
 +    Skip_Long_Lines     On
 +    Refresh_Interval    10
 +    Rotate_Wait         30
 +    storage.type        filesystem
 +    Read_from_Head      ${READ_FROM_HEAD}
 +  
 +[INPUT]
 +  Name                tail
 +  Tag                 application.*
 +  Exclude_Path        /var/log/containers/cloudwatch-agent*, /var/log/containers/fluent-bit*, /var/log/containers/aws-node*, /var/log/containers/kube-proxy*
 +  Path                /var/log/containers/*.log
 +  Docker_Mode         On
 +  Docker_Mode_Flush   5
 +  Docker_Mode_Parser  container_firstline
 +  Parser              docker
 +  DB                  /var/fluent-bit/state/flb_container.db
 +  Mem_Buf_Limit       50MB
 +  Skip_Long_Lines     On
 +  Refresh_Interval    10
 +  Rotate_Wait         30
 +  Read_from_Head      Off
 +
 +[INPUT]
 +  Name                tail
 +  Tag                 application.*
 +  Path                /var/log/containers/fluent-bit*
 +  Parser              docker
 +  DB                  /var/fluent-bit/state/flb_log.db
 +  Mem_Buf_Limit       5MB
 +  Skip_Long_Lines     On
 +  Refresh_Interval    10
 +  Read_from_Head      Off
 +
 +[INPUT]
 +  Name                tail
 +  Tag                 application.*
 +  Path                /var/log/containers/cloudwatch-agent*
 +  Multiline.parser    docker,cri
 +  # Docker_Mode         On
 +  # Docker_Mode_Flush   5
 +  # Docker_Mode_Parser  cwagent_firstline
 +  #Parser              docker
 +  DB                  /var/fluent-bit/state/flb_cwagent.db
 +  rotate_wait         15
 +  Mem_Buf_Limit       5MB
 +  Skip_Long_Lines     On
 +  Refresh_Interval    10
 +  #Read_from_Head      true  
 +  
 +[INPUT]
 +    Name             tail
 +    Path             /var/log/containers/abc-*.log, /var/log/containers/def-*.log, /var/log/containers/ghi-*.log, /var/log/containers/jkl-*.log, /var/log/containers/mno-*.log
 +    Exclude_Path     /var/log/containers/aggregator-fluent-bit-*_logging_fluent-bit-*.log, /var/log/containers/aws-node*.log, /var/log/containers/collector-fluent-bit-*_logging_fluent-bit-*.log, /var/log/containers/kube-proxy*.log
 +    DB               /var/fluent-bit/state/flb_container.db
 +    multiline.parser docker, cri
 +    Tag              kube.*
 +    threaded         on
 +    Mem_Buf_Limit    32MB
 +    Skip_Long_Lines  On
 +    Skip_Empty_Lines On
 +    Refresh_Interval 10
 +    Rotate_Wait      30
 +  
 +    # Buffering & Storage (https://docs.fluentbit.io/manual/administration/buffering-and-storage#input-section-configuration)
 +    storage.type     filesystem
 +</code>
 +
 +<code ini>
 +[INPUT]
 +    Name tail
 +    Path /var/log/containers/*.log
 +    Docker_Mode On
 +    Docker_Mode_Parser python-multiline
 +</code>
 +
 +<code ini>
 +[INPUT]
 +    Name             tail
 +    Path             /var/log/containers/*.log
 +    Parser           docker
 +    Tag              kube.*
 +    Refresh_Interval 5
 +    Mem_Buf_Limit    5MB
 +    Skip_Long_Lines  On
 +    DB               /tail-db/tail-containers-state.db
 +    DB.Sync          Normal
 +    Ignore_Older 2d
 +    Multiline On
 +    Multiline_Flush 5
 +    Parser_Firstline first_line
 +</code>
 +
 +===== Filter =====
 +
 +  * Name parser — тип фильтра. Фильтр parser, который применяет парсеры для обработки данных;
 +  * Parser docker — задает парсер для Docker-логов;
 +  * Match _ — задает шаблон для сопоставления входящих данных с фильтром. Символ _ означает, что фильтр применяется ко всем входным данным;
 +  * Key_Name log — указывает, какое поле данных необходимо парсить. В данном случае поле с именем log;
 +  * Reserve_Data true — сохранение оригинальных данных после их обработки фильтром;
 +  * Preserve_Key false — после парсинга исходное поле (в данном случае log) будет удалено.
 +
 +<code ini>
 +    [MULTILINE_PARSER]
 +        name          multiline-docker-python
 +        type            regex
 +        flush_timeout 3000
 +        # fluent-bit is not looking at the log field to run the regex below 
 +        key_content log
 +
 +        # rules |   state name  | regex pattern                           | next state
 +        # ------|---------------|-------------------------------------------------------
 +        rule      "start_state"   "/(\d+-\d+-\d+ \d+:\d+:\d+,\d+):(.*)/"    "cont"
 +        rule      "cont"          "^((?!\d+-\d+-\d+ \d+:\d+:\d+,\d+).*)"    "cont"
 +</code>
 +
 +<code ini>
 +[PARSER]
 +    Name python-multiline
 +    Format regex
 +    Regex /(?<time>\d+-\d+-\d+ \d+:\d+:\d+,\d+):(?<message>.*)/
 +    Time_Key  time
 +    Time_Format %F %H:%M:%S,%L
 +    Input:
 +</code>
 +
 +<code ini>
 +[PARSER]
 +    Name        springboot
 +    Format      regex
 +    Regex       (?<time>\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}.\d{1,3}) (?<level>[^ ]*) (?<number>\d*) --- (?<thread>\[[^ ]*) (?<logger>[^ ]*) *: (?<message>[^ ].*)$
 +    Time_Key    time
 +    Time_Format %Y-%m-%d %H:%M:%S.%L
 +
 +[PARSER]
 +    Name         docker
 +    Format       json
 +    Time_Key     time
 +    Time_Format  %Y-%m-%dT%H:%M:%S.%L
 +    Time_Keep    On
 +    # Command      |  Decoder | Field | Optional Action
 +    # =============|==================|=================
 +    Decode_Field_As   escaped    log
 +</code>
 +
 +<code ini>
 +    [FILTER]
 +        Name                parser
 +        Match               kube.*
 +        Key_Name            log
 +        Parser              parser_json
 +        Parser              parser_logs
 +
 +    [PARSER]
 +        Name   parser_logs
 +        Format regex
 +        Regex  ^(?<time_stamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}): (?<environment>.*?): (?<hostname>.*?): (?<module>.*?)::(?<line>\d+) (?<log_level>[A-Z]+): (?<message>[a-zA-Z0-9 _.,:()'"!¡]*)$
 +        Time_Key time
 +        Time_Format %d/%b/%Y:%H:%M:%S %z
 +    [PARSER]
 +        Name   parser_json
 +        Format regex
 +        Regex  ^(?<time_stamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}): (?<environment>.*?): (?<hostname>.*?): (?<module>.*?)::(?<line>\d+) (?<log_level>[A-Z]+): (?<message>[^{]*)(?<message_additional>{.*)$
 +        Time_Key time
 +        Time_Format %d/%b/%Y:%H:%M:%S %z
 +        Decode_Field_As   escaped_utf8       message_additional    do_next
 +        Decode_Field_As   escaped            message_additional    do_next
 +        Decode_Field_As   json               message_additional
 +    [PARSER]
 +        Name        container_firstline
 +        Format      regex
 +        Regex       (?<log>(?<="log":")\S(?!\.).*?)(?<!\\)".*(?<stream>(?<="stream":").*?)".*(?<time>\d{4}-\d{1,2}-\d{1,2}T\d{2}:\d{2}:\d{2}\.\w*).*(?=})
 +        Time_Key    time
 +        Time_Format %Y-%m-%dT%H:%M:%S.%LZ
 +    [PARSER]
 +        Name        docker
 +        Format      json
 +        Time_Key    @timestamp
 +        Time_Format %Y-%m-%dT%H:%M:%S.%L
 +        Time_Keep   Off
 +</code>
 +
 +<code ini>
 +[MULTILINE_PARSER]
 +    name          multiline-regex
 +    type          regex
 +    flush_timeout 1000
 +
 +
 +    # rules |   state name  | regex pattern                    | next state
 +    # ------|---------------|----------------------------------|-----------
 +    rule      "start_state"   "/(Dec \d+ \d+\:\d+\:\d+)(.*)/"    "cont"
 +    rule      "cont"          "/^\s+at.*/"                       "cont"
 +</code>
 +
 +===== Output =====
 +
 +  * Name grafana-loki — плагин для отправки данных в систему Grafana Loki, которая занимается сбором и хранением логов;
 +  * Match * — отправляет все данные (все потоки логов);
 +  * Url ${LOKI_URL} — URL, куда отправляются данные, задан в файле docker-compose.yml. LOKI_URL=http://loki:3100/loki/api/v1/push;
 +  * RemoveKeys container_id — удаляет ключи container_id из отправляемых данных, чтобы не отправлять ненужные поля в Loki;
 +  * Labels {service_name="planr"} — добавляет статическую метку (label) service_name="planr" к каждому потоку логов. Эти метки используются в Loki для облегчения поиска и фильтрации логов;
 +  * LabelKeys level, source — указывает, какие ключи из логов использовать для динамических меток. В данном случае метки будут добавляться на основе полей level (уровень логов) и source (источник данных);
 +  * BatchWait 1s — Fluent Bit ждет 1 секунду перед отправкой данных в батче;
 +  * BatchSize 1001024 — максимальный размер батча для отправки данных — 1 МБ (1001024 байта);
 +  * LineFormat json — отправляет данные в формате JSON.
 +  * Name file - Плагин вывода file позволяет записывать данные, полученные через плагин ввода в файл;
 +  * Match * — отправляет все данные (все потоки логов);
 +  * Path - путь к каталогу для хранения файлов.
 +
 +<code ini>
 +[SERVICE]
 +  Flush                     1
 +  Daemon                    Off
 +  Log_Level                 info
 +  Parsers_File              parsers.conf
 +  Parsers_File              custom_parsers.conf
 +  HTTP_Server               On
 +  HTTP_Listen               0.0.0.0
 +  HTTP_Port                 2020
 +
 +[INPUT]
 +  Name                      tail
 +  Path                      /var/log/containers/*.log
 +  Parser                    docker
 +  Tag                       kube.*
 +  Mem_Buf_Limit             4MB
 +  Skip_Long_Lines           On
 +  Skip_Empty_Lines          On
 +
 +[FILTER]
 +  Name                      kubernetes
 +  Match                     kube.*
 +  Merge_Log                 On
 +  Keep_Log                  On
 +  K8S-Logging.Parser        On
 +  K8S-Logging.Exclude       On
 +
 +[OUTPUT]
 +  Name                      loki
 +  Match                     kube.*
 +  Host                      loki.logging.svc.cluster.local
 +  Port                      3100
 +  Labels                    job=fluent, namespace=$kubernetes['namespace_name'], pod=$kubernetes['pod_name'], container=$kubernetes['container_name']
 +  Auto_kubernetes_labels    off
 +  Line_format               json
 +</code>
 +
 +<code ini>
 +[SERVICE]
 +    Flush         2
 +    Log_Level     info
 +    Daemon        Off
 +    Parsers_File  parsers.conf
 +    Parsers_File  custom_parsers.conf
 +    HTTP_Server   On
 +    HTTP_Listen   0.0.0.0
 +    HTTP_Port     2020
 +
 +[INPUT]
 +    Name                tail
 +    Tag                 application.*
 +    Exclude_Path        /var/log/containers/cloudwatch-agent*, /var/log/containers/fluent-bit*, /var/log/containers/aws-node*, /var/log/containers/kube-proxy*
 +    Path                /var/log/containers/*.log
 +    Docker_Mode         On
 +    Docker_Mode_Flush   5
 +    Docker_Mode_Parser  container_firstline
 +    Parser              docker
 +    DB                  /var/fluent-bit/state/flb_container.db
 +    Mem_Buf_Limit       50MB
 +    Skip_Long_Lines     On
 +    Refresh_Interval    10
 +    Rotate_Wait         30
 +    Read_from_Head      Off
 +
 +[INPUT]
 +    Name                tail
 +    Tag                 application.*
 +    Path                /var/log/containers/fluent-bit*
 +    Parser              docker
 +    DB                  /var/fluent-bit/state/flb_log.db
 +    Mem_Buf_Limit       5MB
 +    Skip_Long_Lines     On
 +    Refresh_Interval    10
 +    Read_from_Head      Off
 +
 +[INPUT]
 +    Name                tail
 +    Tag                 application.*
 +    Path                /var/log/containers/cloudwatch-agent*
 +    #Parser              multiline
 +    Docker_Mode         On
 +    Docker_Mode_Flush   5
 +    Docker_Mode_Parser  cwagent_firstline
 +    Parser              docker
 +    DB                  /var/fluent-bit/state/flb_cwagent.db
 +    rotate_wait         15
 +    Mem_Buf_Limit       5MB
 +    Skip_Long_Lines     On
 +    Refresh_Interval    10
 +    #Read_from_Head      true   
 +
 +[FILTER]
 +    Name                kubernetes
 +    Match               application.*
 +    Kube_URL            https://kubernetes.default.svc:443
 +    Kube_CA_File        /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
 +    Kube_Token_File     /var/run/secrets/kubernetes.io/serviceaccount/token
 +    Kube_Tag_Prefix     application.var.log.containers.
 +    Merge_Log           On
 +    Merge_Log_Key       pod_name
 +    K8S-Logging.Parser  On
 +    K8S-Logging.Exclude Off
 +    Labels              Off
 +    Annotations         Off
 +
 +[FILTER]
 +    Name                multiline
 +    Match               application.*
 +    multiline.key_content log
 +    multiline.parser      go, multiline-regex-test
 +
 +[OUTPUT]
 +    Name                cloudwatch_logs
 +    Match               application.*
 +    region              ${REGION}
 +    log_group_name      /aws/containerinsights/${CLUSTER_NAME}/application
 +    log_stream_prefix   ${APP_POD_NAMESPACE}-
 +    auto_create_group   true
 +    extra_user_agent    container-insights
 +
 +[INPUT]
 +    Name                systemd
 +    Tag                 dataplane.systemd.*
 +    Systemd_Filter      _SYSTEMD_UNIT=docker.service
 +    Systemd_Filter      _SYSTEMD_UNIT=kubelet.service
 +    DB                  /var/fluent-bit/state/systemd.db
 +    Path                /var/log/journal
 +    Read_From_Tail      Off
 +
 +[INPUT]
 +    Name                tail
 +    Tag                 dataplane.tail.*
 +    Path                /var/log/containers/aws-node*, /var/log/containers/kube-proxy*
 +    Docker_Mode         On
 +    Docker_Mode_Flush   5
 +    Docker_Mode_Parser  container_firstline
 +    Parser              docker
 +    DB                  /var/fluent-bit/state/flb_dataplane_tail.db
 +    Mem_Buf_Limit       50MB
 +    Skip_Long_Lines     On
 +    Refresh_Interval    10
 +    Rotate_Wait         30
 +    Read_from_Head      Off
 +
 +[FILTER]
 +    Name                modify
 +    Match               dataplane.systemd.*
 +    Rename              _HOSTNAME                   hostname
 +    Rename              _SYSTEMD_UNIT               systemd_unit
 +    Rename              MESSAGE                     message
 +    Remove_regex        ^((?!hostname|systemd_unit|message).)*$
 +
 +[FILTER]
 +    Name                aws
 +    Match               dataplane.*
 +    imds_version        v1
 +
 +[OUTPUT]
 +    Name                cloudwatch_logs
 +    Match               dataplane.*
 +    region              ${REGION}
 +    log_group_name      /aws/containerinsights/${CLUSTER_NAME}/dataplane
 +    log_stream_prefix   ${APP_POD_NAMESPACE}-${APP_POD_NAME}-
 +    auto_create_group   true
 +    extra_user_agent    container-insights
 +
 +[INPUT]
 +    Name                tail
 +    Tag                 host.dmesg
 +    Path                /var/log/dmesg
 +    Parser              syslog
 +    DB                  /var/fluent-bit/state/flb_dmesg.db
 +    Mem_Buf_Limit       5MB
 +    Skip_Long_Lines     On
 +    Refresh_Interval    10
 +    Read_from_Head      Off
 +
 +[INPUT]
 +    Name                tail
 +    Tag                 host.messages
 +    Path                /var/log/messages
 +    Parser              syslog
 +    DB                  /var/fluent-bit/state/flb_messages.db
 +    Mem_Buf_Limit       5MB
 +    Skip_Long_Lines     On
 +    Refresh_Interval    10
 +    Read_from_Head      Off
 +
 +[INPUT]
 +    Name                tail
 +    Tag                 host.secure
 +    Path                /var/log/secure
 +    Parser              syslog
 +    DB                  /var/fluent-bit/state/flb_secure.db
 +    Mem_Buf_Limit       5MB
 +    Skip_Long_Lines     On
 +    Refresh_Interval    10
 +    Read_from_Head      Off
 +
 +[FILTER]
 +    Name                aws
 +    Match               host.*
 +    imds_version        v1
 +
 +[OUTPUT]
 +    Name                cloudwatch_logs
 +    Match               host.*
 +    region              ${REGION}
 +    log_group_name      /aws/containerinsights/${CLUSTER_NAME}/host
 +    log_stream_prefix   ${APP_NODE_NAME}.
 +    auto_create_group   true
 +    extra_user_agent    container-insights
 +</code>
 +
 +===== Примеры =====
 +
 +  * [[software:fluent-bit-loki-grafana:fluent-bit:docker-swarm-2]] - Установлено
 +  * [[software:fluent-bit-loki-grafana:fluent-bit:docker-swarm-syslog-ng]]
 +  * [[software:monitoring:fluent-bit:gitlab]]
 +  * [[software:monitoring:fluent-bit:docker-swarm]]
 +  * [[software:monitoring:fluent-bit:multiline]]
 +  * [[software:fluent-bit-loki-grafana:fluent-bit:docker-swarm-1]]