Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
software:fluent-bit-loki-grafana:fluent-bit:docker-swarm-2 [2025/12/01 04:05] – [parsers_multiline.conf] mirocowsoftware:fluent-bit-loki-grafana:fluent-bit:docker-swarm-2 [2025/12/06 03:35] (текущий) mirocow
Строка 1: Строка 1:
-====== Обработка многострочных логов ======+====== Обработка логов Docker ======
  
 === fluent-bit.conf === === fluent-bit.conf ===
Строка 22: Строка 22:
     Path              /var/lib/docker/containers/*/*.log     Path              /var/lib/docker/containers/*/*.log
     Parser            docker     Parser            docker
-    Multiline         On 
-    multiline.parser  docker_multiline 
     Refresh_Interval  10     Refresh_Interval  10
-    Tag               docker.*+    Ignore_Older      1h 
 +    Docker_Mode       On 
 +    Tag               docker.<file_name>
     Tag_Regex         (?<file_name>[a-f0-9]*)-json.log     Tag_Regex         (?<file_name>[a-f0-9]*)-json.log
     Mem_Buf_Limit     50MB     Mem_Buf_Limit     50MB
Строка 32: Строка 32:
     DB.sync           normal     DB.sync           normal
     Storage.Type      filesystem     Storage.Type      filesystem
-    Read_from_Head    true+    Read_from_Head    false
  
-Метаданные Docker Swarm+Только для отладки 
 +# [INPUT] 
 +#     Name              tail 
 +#     Path              /var/lib/docker/containers/*/*.log 
 +#     Parser            docker 
 +#     Refresh_Interval  10 
 +#     Docker_Mode       On 
 +#     Tag               docker.<file_name> 
 +#     Tag_Regex         (?<file_name>[a-f0-9]*)-json.log 
 +#     Mem_Buf_Limit     50MB 
 +#     Skip_Long_Lines   On 
 +#     DB                /var/log/flb-storage/flb_db.db 
 +#     DB.sync           normal 
 +#     Storage.Type      filesystem 
 +#     Read_from_Head    true 
 + 
 +# Фильтруем пустые логи
 [FILTER] [FILTER]
-    name                lua+    name                grep
     match               docker.*     match               docker.*
-    script              /fluent-bit/bin/docker-metadata.lua +    Exclude             log ^$ 
-    call                enrich_with_docker_metadata+    Exclude             log ^\s*$ 
 +    Exclude             log ^==>.+<==$
  
-Основной JSON парсинг+Извлекаем сырой лог
 [FILTER] [FILTER]
-    name                parser+    name                modify
     match               docker.*     match               docker.*
-    key_name            log +    copy                log raw_log 
-    parser              json_auto +    copy                exception.backtrace exception_backtrace 
-    reserve_data        true +    copy                exception.class exception_class 
-    preserve_key        true+    copy                exception.message exception_message
  
 +# Очищаем docker.* - оставляем ТОЛЬКО нужные поля
 [FILTER] [FILTER]
-    name                modify+    name                record_modifier
     match               docker.*     match               docker.*
-    Rename              log message 
-    Copy                message raw_message 
  
-Дополнительная многострочная обработка+    whitelist_key       date 
 +    whitelist_key       log 
 +    whitelist_key       raw_log 
 +    whitelist_key       exception_backtrace 
 +    whitelist_key       exception_class 
 +    whitelist_key       exception_message 
 + 
 +    whitelist_key       method 
 +    whitelist_key       path 
 +    whitelist_key       action 
 +    whitelist_key       status 
 +    whitelist_key       remote_ip 
 +    whitelist_key       controller 
 +    whitelist_key       line_id 
 + 
 +# 
 +# FILTERS 
 +
 [FILTER] [FILTER]
-    name                multiline+    name                parser
     match               docker.*     match               docker.*
-    multiline.key_content message +    key_name            raw_log 
-    multiline.parser    stacktrace_multiline, java_exception_multiline, ruby_exception_multiline, python_exception_multiline+    parser              nginx_access 
 +    reserve_data        true
  
-# Копируем метаданные Docker Swarm 
 [FILTER] [FILTER]
-    name                modify+    name                parser
     match               docker.*     match               docker.*
-     +    key_name            raw_log 
-    # Базовые метаданные Docker +    parser              gitlab_json 
-    copy                hostname hostname +    reserve_data        true
-    copy                container_started started +
-    copy                container_name container_name +
-    copy                container_id container_id +
-    copy                state state +
-    copy                stream stream +
-     +
-    # Docker Swarm метки +
-    copy                label_com_docker_swarm_service_name service_name +
-    copy                label_com_docker_swarm_task_name task_name +
-    copy                label_com_docker_swarm_task_id task_id +
-    copy                label_com_docker_swarm_node_id node_id +
-    copy                label_com_docker_stack_namespace stack_name +
-     +
-    # Кастомные лейблы логирования +
-    copy                label_logging_enabled logging_enabled +
-    copy                label_logging_jobname logging_jobname +
-     +
-    # Дополнительные поля +
-    copy                image_name image_name +
-    copy                image_id image_id+
  
