Стек логирования для сборочных компонентов и заданий сборки
В данной документации кратко описывается стек логирования, используемый для сбора и анализа логов сборочных компонентов и заданий сборки. В качестве основных компонентов стека выбраны Vector, Loki и Grafana. Инструменты Vector и Loki объединены в Helm-чарте.
Архитектура развертывания Vector
Vector разделен на две основные части, каждая из которых выполняет свою уникальную функцию:
- Vector для сборочных компонентов:
Этот экземпляр Vector настроен на сбор логов из Kubernetes logs и развернут в виде DaemonSet на каждой ноде кластера. Это позволяет собирать логи с всех подов, работающих на данной ноде, обеспечивая централизованный сбор данных.
- 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 обеспечивает эффективный сбор, хранение и визуализацию логов сборочных компонентов и заданий. Это решение отличается высокой гибкостью и масштабируемостью. Благодаря индексации только меток и сжатию логов, хранение данных становится максимально экономичным.