Стек логирования для сборочных компонентов и заданий сборки

В данной документации кратко описывается стек логирования, используемый для сбора и анализа логов сборочных компонентов и заданий сборки. В качестве основных компонентов стека выбраны Vector, Loki и Grafana. Инструменты Vector и Loki объединены в Helm-чарте.

Архитектура развертывания Vector

Vector разделен на две основные части, каждая из которых выполняет свою уникальную функцию:

  1. Vector для сборочных компонентов:

Этот экземпляр Vector настроен на сбор логов из Kubernetes logs и развернут в виде DaemonSet на каждой ноде кластера. Это позволяет собирать логи с всех подов, работающих на данной ноде, обеспечивая централизованный сбор данных.

  1. Vector для сборочных заданий:

Данный экземпляр Vector развёрнут по паттерну Sidecar рядом с каждым сборочным заданием, когда оно инициируется. В качестве источника логов используется File Source. Это решение было выбрано из-за специфики наших сборочных заданий и используемых инструментов. Рассматривались и другие варианты, такие как: Kubernetes Logs (не подошел из-за необходимости предоставления прав для запросов к Kubernetes API и высоких накладных расходов на фильтрацию всех подов), stdin (использование этого метода было невозможно, так как Kaniko не может перенаправить поток логов в файл и передать их в Vector). Для File Source в Vector прокинут каталог /var/log/pods, из которого автоматизация выбирает нужную директорию пода и читает необходимые логи.

Архитектура развертывания Loki

Loki развернут в монолитном режиме. Для упрощения поддержки Loki был переведен из SSD в монолитный режим с развертыванием нескольких реплик. Также добавлена поддержка хранения индексов и чанков в S3.

Заключение

Стек Vector + Loki + Grafana обеспечивает эффективный сбор, хранение и визуализацию логов сборочных компонентов и заданий. Это решение отличается высокой гибкостью и масштабируемостью. Благодаря индексации только меток и сжатию логов, хранение данных становится максимально экономичным.