Настроить логирование и сбор логов (DEVOPS)

40 000 руб. за проект
29 февраля 2024, 15:30 • 14 откликов • 111 просмотров
Задача, которую надо решить, следующая. У нас есть N сервисов, они пишут логи. У этих сервисов есть инфраструктурная обвязка, она тоже пишет логи.

Нам нужно получить решение, которое позволит оперативно:
- узнавать о том, что в логах есть критичные события заданной severity (ошибки, варнинги)
- узнавать о том, в каком контексте произошли события, в каких сервисах и на каком окружении
- получать в явном виде детали из логов разных сервисов в одном timespan, с деталями в логах (собственно, сами детали)

Парк сервисов это:
- веб-приложения под docker, логи в stdout/stderr контейнера и в файлах логов приложения внутри контейнера
- инфраструктурные: nginx, fpm, fcgi и проч, которые пишут логи на хост-машины

Что сейчас есть :
- grafana и ряд exporters, которые собирают количественные метрики, включая rate ошибок по логам
- loki и loki datasource в графану, который собирает ряд логов (не все) в их стандартном формате, format-парсер в datasource и теги в логах не развешаны
- если loki покажется мало, можно взять альтернативы (sentry например), и завести в него детализацию - метрики ошибок сервисов в графане в каком-то приближении уже есть

Надо :
- собрать решение, которое явно в едином месте (напр.grafana или sentry web) позволит оперативно посмотреть детали логов в реальном времени
- завести в него все логи с деталями по цепочке обработки запроса веб-сервисами; напомню, какие-то логи заведены, а какие-то возможно придется переопределить для приложений, чтобы писалось в удобное предсказуемое место
- убедиться, что в решении явно собираются и читаются severity (что ошибка это ошибка), инстанс, окружение итп

Взаимодействовать с разработкой и опсятней придется: какие-то логи в неочевидных местах (обычно /var/log но возможны нюансики), какие-то имеет смысл пробросить из контейнера на хост (маунтом), каких-то вообще нет или пишутся в stdout (fpm) - это придется спросить, для каких-то логов поменять или продублировать формат, чтобы собиралка их читала.

Если что, есть кастомная сборка nginx 1.25 вместе с luajit, которая позволяет делать с логами nginx вообще что угодно (включая сквозной requestId и переменные окружения), развернута на dev. Но скорее всего и без нее можно обойтись, чисто форматами.