Мониторим своё Spring Boot приложение просто и качественно

Всем привет. Это заметка не содержит никаких глубоких размышений (впрочем, как и обычно), но носит чисто прикладной характер. В этот раз поговорим о том, на сколько сейчас просто добавить разные метрики к вашему Spring Boot приложению.

Собственно, TL;DR — вопспользуемся проектом https://micrometer.io/ (в купе с https://metrics.dropwizard.io/4.0.0/), который предоставит нам vendor agnostic фасад для реализации метрик в нашем приложении.

В чём вообще новость? Год назад у нас с вами вышел Spring boot 2. В нем появилась интеграция с замечательным проектом micrometer. Прелесть этого проекта — абстракция над всеми известными игроками на рынке Метрик. Вы реализуете метрики в вашем приложении, используя micrometer, а потом можете слать метрики в любое современное известное решение: это может быть условный Datadog, или Prometheus, или даже старый добрый JMX.

Из коробки micrometer предоставляет сразу несколько типов метрик, которые вы можете захотеть использовать:

  • Counters — счетчики, которые вы используете в случае жаления посчитать количества каких-то событий (например, сколько было запросов в ваше API).
  • Gauges (не знаю русского перевода) — вы их используете, когда хотите мониторить какую-то велечину. Например, количество элементов в вашем in-memory кэше
  • Times — таймеры — тут всё понятно — используем, если хотим знать, сколько выполняется какой-то запрос, или что-то в таком духе.

Самый простой пример, как можно использовать Gauge:

AtomicInteger n = registry.gauge("numberGauge", new AtomicInteger(0));
n.set(1);
n.set(2);

Тут мы сами, время от времени, устанавливаем текущее значение для данной метрики. В API micrometer есть и сахар над этим — можно, например, просто передать ваш контейнер данных, и сказать, что вы хотите отслеживать количество элементов в этой структуре даных.

В чём вообще прелесть данного решения для реализации метрик в вашем приложении? Я бы выделил несколько пунктов:

  • Отличное API библиотеки. Есть возможность, как использовать сахар, так и иметь тонкую настройку.
  • Нет завязки на конкретное решение по приему Метрик. Если ваш DevOps отдел (ахахах, поняли, да, отдел) решит поменять Промитэус на Датадог, вы только поменяете один Jar-ник в Classpath приложения (всё остальное спринг сделает за вас).
  • Это решение зрелое — ведь оно базируется на решении по метрикам в dropwizard

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

Категории: Программирование