Загрузка данных


version: "3.8"

configs:
  vector_config:
    file: ./vector.yaml   # должен лежать рядом с этим stack.yml на момент деплоя

services:
  vector:
    image: timberio/vector:0.57.0-alpine   # проверьте актуальность тега на Docker Hub перед деплоем
    user: "0:0"   # нужен root, чтобы читать /var/run/docker.sock

    configs:
      - source: vector_config
        target: /etc/vector/vector.yaml

    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /srv/app-logs:/var/log/apps:ro   # тот же абсолютный путь, что монтируют app-сервисы
      - vector_data:/var/lib/vector       # чекпойнты file-source переживают рестарт/переезд таска

    deploy:
      mode: global   # ровно один Vector на каждом узле кластера, включая будущие
      restart_policy:
        condition: any
      resources:
        limits:
          memory: 512M   # подстройте под реальную нагрузку логов

volumes:
  vector_data:


data_dir: /var/lib/vector

sources:
  # Логи из stdout/stderr всех контейнеров этого узла (через сокет докера)
  docker_stdout:
    type: docker_logs
    # include_containers: ["app1", "app2"]   # опционально: собирать только эти
    # exclude_containers: ["vector"]         # опционально: не собирать сами себя

  # Логи из файлов внутри контейнеров, которые вынесены наружу через volume
  # (см. чек-лист в чате — файлы обязаны быть примонтированы на хосте)
  app_files:
    type: file
    include:
      - /var/log/apps/**/*.log   # при необходимости поправьте маску под реальные имена
    read_from: beginning         # "end" — если история за прошлые запуски не нужна

sinks:
  victorialogs:
    type: elasticsearch
    inputs:
      - docker_stdout
      - app_files
    # ОБЯЗАТЕЛЬНО замените на реальный адрес сервера с VictoriaLogs:
    endpoints:
      - "http://VICTORIALOGS_HOST:9428/insert/elasticsearch/"
    api_version: v8
    mode: bulk
    compression: gzip
    healthcheck:
      enabled: false
    query:
      _msg_field: message
      _time_field: timestamp
      # У докер-логов есть стабильная метка со именем swarm-сервиса, у файловых
      # логов её нет (будут группироваться просто по host) — донастройте после
      # первого запуска, когда увидите реальные события.
      _stream_fields: host,label.com.docker.swarm.service.name

    # Раскомментируйте, если на VictoriaLogs включите -httpAuth.username/
    # -httpAuth.password (Docker Splunk-driver так не умел — этот sink умеет):
    # auth:
    #   strategy: basic
    #   user: "USERNAME"
    #   password: "PASSWORD"