Логирование

Logging (логирование) в микросервисах — это процесс сбора и хранения информации о работе системы (ошибки, предупреждения, отладочная информация). Цель — быстро находить и устранять проблемы, понимать состояние системы «изнутри» и анализировать нетипичное поведение.

Виды логирования
  1. Application logs (логи приложения): Тексты ошибок, отладочные сообщения и бизнес-события внутри кода микросервиса. Часто пишутся не просто текстом, а в формате JSON. Они легко парсятся и невероятно удобны для поиска в инструментах вроде Kibana, Datadog или Grafana Loki.
  2. System logs (системные логи): Информация от операционной системы или инфраструктуры (например, OOMKilled в Docker/Kubernetes).
  3. Distributed tracing (распределённая трассировка): Метод, позволяющий отслеживать, как один запрос «путешествует» между десятком микросервисов (через TraceID). Подробнее мы разберем это в отдельном уроке.

Индустриальный стандарт: OpenTelemetry (OTel). Раньше логи, метрики и трейсы (три столпа Observability) собирались разными инструментами и библиотеками. Сейчас многие перешел на OpenTelemetry — единый открытый стандарт и SDK. Он позволяет твоему приложению собирать всю телеметрию в одном формате и отправлять куда угодно, не привязываясь к конкретному вендору.

Инфраструктура: Как собирать логи

Fluent Bit — это сверхлёгкий инструмент для сбора и отправки логов. Его часто ставят рядом с микросервисами или прямо внутри контейнеров, чтобы он:

  • Подхватывал все логи из файлов и стандартных потоков вывода (stdout / stderr).
  • Трансформировал их (например, фильтровал пароли или добавлял теги с названием сервера).
  • Пачками (батчами) отправлял логи в центральное хранилище (Elasticsearch, Loki, S3).

Как выглядит процесс:

  1. Твоя команда вообще не думает о доставке логов. Код просто пишет их в stdout.
  2. Fluent Bit работает как невидимый агент-сборщик, берёт эти логи и по заданным DevOps-правилам пересылает дальше.
  3. В центральном хранилище удобно просматривать все события системы сотен микросервисов в одном поисковом окне.
Зачем всё это усложнять?
  • Централизованное хранение: Когда у тебя 50 экземпляров одного сервиса, ты не сможешь заходить по SSH на каждый сервер, чтобы почитать логи. Тебе нужна единая точка.
  • Мониторинг и алерты: Можно настроить уведомление: «Если слово FATAL появилось в логах авторизации больше 10 раз за минуту — буди дежурного».
  • Упрощённая отладка: Скопировав TraceID из ошибки, ты можешь в один клик найти логи всех 5 сервисов, которые участвовали в этом сломанном бизнес-процессе.
Полезные ресурсы
  • Опыт Pinterest (Агент Singer). Когда у тебя тысячи серверов, парсинг и пересылка логов может начать съедать CPU, который нужен для бизнес-логики. Читаем, как инженеры Pinterest написали сверхбыстрый агент Singer, чтобы надежно собирать петабайты логов без просадок серверов.
  • Опыт Google (Система Monarch). Как мониторить сам мониторинг? Рассказ про глобальную систему Google Monarch, которая обрабатывает триллионы событий, оставаясь доступной даже при полном падении целых дата-центров.