Статьи

Сбор метрик приложения с помощью микрометра

Что такое микрометр?

Микрометр — это простой фасад для сбора метрик внутри Java-приложений независимым от производителя способом. Вы можете думать о SLF4J для метрики. Микрометр имеет встроенную поддержку многих различных метрик, включая Atlas, Datadog, Elastic, JMX и многое другое. В этом посте мы увидим, как мы можем собирать метрики с помощью Micrometer в приложениях Java.

Микрометрические зависимости

Сначала нам нужно добавить микрометрическую зависимость в наш проект. Обратите внимание, что вам нужно выбрать правильную зависимость на основе метрики, которую вы хотите использовать.

Здесь мы выбираем JMX, поэтому нам нужен артефакт micrometer-registry-jmx.

1
2
3
4
5
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-jmx</artifactId>
    <version>1.2.0</version>
</dependency>

Например: если вы хотите использовать Elasticsearch вместо JMX, вам нужно добавить микрометр-реестр-эластичный.

Создание MeterRegistry

Прежде чем мы сможем начать сбор метрик, нам нужно создать MeterRegistry. MeterRegistry используется для создания счетчиков, которые затем собирают фактические метрики.

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

1
MeterRegistry registry = new SimpleMeterRegistry();

Если мы вместо этого хотим экспортировать данные метрик в JMX, нам нужно создать JmxMeterRegistry.

1
2
3
4
5
6
MeterRegistry registry = new JmxMeterRegistry(new JmxConfig() {
    @Override
    public String get(String s) {
        return null;
    }
}, Clock.SYSTEM);

Метод get () переданного экземпляра JmxConfig может использоваться для предоставления дополнительных значений конфигурации. Нам не нужна эта функция в нашем простом примере, поэтому мы просто возвращаем ноль.

Если мы хотим экспортировать наши метрики в несколько бэкэндов мониторинга, мы можем использовать CompositeMeterRegistry. CompositeMeterRegistry передает данные в один или несколько других реестров, что позволяет публиковать метрики в нескольких бэкэндах метрик.

Например:

1
2
3
CompositeMeterRegistry registry = new CompositeMeterRegistry();
registry.add(new JmxMeterRegistry(..));
registry.add(new ElasticMeterRegistry(..));

метры

Meter — это микрометрический интерфейс для сбора метрик. Примером реализации Метра являются Счетчик, Таймер и Датчик.

Создание счетчика

Мы можем создать Counter, используя простой API-интерфейс конструктора:

1
2
3
4
5
6
Counter counter = Counter
        .builder("my.counter")
        .description("counts something important")
        .tag("environment""test")
        .tag("region""us-east")
        .register(registry);

Это создает счетчик с именем my.counter и добавляет его в реестр с именем MeterRegistry. Мы также можем добавить один или несколько тегов и необязательное описание к нашему счетчику. Счетчики обычно создаются один раз, а затем используются несколько раз.

Чтобы увеличить значение счетчика, мы можем вызвать метод increment ():

1
2
counter.increment(); // increment by one
counter.increment(2.5);

Создание таймера

Таймер может быть создан аналогичным образом:

1
Timer timer = Timer.builder("my.timer").register(registry);

Здесь мы пропустили необязательные параметры, такие как теги или описание.

Теперь мы можем добавить метрики синхронизации к нашему таймеру, используя метод record ():

1
2
3
4
5
6
7
// recording execution time of code
timer.record(() -> {
    // do something 
});
 
// record a precomputed value
timer.record(Duration.ofMillis(123));

Просмотр результатов в JConsole

Поскольку мы используем JmxMeterRegistry, наша метрическая информация может быть доступна через JMX. Для этого мы можем использовать JConsole, который можно запустить, выполнив jconsole в каталоге <jdk> / bin . После подключения к процессу Java-приложения вы можете найти текущие показатели приложения на вкладке MBeans :

Конечно, вы должны использовать другой инструмент для просмотра метрик, если вы используете другую MetricsRegistry. Например, вы можете использовать Kibana, если вы используете ElasticMeterRegistry.

Резюме

Микрометр предоставляет простой в использовании фасад, который можно использовать в приложениях Java для сбора метрик приложений. Затем эта метрическая информация может быть экспортирована во многие различные бэкэнд-технологии (включая Elasticsearch и JMX). Вы можете найти исходный код для примеров на GitHub .

Опубликовано на Java Code Geeks с разрешения Михаэля Шаргага, партнера нашей программы JCG. Смотрите оригинальную статью здесь: Сбор метрик приложения с помощью микрометра

Мнения, высказанные участниками Java Code Geeks, являются их собственными.