-# Устанавливаем значения по умолчанию для переменных окружения 
 [FILTER] [FILTER]
-    name                modify+    name                parser
     match               docker.*     match               docker.*
-    Set                 service_name unknown-service +    key_name            raw_log 
-    Set                 logging_jobname unknown-job +    parser              gitlab_registry 
-    Set                 node_name ${HOSTNAME} +    reserve_data        true
-    Set                 environment production+
  
-# Специфичные парсеры для разных сервисов 
 [FILTER] [FILTER]
     name                parser     name                parser
     match               docker.*     match               docker.*
-    key_name            raw_message +    key_name            raw_log 
-    parser              gitlab_json+    parser              sidekiq_json
     reserve_data        true     reserve_data        true
  
Строка 111: Строка 122:
     name                parser     name                parser
     match               docker.*     match               docker.*
-    key_name            raw_message +    key_name            raw_log 
-    parser              gitlab_combined+    parser              mysql_error
     reserve_data        true     reserve_data        true
  
Строка 118: Строка 129:
     name                parser     name                parser
     match               docker.*     match               docker.*
-    key_name            raw_message +    key_name            raw_log 
-    parser              nextcloud_cron+    parser              mysql_slow
     reserve_data        true     reserve_data        true
  
Строка 125: Строка 136:
     name                parser     name                parser
     match               docker.*     match               docker.*
-    key_name            raw_message +    key_name            raw_log 
-    parser              nextcloud_stacktrace+    parser              postgresql
     reserve_data        true     reserve_data        true
  
Строка 132: Строка 143:
     name                parser     name                parser
     match               docker.*     match               docker.*
-    key_name            raw_message +    key_name            raw_log 
-    parser              nginx_access+    parser              postgresql_detailed
     reserve_data        true     reserve_data        true
  
Строка 139: Строка 150:
     name                parser     name                parser
     match               docker.*     match               docker.*
-    key_name            raw_message +    key_name            raw_log 
-    parser              gitlab_registry+    parser              nextcloud_access
     reserve_data        true     reserve_data        true
 +    Preserve_Key        true
  
 [FILTER] [FILTER]
     name                parser     name                parser
     match               docker.*     match               docker.*
-    key_name            raw_message +    key_name            raw_log 
-    parser              sidekiq+    parser              apache_access
     reserve_data        true     reserve_data        true
  
Строка 153: Строка 165:
     name                parser     name                parser
     match               docker.*     match               docker.*
-    key_name            raw_message +    key_name            raw_log 
-    parser              gitaly_json+    parser              php_fpm
     reserve_data        true     reserve_data        true
  
-# Структуризация распарсенных полей+[FILTER] 
 +    name                parser 
 +    match               docker.* 
 +    key_name            raw_log 
 +    parser              grafana_regex 
 +    reserve_data        true 
 + 
 +# Структуризация распарсенных полей В raw_log
 [FILTER] [FILTER]
     name                nest     name                nest
     match               docker.*     match               docker.*
-    operation           lift +    operation           nest 
-    nested_under        parsed_data +    wildcard            remote_* 
-    add_prefix          parsed_+    wildcard            method 
 +    wildcard            path 
 +    wildcard            status 
 +    wildcard            body_bytes 
 +    wildcard            user_agent 
 +    wildcard            referrer 
 +    wildcard            logger 
 +    wildcard            endpoint 
 +    wildcard            pluginId 
 +    wildcard            dsName 
 +    wildcard            dsUID 
 +    wildcard            uname 
 +    wildcard            level 
 +    wildcard            msg 
 +    wildcard            statusCode 
 +    wildcard            resourcePath 
 +    wildcard            exception 
 +    nest_under          parsed_data
  
 +#
 +# FILTERS
 +#
 +
 +# Метаданные Docker
 +[FILTER]
 +    name                lua
 +    match               docker.*
 +    script              /fluent-bit/bin/docker-metadata.lua
 +    call                enrich_with_docker_metadata
 +
 +# Копируем метаданные
 [FILTER] [FILTER]
     name                modify     name                modify
     match               docker.*     match               docker.*
