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"