Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
software:monitoring:fluent-bit:docker-swarm [2025/11/25 23:19] – удалено - внешнее изменение (Дата неизвестна) 127.0.0.1software:monitoring:fluent-bit:docker-swarm [2025/11/25 23:19] (текущий) – ↷ Страница перемещена из software:fluent-bit-loki-grafana:fluent-bit:docker-swarm в software:monitoring:fluent-bit:docker-swarm mirocow
Строка 1: Строка 1:
 +====== Настройка логов GitLab в Docker Swarm ======
 +
 +=== docker-compose.fluentbit.yml ===
 +
 +<code yaml>
 +version: '3.8'
 +
 +services:
 +  fluent-bit:
 +    image: fluent/fluent-bit:latest
 +    restart: always
 +    environment:
 +      TZ: 'Europe/Moscow'
 +    configs:
 +      - source: fluent-bit-conf
 +        target: /fluent-bit/etc/fluent-bit.conf
 +      - source: parsers-conf
 +        target: /fluent-bit/etc/parsers.conf
 +    volumes:
 +      # Монтируем директорию с контейнерами Docker
 +      - /var/lib/docker/containers:/var/lib/docker/containers:ro
 +      # Монтируем Docker socket для получения метаданных
 +      - /var/run/docker.sock:/var/run/docker.sock:ro
 +      # Для отслеживания позиции в файлах
 +      - fluent-bit-state:/tail-db
 +    networks:
 +      - localnetwork
 +    
 +    deploy:
 +      mode: global  # Запускаем на каждом узле Swarm
 +      resources:
 +        limits:
 +          memory: 300M
 +        reservations:
 +          memory: 100M
 +
 +    logging:
 +      driver: "json-file"
 +      options:
 +        max-size: "10m"
 +        max-file: "3"
 +
 +volumes:
 +  fluent-bit-state:
 +
 +configs:
 +  fluent-bit-conf:
 +    file: ./fluent-bit.conf
 +  parsers-conf:
 +    file: ./parsers.conf
 +
 +networks:
 +  localnetwork:
 +    external: true
 +</code>
 +
 +=== fluent-bit.conf ===
 +
 +<code ini>
 +[SERVICE]
 +    Flush         1
 +    Log_Level     info
 +    Daemon        off
 +    Parsers_File  parsers.conf
 +    HTTP_Server   On
 +    HTTP_Listen   0.0.0.0
 +    HTTP_Port     2020
 +
 +# Вход для Docker JSON логов
 +[INPUT]
 +    Name              tail
 +    Path              /var/lib/docker/containers/*/*.log
 +    Tag               docker.*
 +    Parser            docker
 +    Docker_Mode       On
 +    Docker_Mode_Flush 4
 +    Mem_Buf_Limit     50MB
 +    Skip_Long_Lines   On
 +    Refresh_Interval  10
 +    DB                /tail-db/docker.db
 +    DB.sync           normal
 +
 +# Парсинг JSON логов
 +[FILTER]
 +    Name          parser
 +    Match         docker.*
 +    Key_Name      log
 +    Parser        json_auto
 +    Reserve_Data  On
 +
 +# Добавление Docker метаданных
 +[FILTER]
 +    Name          kubernetes
 +    Match         docker.*
 +    Kube_Tag_Prefix docker.var.log.containers.
 +    Merge_Log     On
 +    Merge_Log_Key log_processed
 +    K8S-Logging.Parser On
 +    K8S-Logging.Exclude On
 +
 +# Альтернативный фильтр для Docker метаданных (если kubernetes не работает)
 +[FILTER]
 +    Name          nest
 +    Match         docker.*
 +    Operation     lift
 +    Nested_under  log_processed
 +    Add_prefix    log_
 +
 +# Обогащение логов
 +[FILTER]
 +    Name          modify
 +    Match         docker.*
 +    Add           environment production
 +    Add           cluster docker_swarm
 +    Add           log_source docker_json
 +
 +# Выход для отладки
 +[OUTPUT]
 +    Name        stdout
 +    Match       *
 +    Format      json_lines
 +
 +# Пример выхода в Elasticsearch
 +# [OUTPUT]
 +#     Name        es
 +#     Match       *
 +#     Host        192.168.1.10
 +#     Port        9200
 +#     Index       docker-logs
 +#     Type        _doc
 +</code>
 +
 +=== parsers.conf ===
 +
 +<code ini>
 +[PARSER]
 +    Name        docker
 +    Format      json
 +    Time_Key    time
 +    Time_Format %Y-%m-%dT%H:%M:%S.%LZ
 +    Time_Keep   On
 +
 +[PARSER]
 +    Name        json_auto
 +    Format      json
 +    Time_Key    time
 +    Time_Format %Y-%m-%dT%H:%M:%S.%LZ
 +    Time_Keep   On
 +
 +# Парсер для многострочных логов GitLab
 +[PARSER]
 +    Name        gitlab_multiline_firstline
 +    Format      regex
 +    Regex       ^{"time":"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+Z"
 +
 +[MULTILINE_PARSER]
 +    Name          gitlab_multiline
 +    Type          regex
 +    Flush_Timeout 1000
 +    Rule          "start_state"  "^{"time":"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+Z" "cont"
 +    Rule          "cont"         "^(?!{"time":"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+Z).*" "cont"
 +</code>
 +
 +=== Установка ===
 +
 +<code bash>
 +# Создайте директорию для конфигов
 +$ mkdir -p fluentbit-docker
 +$ cd fluentbit-docker
 +
 +# Создайте файлы конфигурации
 +$ cat > docker-compose.fluentbit.yml << 'EOF'
 +# [вставьте содержимое docker-compose.fluentbit.yml выше]
 +EOF
 +
 +$ cat > fluent-bit.conf << 'EOF'
 +# [вставьте содержимое fluent-bit.conf выше]
 +EOF
 +
 +$ cat > parsers.conf << 'EOF'
 +# [вставьте содержимое parsers.conf выше]
 +EOF
 +
 +# Разверните стек
 +$ docker stack deploy -c docker-compose.fluentbit.yml fluentbit
 +</code>
 +
 +===  Проверка работы ===
 +
 +<code bash>
 +# Проверьте сервисы
 +docker service ls
 +
 +# Посмотрите логи Fluent-Bit
 +docker service logs fluentbit_fluent-bit
 +
 +# Проверьте, что Fluent-Bit видит файлы
 +docker exec -it $(docker ps -q -f name=fluentbit) ls -la /var/lib/docker/containers/
 +</code>