-    Remove              parsed_data+    copy                docker.hostname hostname 
 +    copy                docker.container_started started 
 +    copy                docker.container_name container_name 
 +    copy                docker.container_name service_name 
 +    copy                docker.container_id container_id 
 +    copy                docker.state state 
 +    copy                docker.stream stream 
 +    copy                docker.line_id line_id 
 + 
 +    copy                log _raw 
 +    copy                parsed_data _parsed 
 +    # copy                exception_class _class 
 +    # copy                exception_message _message 
 +    # copy                exception_backtrace _backtrace 
 + 
 +    copy                docker.label_project project 
 +    copy                docker.label_service service 
 +    copy                docker.label_logging logging 
 +    copy                docker.label_logging_jobname logging_jobname
  
 +# Структурируем через nest
 [FILTER] [FILTER]
     name                nest     name                nest
     match               docker.*     match               docker.*
     operation           nest     operation           nest
-    wildcard            parsed_+    wildcard            _
-    nest_under          parsed+    nest_under          log 
 +    remove_prefix       _
  
-Копируем важные распарсенные поля+Добавляем host metadata
 [FILTER] [FILTER]
     name                modify     name                modify
     match               docker.*     match               docker.*
-    Copy               parsed_level level +    set                 node_id ${NODE_ID} 
-    Copy               parsed_message log_message +    set                 node_name ${NODE_NAME} 
-    Copy               parsed_method method +    set                 host_name ${NODE_NAME}
-    Copy               parsed_status status +
-    Copy               parsed_path path +
-    Copy               parsed_remote_addr remote_ip +
-    Copy               parsed_correlation_id correlation_id +
-    Copy               parsed_severity severity +
-    Copy               parsed_exception exception +
-    Copy               parsed_stacktrace stacktrace+
  
-# Перетагиваем логи с включенным логированием+# Перетагиваем только логи с enabled logging
 [FILTER] [FILTER]
     name                rewrite_tag     name                rewrite_tag
     match               docker.*     match               docker.*
-    Rule                logging_enabled ^enabled$ logs.${logging_jobname} true +    rule                $logging ^enabled$ data.$container_id true
-    Emitter_Name        re_emitted+
  
-# Очищаем данные для Loki 
 [FILTER] [FILTER]
     name                record_modifier     name                record_modifier
-    match               logs.* +    match               data.* 
-    Whitelist_key       message + 
-    Whitelist_key       raw_message +    whitelist_key       date 
-    Whitelist_key       container_name +    whitelist_key       log 
-    Whitelist_key       container_id +    whitelist_key       exception_class 
-    Whitelist_key       service_name +    whitelist_key       exception_message 
-    Whitelist_key       task_name +    whitelist_key       exception_backtrace 
-    Whitelist_key       stack_name + 
-    Whitelist_key       node_name +    whitelist_key       method 
-    Whitelist_key       environment +    whitelist_key       path 
-    Whitelist_key       logging_jobname +    whitelist_key       action 
-    Whitelist_key       parsed +    whitelist_key       status 
-    Whitelist_key       level +    whitelist_key       remote_ip 
-    Whitelist_key       log_message +    whitelist_key       controller 
-    Whitelist_key       method +    whitelist_key       line_id 
-    Whitelist_key       status + 
-    Whitelist_key       path +    whitelist_key       node_id 
-    Whitelist_key       remote_ip +    whitelist_key       node_name 
-    Whitelist_key       correlation_id +    whitelist_key       host_name 
-    Whitelist_key       severity +    whitelist_key       hostname 
-    Whitelist_key       exception +    whitelist_key       started 
-    Whitelist_key       stacktrace+    whitelist_key       container_name 
 +    whitelist_key       service_name 
 +    whitelist_key       container_id 
 +    whitelist_key       stream 
 +    whitelist_key       project 
 +    whitelist_key       service 
 +    whitelist_key       logging_jobname
  
-# Выход в Loki с нужными лейблами 
 [OUTPUT] [OUTPUT]
     name                loki     name                loki
-    match               logs.*+    match               data.*
     host                loki     host                loki
     port                3100     port                3100
-    labels              job=$logging_jobname, node_name=$node_name, container_name=$container_name, service_name=$service_name, stack_name=$stack_nameenvironment=$environment+    labels              job=$logging_jobname, node_name=$node_name, container_id=$container_id, container_name=$container_name, service_name=$service_name, project=$projectservice=$service, level=$stream 
 +    label_keys          $node_name,$container_id,$container_name,$service_name,$project,$service
     line_format         json     line_format         json
     auto_kubernetes_labels off     auto_kubernetes_labels off
-    drop_single_key     false 
  
-Резервный вывод для отладки +Только для отладки 
-#[OUTPUT] +# [OUTPUT] 
-   name                stdout +    name                stdout 
-   match               logs.* +    match               data.* 
-   format              json+    format              json
 </code> </code>
  
-=== parsers_multiline.conf ===+=== parsers.conf ===
  
 <code ini> <code ini>