Vector – руководство по установке сервиса для сбора логов

По мере разрастания облачной инфраструктуры увеличивается необходимость отслеживания происходящего в каждой ее части. Одним из источников подобной информации являются логи – они предоставляют необходимые данные о работе приложений и дают основу для анализа различных бизнес-метрик. Однако сбор логов проекта может быть крайне трудоемким занятием при большом количестве источников – гораздо удобнее собирать логи различных сервисов в одном месте.

В этом и помогает Vector – платформа для агрегации и организации логов. В данной статье мы расскажем, как установить эту платформу и организовать с Vector сбор логов для дальнейшей обработки.

Схема работы

В рамках данной статьи мы рассмотрим, как можно собирать с Вектор логи с двух облачных серверов с приложением (в данном случае на готовом решении Docker).

Конфигурация серверов:

  • Сервер приложения – готовое решение Docker, IP в приватной сети – 10.16.0.1 и 10.16.0.2
  • Сервер агрегации – Ubuntu Server, IP в приватной сети – 10.16.0.3

Схема работы будет следующая:

  • Логи собираются с помощью vector в режиме агента на конечных серверах
  • Собранные логи отправляются по приватной сети на отдельный сервер с vector в режиме агрегатора для дальнейшей обработки
  • Обработанные логи сохраняются в облачное объектное хранилище

Перенос обработки и сохранения логов на отдельный сервер позволяет минимизировать дополнительную нагрузку на конечные серверы.

Установка

Vector может быть установлен как в виде бинарного исполняемого файла, так и в виде контейнера. Рассмотрим оба способа: на серверах приложения установим его в виде контейнера, на сервере-агрегаторе – с помощью менеджера пакетов дистрибутива.

Серверы приложения

Создадим директорию под конфигурационные файлы Vector:

mkdir -p /opt/vector/conf
cd /opt/vector

Добавим файл compose.yaml:

services:
  vector:
    image: timberio/vector:0.48.X-distroless-static
    volumes:
      - ./conf:/etc/vector
      - /var/run/docker.sock:/var/run/docker.sock
    command: ["-c", "/etc/vector/vector.yaml"]
    ports: ["8686:8686"]
    container_name: vector

В директории /opt/vector/conf создадим файл vector.yaml, в нем укажем конфигурацию Vector. В рамках данной статьи просто укажем сбор всех логов контейнеров и их отправку на сервер агрегации по приватной сети:

sources:
  containers:
    type: docker_logs
sinks:
  aggregator:
    type: vector
    inputs: 
      - containers
    address: 10.16.0.3:6000
    version: "2"

Загрузим образ vector командой:

docker compose pull

После чего запустим контейнер командой:

docker compose up -d

Сервер агрегации

На сервере агрегации рассмотрим установку из репозитория с помощью менеджера пакетов, в данном случае apt.

Для этой задачи загрузим скрипт добавления репозитория:

curl -L -o repo.sh https://setup.vector.dev

Затем проверим корректность загруженного файла и добавим репозиторий:

less repo.sh
bash repo.sh

После успешного добавления репозитория удалим скрипт и установим vector:

rm repo.sh
apt install vector

Конфигурация агрегатора

На сервере-агрегаторе нам потребуется настроить сбор логов с других серверов в S3-совместимое хранилище. Для этого в файле /etc/vector/vector.yaml укажем следующие настройки:

sources:
  agents:
    type: vector
    version: "2"
    address: "10.16.0.3:6000"
sinks:
  s3_archive:
    type: "aws_s3"
    bucket: "bucket-name"
    auth:
      access_key_id: "access_key_бакета"
      secret_access_key: "secret_key_бакета"
    compression: "gzip"
    content_type: "application/gzip"
    endpoint: "https://s3.ru1.storage.beget.cloud"
    region: "ru1"
    key_prefix: "date=%Y-%m-%d--"
    framing:
      method: "newline_delimited"
    encoding:
      codec: "json"
    batch:
      max_bytes: 10000000

В данной конфигурации vector будет прослушивать порт 6000 на предмет входящих логов из других инстансов vector и архивировать их в S3-хранилище в сжатом виде.

Для запуска агрегатора выполним команды:

systemctl enable vector
systemctl start vector

Проверка работы

На данный момент система сбора логов запущена, однако ей нечего обрабатывать – в нашем случае на серверах с Docker запущены только контейнеры vector. Для проверки работы агрегатора запустим тестовые контейнеры hello-world на серверах с Docker.

docker run hello-world

Вывод контейнера будет передан агрегатору, а тот, в свою очередь, сохранит лог в объектное хранилище в сжатом виде:

файлы логов vector

В файле лога будут содержаться собранные Vector логи с обоих серверов:

{"container_created_at":"2025-08-20T06:12:37.535496666Z","container_id":"1e41367c029b04d00e5365a628d4b6a0bf20b55f57b0c9a23eff983505ca4fdb","container_name":"inspiring_brahmagupta","host":"e407c846511e","image":"hello-world","message":"","source_type":"docker_logs","stream":"stdout","timestamp":"2025-08-20T06:12:38.954183279Z"}
{"container_created_at":"2025-08-20T06:12:37.535496666Z","container_id":"1e41367c029b04d00e5365a628d4b6a0bf20b55f57b0c9a23eff983505ca4fdb","container_name":"inspiring_brahmagupta","host":"e407c846511e","image":"hello-world","message":"Hello from Docker!","source_type":"docker_logs","stream":"stdout","timestamp":"2025-08-20T06:12:38.954307381Z"}
{"container_created_at":"2025-08-20T06:12:37.535496666Z","container_id":"1e41367c029b04d00e5365a628d4b6a0bf20b55f57b0c9a23eff983505ca4fdb","container_name":"inspiring_brahmagupta","host":"e407c846511e","image":"hello-world","message":"This message shows that your installation appears to be working correctly.","source_type":"docker_logs","stream":"stdout","timestamp":"2025-08-20T06:12:38.954328888Z"}
…
{"container_created_at":"2025-08-20T06:12:38.558644762Z","container_id":"fb50713b279b94d06e86079f2e7db0f91fd42773ff9e9da7f5f32b8d30aec632","container_name":"zen_dijkstra","host":"81fcb2d44535","image":"hello-world","message":" https://docs.docker.com/get-started/","source_type":"docker_logs","stream":"stdout","timestamp":"2025-08-20T06:12:40.113742206Z"}
{"container_created_at":"2025-08-20T06:12:38.558644762Z","container_id":"fb50713b279b94d06e86079f2e7db0f91fd42773ff9e9da7f5f32b8d30aec632","container_name":"zen_dijkstra","host":"81fcb2d44535","image":"hello-world","message":"","source_type":"docker_logs","stream":"stdout","timestamp":"2025-08-20T06:12:40.113769278Z"}

Заключение

В данной статье мы рассмотрели процесс сбора и сохранения логов в объектное хранилище, однако функционал Vector позволяет гораздо больше – например, с помощью Vector можно собирать логи в Kubernetes и т. д. Все поддерживаемые источники, преобразования и методы хранения вы можете узнать в документации решения.

Если возникнут вопросы, напишите нам, пожалуйста, тикет из панели управления аккаунта (раздел “Помощь и поддержка”), а если вы захотите обсудить эту статью, альтернативы Vector или наши продукты с коллегами по цеху и сотрудниками платформы для IT-инфраструктуры Beget – ждем вас в нашем сообществе в Telegram.

0
527