Перейти к основному содержимому

Метрики, журналы и трассировки

Метрики, журналы и трассировки (metics, logs, traces — MLT) — это три столпа наблюдаемости, которые могут обеспечить нам полную видимость программной системы. В этой работе мы собираемся настроить систему, в которой данные MLT собираются из микросервисного приложения на Python.

Что такое метрики, журналы и трассировки (MLT)?

Метрики

Метрики показывают то, как используется системный ресурс. Обычно они числовые. Например:

  • Сколько ресурсов процессора было использовано за последний час?
  • Сколько дискового пространства потребляется?
  • Какая пропускная способность была использована?

Журналы

Журналы (логи) — это события, которые записывает работающее программное обеспечение. Например:

  • Регистрируют трассировку стека ошибки времени выполнения.
  • Регистрируют, когда пользователь обращается к системе.
  • Регистрируют критическую ошибку.

Трассировки

Трассировки показывают путь выполнения программы. В микросервисной/распределенной системе запрос от клиента может обрабатываться несколькими службами. Важно знать, по какому пути был обработан запрос и сколько времени потребовалось на обработку в каждом узле, чтобы можно было выявить ошибки и узкие места.

Подробнее о MLT

Необязательно собирать все три компонента MLT. Журналы являются наиболее важным элементом для сбора, поскольку они сообщают, какие ошибки произошли и как выполняется программное обеспечение.

Метрики — следующий по важности элемент для сбора данных. С помощью метрик мы можем знать, насколько хорошо работает программное обеспечение и нужно ли оптимизировать функции или масштабировать серверы.

Наконец, с помощью трассировки мы можем отслеживать, в какой последовательности был обработан запрос. Ранее в этом не было необходимости, поскольку большинство систем были монолитными и не требовали трассировки. Но поскольку микросервисы и распределенные системы становятся все более популярными, становится все более важным отслеживать, как запросы проходят через каждую службу в системе.

Таким образом, мы должны получить полную наблюдаемость системы, собирая метрики, журналы и трассировки. В дополнение к этому, мы должны иметь возможность легко сопоставлять MLT, чтобы лучше понять систему. Например, из журнала мы также должны иметь возможность перейти к его трассировке с того места, где он был сформирован, и наоборот.

OpenTelemetry

OpenTelemetry (OTel) — это платформа наблюдения с открытым исходным кодом, которая позволяет собирать данные телеметрии из облачных приложений. Она предлагает инструменты, API и SDK для сбора и генерации метрик, журналов и трассировок. OpenTelemetry поддерживает несколько языков, включая Java, Python, Go, Ruby, C++ и Javascript.

Как мы можем собирать MLT?

Для сбора данных MLT можно использовать следующие инструменты. Конечно, есть и другие альтернативы. Но для этой работы мы будем использовать инструменты, приведенные ниже:

  • Панель мониторинга Grafana: это панель мониторинга, где мы будем наблюдать за данными MLT, собранными остальными сервисами.
  • Мониторинг Prometheus: собирает и хранит показатели из приложений.
  • Ведение журнала Promtail: собирает данные журнала из приложений и отправляет их в Loki.
  • Ведение журнала Loki: агрегирует и хранит все журналы, отправленные Promtail.
  • Трассировка Opentelemetry: настраивает приложение для сбора трассировок и отправляет их Jaeger.
  • Трассировка Jaeger: собирает и хранит информацию о трассировке. Также помогает в визуализации трассировки.

На следующем рисунке приведены зависимости инструментов:

MLT