Мониторинг системы
Мониторинг системы — инструмент для поддержания стабильности и эффективности платформы управления данными. Архитектура поддерживает интеграцию с системами наблюдения через Micrometer, а также предоставляет REST API для пользовательских метрик, что делает ее удобным инструментом для разработчиков и системных администраторов.
Сбор метрик
Сбор метрик производится двумя путями:
Внешними мониторинговыми системами, которые поддерживают Micrometer (https://micrometer.io/). Метрики, которые собираются этим способом являются динамическими.
Получение метрик через новые запросы REST API приложения. Эти метрики являются статическими.
Для получения динамических метрик должен быть реализован отдельный модуль, который будет регистрировать необходимую имплементацию io.micrometer.core.instrument.MeterRegistry в компоненте com.universe.mdm.monitoring.core.service.DynamicMetricsComponent.
Выбор и настройка внешней мониторинговой системы может быть выполнена на каждом отдельном проекте самостоятельно.
По умолчанию присутствует только одна мониторинговая система, которая для хранения и отображения метрик использует лог (система может быть включена/выключена в любой момент и она присутствует только в целях разработки и тестирования).
Статистические метрики
Для добавления разработчиком новой статической метрики необходимо вызвать метод com.universe.mdm.monitoring.core.service.StaticMetricsComponent#add.
Стандартные статические метрики:
com.universe.mdm.monitoring.core.cluster.size – размер кластера Universe (количество узлов).
Динамические метрики
Для добавления разработчиком новой динамической метрики необходимо вызвать один из статических методов класса org.unidata.mdm.system.type.monitoring.UniverseMetrics.
Типы метрик:
Counter (счетчик) – метрика, которая отслеживает монотонно возрастающее значение (вещественное число). Увеличение значения происходит вручную разработчиком в коде.
Timer (таймер) – метрика, которая отслеживает количество и длительность событий. Запись длительности события происходит вручную разработчиком в коде.
Distribution summary (распределение значений) – метрика, которая отслеживает количество и некоторую численную характеристику событий. Таймер является ее частным случаем, где численной характеристикой событий является их длительность. Запись некоторой численной характеристики события происходит вручную разработчиком в коде.
Gauge (датчик) – метрика, которая отслеживает значение некой численной характеристики. Разработчик предоставляет способ получения значения датчика, система мониторинга самостоятельно проверяет значение.
Function counter (счетчик от функции) – метрика, которая отслеживает монотонно возрастающее значение (вещественное число). Разработчик предоставляет способ получения значения счетчика, система мониторинга самостоятельно проверяет значение.
Function timer (таймер от функции) – метрика, которая отслеживает два монотонно возрастающих значения: число событий и общее длительность этих событий. Разработчик предоставляет способ получения значения счетчика событий и их общей длительности, система мониторинга самостоятельно проверяет эти значения.
Идентификаторы метрик:
Метрики имеют уникальный идентификатор, состоящий из следующих элементов: - Имя; - Набор тегов (тегом является пара из ключа и значения), набор может быть пустым.
Дополнительными свойствами идентификаторов являются: - Описание; - Единица измерения.
По умолчанию всем метрикам добавляется тег universe.cluster.node, значением которого является ID текущего узла кластера Universe.
Текущие метрики приложения Universe MDM (список может изменяться):
workflow.task.complete.time– таймер, который собирает длительность времени выполнения пользовательских задач бизнес-процессов (время между созданием задачи и ее завершением).У метрики присутствует тег
process.definition.id– ID бизнес-процесса в модели бизнес-процессов.
http.requests.time– таймер, который собирает длительность обработки HTTP-запросов.Метрики имеют теги:
http.method– метод HTTP (GET, POST, DELETE и т.д.);http.path.template– шаблон пути запроса, например, /universe-backend/api/v2/data/model/nested-entities/{id};http.response.code– HTTP код статуса ответа (200, 500 и т.п.).
database.connection.pool.total– датчик количества существующих подключений к БД.database.connection.pool.available– датчик количества неиспользуемых подключений к БД.Метрики имеют теги:
pool.name– имя пула подключений;xa– значение true, если пул поддерживает распределенные транзакции (используется Hikari для этого пула), и false, если пул не поддерживает распределенные транзакции (используется Bitronix для этого пула).
data.import.xlsx.total.time– таймер, который отслеживает длительность обработки запросов импорта записей через XLSX.data.import.xlsx.average.time.per.record– таймер, который отслеживает длительность обработки запросов импорта записей через XLSX в среднем на одну запись.universe.async.rare.task.total– счетчик числа задач, выполненных в AsyncRareTaskExecutor.
Метрики Micrometer:
Метрики JVM – различные метрики о состоянии виртуальной машины Java: количество тредов, работа сборщика мусора, используемая память и т.п;
Метрики логирования – число записей в лог по уровню (поддерживаются и Logback из стандартной поставки, и Log4j из кастомных сборок);
Метрики Tomcat – различные метрики о состоянии Tomcat;
Метрики системы – различные метрики о состоянии системы: загруженность CPU и т.п.