Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
software:fluent-bit-loki-grafana:fluent-bit:docker-swarm-syslog-ng [2025/12/06 21:01] mirocowsoftware:fluent-bit-loki-grafana:fluent-bit:docker-swarm-syslog-ng [2025/12/07 00:56] (текущий) mirocow
Строка 64: Строка 64:
 #     Read_from_Head    true #     Read_from_Head    true
  
-# ==================== DOCKER EVENTS INPUT ==================== +# ==================== DOCKER FILTERS ====================
-[INPUT] +
-    Name              docker_events +
-    Tag               docker.events +
-    Interval_Sec      1 +
-    Docker_Mode       On +
-    DB                /var/log/flb-storage/docker_events.db+
  
-# ==================== SYSTEM METRICS INPUT ==================== +Фильтруем пустые логи 
-[INPUT+[FILTER] 
-    Name              mem +    name                grep 
-    Tag               node.memory +    match               docker.* 
-    Interval_Sec      60+    Exclude             log ^$ 
 +    Exclude             log ^\s*$ 
 +    Exclude             log ^==>.+<==
 + 
 +# Извлекаем сырой лог 
 +[FILTER
 +    name                modify 
 +    match               docker.* 
 +    copy                log raw_log 
 +    copy                exception.backtrace exception_backtrace 
 +    copy                exception.class exception_class 
 +    copy                exception.message exception_message 
 + 
 +# Очищаем docker.* - оставляем ТОЛЬКО нужные поля 
 +[FILTER] 
 +    name                record_modifier 
 +    match               docker.*
  
-[INPUT] +    whitelist_key       date 
-    Name              cpu +    whitelist_key       log 
-    Tag               node.cpu +    whitelist_key       raw_log 
-    Interval_Sec      60 +    whitelist_key       exception_backtrace 
-    Interval_NSec     0+    whitelist_key       exception_class 
 +    whitelist_key       exception_message
  
-[INPUT+    whitelist_key       method 
-    Name              disk +    whitelist_key       path 
-    Tag               node.disk +    whitelist_key       action 
-    Interval_Sec      300 +    whitelist_key       status 
-    Dev_Name          /dev/sda1+    whitelist_key       remote_ip 
 +    whitelist_key       controller 
 +    whitelist_key       line_id 
 + 
 +[FILTER
 +    name                parser 
 +    match               docker.* 
 +    key_name            raw_log 
 +    parser              nginx_access 
 +    reserve_data        true 
 + 
 +[FILTER] 
 +    name                parser 
 +    match               docker.* 
 +    key_name            raw_log 
 +    parser              gitlab_json 
 +    reserve_data        true 
 + 
 +[FILTER] 
 +    name                parser 
 +    match               docker.* 
 +    key_name            raw_log 
 +    parser              gitlab_registry 
 +    reserve_data        true 
 + 
 +[FILTER] 
 +    name                parser 
 +    match               docker.* 
 +    key_name            raw_log 
 +    parser              sidekiq_json 
 +    reserve_data        true 
 + 
 +[FILTER] 
 +    name                parser 
 +    match               docker.* 
 +    key_name            raw_log 
 +    parser              mysql_error 
 +    reserve_data        true 
 + 
 +[FILTER] 
 +    name                parser 
 +    match               docker.* 
 +    key_name            raw_log 
 +    parser              mysql_slow 
 +    reserve_data        true 
 + 
 +[FILTER] 
 +    name                parser 
 +    match               docker.* 
 +    key_name            raw_log 
 +    parser              postgresql 
 +    reserve_data        true 
 + 
 +[FILTER] 
 +    name                parser 
 +    match               docker.* 
 +    key_name            raw_log 
 +    parser              postgresql_detailed 
 +    reserve_data        true 
 + 
 +[FILTER] 
 +    name                parser 
 +    match               docker.* 
 +    key_name            raw_log 
 +    parser              nextcloud_access 
 +    reserve_data        true 
 +    Preserve_Key        true 
 + 
 +[FILTER] 
 +    name                parser 
 +    match               docker.* 
 +    key_name            raw_log 
 +    parser              apache_access 
 +    reserve_data        true 
 + 
 +[FILTER] 
 +    name                parser 
 +    match               docker.* 
 +    key_name            raw_log 
 +    parser              php_fpm 
 +    reserve_data        true 
 + 
 +[FILTER] 
 +    name                parser 
 +    match               docker.* 
 +    key_name            raw_log 
 +    parser              grafana_regex 
 +    reserve_data        true 
 + 
 +# Структуризация распарсенных полей В raw_log 
 +[FILTER] 
 +    name                nest 
 +    match               docker.* 
 +    operation           nest 
 +    wildcard            remote_* 
 +    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 
 + 
 +# Метаданные Docker 
 +[FILTER] 
 +    name                lua 
 +    match               docker.* 
 +    script              /fluent-bit/bin/docker-metadata.lua 
 +    call                enrich_with_docker_metadata 
 + 
 +# Копируем метаданные 
 +[FILTER] 
 +    name                modify 
 +    match               docker.* 
 +    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] 
 +    name                nest 
 +    match               docker.* 
 +    operation           nest 
 +    wildcard            _* 
 +    nest_under          log 
 +    remove_prefix       _ 
 + 
 +# Добавляем host metadata 
 +[FILTER] 
 +    name                modify 
 +    match               docker.* 
 +    set                 node_id ${NODE_ID} 
 +    set                 node_name ${NODE_NAME} 
 +    set                 host_name ${NODE_NAME} 
 + 
 +# Перетагиваем только логи с enabled logging 
 +[FILTER] 
 +    name                rewrite_tag 
 +    match               docker.* 
 +    rule                $logging ^enabled$ data.$container_id true
  
 # ==================== ROUTER FILTERS ==================== # ==================== ROUTER FILTERS ====================
 +
 [FILTER] [FILTER]
     Name                parser     Name                parser
Строка 113: Строка 291:
     Set                 log_type syslog     Set                 log_type syslog
     Set                 environment production     Set                 environment production
- 
-# ==================== DOCKER FILTERS ==================== 
-# Фильтруем пустые логи 
-[FILTER] 
-    Name                grep 
-    Match               docker.* 
-    Exclude             log ^$ 
-    Exclude             log ^\s*$ 
- 
-# Копируем сырой лог 
-[FILTER] 
-    Name                modify 
-    Match               docker.* 
-    Copy                log raw_log 
- 
-# Docker metadata через Lua скрипт 
-[FILTER] 
-    Name                lua 
-    Match               docker.* 
-    Script              /fluent-bit/bin/docker-metadata.lua 
-    Call                enrich_with_docker_metadata 
- 
-# Добавляем Swarm метаданные 
-[FILTER] 
-    Name                modify 
-    Match               docker.* 
-    Copy                docker.container_name container_name 
-    Copy                docker.container_id container_id 
-    Copy                docker.image_name image_name 
-    Copy                docker.image_id image_id 
-    Copy                docker.command command 
-    Copy                docker.created created 
-    Copy                docker.hostname hostname 
-    Set                 node_id ${NODE_ID} 
-    Set                 node_name ${NODE_NAME} 
- 
-# Парсим JSON логи приложений 
-[FILTER] 
-    Name                parser 
-    Match               docker.* 
-    Key_Name            raw_log 
-    Parser              json 
-    Reserve_Data        true 
  
 # Отфильтровываем служебные контейнеры # Отфильтровываем служебные контейнеры
Строка 166: Строка 301:
     Exclude             container_name ^/traefik.*     Exclude             container_name ^/traefik.*
  
-# Группируем логи по службам 
 [FILTER] [FILTER]
-    Name                rewrite_tag +    name                record_modifier 
-    Match               docker.* +    match               data.* 
-    Rule                $logging ^enabled$ logs.$container_name true+ 
 +    whitelist_key       date 
 +    whitelist_key       log 
 +    whitelist_key       exception_class 
 +    whitelist_key       exception_message 
 +    whitelist_key       exception_backtrace
  
-# ==================== OUTPUTS ====================+    whitelist_key       method 
 +    whitelist_key       path 
 +    whitelist_key       action 
 +    whitelist_key       status 
 +    whitelist_key       remote_ip 
 +    whitelist_key       controller 
 +    whitelist_key       line_id 
 + 
 +    whitelist_key       node_id 
 +    whitelist_key       node_name 
 +    whitelist_key       host_name 
 +    whitelist_key       hostname 
 +    whitelist_key       started 
 +    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 
 + 
 +Логи docker в Loki 
 +[OUTPUT] 
 +    name                loki 
 +    match               data.* 
 +    host                loki 
 +    port                3100 
 +    labels              job=$logging_jobname, node_name=$node_name, container_id=$container_id, container_name=$container_name, service_name=$service_name, project=$project, service=$service, level=$stream 
 +    line_format         json 
 +    auto_kubernetes_labels off
  
 # Логи роутера в Loki # Логи роутера в Loki
Строка 181: Строка 349:
     Port                3100     Port                3100
     Labels              job=asus_router, device_type=router, source=syslog, cluster=docker_swarm     Labels              job=asus_router, device_type=router, source=syslog, cluster=docker_swarm
-    Label_Keys          source_host,facility,severity 
     Line_Format         key_value     Line_Format         key_value
     Auto_Kubernetes_Labels off     Auto_Kubernetes_Labels off
-    Drop_Single_Key     true 
-    Tenant_ID           router 
- 
-# Docker логи в Loki 
-[OUTPUT] 
-    Name                loki 
-    Match               logs.* 
-    Host                loki 
-    Port                3100 
-    Labels              job=$logging_jobname, node=$node_name, container=$container_name, image=$image_name, cluster=docker_swarm 
-    Label_Keys          $node_name,$container_name,$image_name,$swarm_node_role 
-    Line_Format         json 
-    Auto_Kubernetes_Labels off 
-    Drop_Single_Key     true 
-    Tenant_ID           docker 
- 
-# Системные метрики в Loki 
-[OUTPUT] 
-    Name                loki 
-    Match               node.* 
-    Host                loki 
-    Port                3100 
-    Labels              job=node_metrics, node=$node_name, cluster=docker_swarm 
-    Line_Format         key_value 
-    Auto_Kubernetes_Labels off 
- 
-# Docker events в Loki 
-[OUTPUT] 
-    Name                loki 
-    Match               docker.events 
-    Host                loki 
-    Port                3100 
-    Labels              job=docker_events, node=$node_name, cluster=docker_swarm 
-    Line_Format         json 
-    Auto_Kubernetes_Labels off 
- 
-# Отладочный вывод (можно отключить) 
-#[OUTPUT] 
-#    Name                stdout 
-#    Match               router.* 
-#    Format              json_lines 
- 
-#[OUTPUT] 
-#    Name                stdout 
-#    Match               logs.* 
-#    Format              json_lines 
-</code> 
- 
-=== parsers.conf === 
- 
-<code ini> 
-[PARSER] 
-    Name        router_logs 
-    Format      regex 
-    Regex       ^(?<timestamp>\w+\s+\d+\s+\d+:\d+:\d+)\s+(?<host>\S+)\s+(?<process>\w+)\[(?<pid>\d+)\]:?\s+(?<message>.*)$ 
-    Time_Key    timestamp 
-    Time_Format %b %d %H:%M:%S 
-    Time_Keep   On 
-    Types       pid:integer 
- 
-[PARSER] 
-    Name        syslog-rfc5424 
-    Format      regex 
-    Regex       ^\<(?<pri>[0-9]{1,3})\>(?<version>[0-9])?\s?(?<timestamp>[^ ]+)\s+(?<host>[^ ]+)\s+(?<ident>[^ ]+)\s+(?<pid>[-0-9]+)\s+(?<msgid>[^ ]+)\s+(?<extradata>(\[.*?\])?)\s*(?<message>.+)$ 
-    Time_Key    timestamp 
-    Time_Format %Y-%m-%dT%H:%M:%S.%L%z 
-    Time_Keep   On 
-    Types       pri:integer, version:integer, pid:integer 
- 
-# Базовый парсер для Docker JSON логов 
-[PARSER] 
-    Name        docker 
-    Format      json 
-    Time_Key    time 
-    Time_Format %Y-%m-%dT%H:%M:%S.%LZ 
-    Time_Keep   On 
- 
-# Nginx access логи 
-[PARSER] 
-    Name        nginx_access 
-    Format      regex 
-    Regex       ^(?<remote_ip>[^ ]*) - - \[(?<timestamp>[^\]]*)\] "(?<method>\w+) (?<path>[^ ]*) HTTP/[0-9.]+" (?<status>\d+) (?<body_bytes>\d+) "(?<referrer>[^"]*)" "(?<user_agent>[^"]*)" 
-    Time_Key    timestamp 
-    Time_Format %d/%b/%Y:%H:%M:%S %z 
- 
-# Gitlab JSON логи (application logs) 
-[PARSER] 
-    Name        gitlab_json 
-    Format      json 
-    # Time_Key    time    # Используем время из Docker 
-    Time_Keep   On 
- 
-# GitLab Registry логи 
-[PARSER] 
-    Name        gitlab_registry 
-    Format      regex 
-    Regex       ^\d{4}-\d{2}-\d{2}_\d{2}:\d{2}:\d{2}\.\d+ time="(?<time>[^"]*)" level=(?<level>\w+) msg="(?<msg>[^"]*)"(?<rest>.*) 
-    Time_Key    time 
-    Time_Format %Y-%m-%dT%H:%M:%S.%LZ 
-    Time_Keep   On 
- 
-# Sidekiq JSON логи 
-[PARSER] 
-    Name        sidekiq_json 
-    Format      json 
-    # Time_Key    time    # Используем время из Docker 
-    Time_Keep   On 
- 
-# Nextcloud Apache-style логи 
-[PARSER] 
-    Name        nextcloud_access 
-    Format      regex 
-    Regex       ^(?<remote_ip>[^ ]*) (?<user_ident>[^ ]*) (?<user_id>[^ ]*) \[(?<timestamp>[^\]]*)\] "(?<method>\w+) (?<path>[^ ]*) HTTP/[0-9.]+" (?<status>\d+) (?<body_bytes>\d+) "(?<referrer>[^"]*)" "(?<user_agent>[^"]*)" 
-    Time_Key    timestamp 
-    Time_Format %d/%b/%Y:%H:%M:%S %z  # ← Apache/Nginx формат! 
-    Time_Keep   On 
- 
-# Apache access логи 
-[PARSER] 
-    Name        apache_access 
-    Format      regex 
-    Regex       ^(?<remote_ip>[^ ]*) - - \[(?<timestamp>[^\]]*)\] "(?<method>\w+) (?<path>[^ ]*) HTTP/[0-9.]+" (?<status>\d+) (?<body_bytes>\d+) "(?<referrer>[^"]*)" "(?<user_agent>[^"]*)" 
-    Time_Key    timestamp 
-    Time_Format %d/%b/%Y:%H:%M:%S %z 
- 
-# MySQL error логи 
-[PARSER] 
-    Name        mysql_error 
-    Format      regex 
-    Regex       ^(?<timestamp>\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d+Z) (?<level>\w+) (?<message>.*) 
-    Time_Key    timestamp 
-    Time_Format %Y-%m-%dT%H:%M:%S.%LZ 
-    Time_Keep   On 
- 
-# MySQL slow query логи 
-[PARSER] 
-    Name        mysql_slow 
-    Format      regex 
-    Regex       ^# Time: (?<timestamp>\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d+Z).*# User@Host: (?<user>[^\[]*)\[(?<database>[^\]]*)\] @ (?<host>[\w\.]*)\s*\[(?<ip>[\d\.]*)\].*# Query_time: (?<query_time>[\d\.]*) Lock_time: (?<lock_time>[\d\.]*) Rows_sent: (?<rows_sent>\d*) Rows_examined: (?<rows_examined>\d*).*use (?<used_database>\w*);.*SET timestamp=(?<timestamp_unix>\d*);(?<query>.*) 
-    Time_Key    timestamp 
-    Time_Format %Y-%m-%dT%H:%M:%S.%LZ 
-    Time_Keep   On 
- 
-# PostgreSQL логи 
-[PARSER] 
-    Name        postgresql 
-    Format      regex 
-    Regex       ^(?<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d+ [A-Z]{3}) \[(?<pid>\d+)\] (?<level>\w+):\s*(?<message>.*) 
-    Time_Key    timestamp 
-    Time_Format %Y-%m-%d %H:%M:%S.%L %Z 
-    Time_Keep   On 
- 
-# PostgreSQL extended логи (с деталями запросов) 
-[PARSER] 
-    Name        postgresql_detailed 
-    Format      regex 
-    Regex       ^(?<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d+ [A-Z]{3}) \[(?<pid>\d+)\] (?<level>\w+):\s*duration: (?<duration>[\d\.]*) ms\s*(?<message>.*) 
-    Time_Key    timestamp 
-    Time_Format %Y-%m-%d %H:%M:%S.%L %Z 
-    Time_Keep   On 
- 
-# PHP-FPM логи 
-[PARSER] 
-    Name        php_fpm 
-    Format      regex 
-    Regex       ^\[(?<timestamp>[^\]]+)\] (?<level>\w+): (?<message>.*) 
-    Time_Key    timestamp 
-    Time_Format %d-%b-%Y %H:%M:%S 
-    Time_Keep   On 
- 
-# Стандартный syslog 
-[PARSER] 
-    Name        syslog_rfc3164 
-    Format      regex 
-    Regex       ^\<(?<pri>[0-9]+)\>(?<timestamp>[^ ]* {1,2}[^ ]* [^ ]*) (?<host>[^ ]*) (?<ident>[a-zA-Z0-9_\/\.\-]*)(?:\[(?<pid>[0-9]+)\])?(?:[^\:]*\:)? (?<message>.*)$ 
-    Time_Key    timestamp 
-    Time_Format %b %d %H:%M:%S 
-    Time_Keep   On 
- 
-# Grafana лог формата key=value 
-[PARSER] 
-    Name        grafana_logfmt 
-    Format      logfmt 
-    Time_Key    t 
-    Time_Format %Y-%m-%dT%H:%M:%S.%LZ 
-    Time_Keep   On 
  
-[PARSER] +# Только для отладки 
-    Name        grafana_regex +[OUTPUT
-    Format      regex +#     name                stdout 
-    Regex       logger=(?<logger>[]*) endpoint=(?<endpoint>[^ ]*) pluginId=(?<pluginId>[^ ]*) dsName=(?<dsName>[^ ]*) dsUID=(?<dsUID>[^ ]*) uname=(?<uname>[^ ]*) t=(?<t>[^ ]*) level=(?<level>[^ ]*) msg="(?<msg>[^"]*)" error=(?<error>[^ ]*) statusCode=(?<statusCode>[^ ]*) resourcePath="(?<resourcePath>[^"]*)" +#     match               data.* 
-    Time_Key    t +#     format              json
-    Time_Format %Y-%m-%dT%H:%M:%S.%LZ +
-    Time_Keep   On+
 </code> </code>