Метрики, журналы и трассировки
Метрики, журналы и трассировки (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: собирает и хранит информацию о трассировке. Также помогает в визуализаци и трассировки.
На следующем рисунке приведены зависимости инструментов:
