Что такое микрометр?
Микрометр — это простой фасад для сбора метрик внутри 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 onecounter.increment(2.5); |
Создание таймера
Таймер может быть создан аналогичным образом:
|
1
|
Timer timer = Timer.builder("my.timer").register(registry); |
Здесь мы пропустили необязательные параметры, такие как теги или описание.
Теперь мы можем добавить метрики синхронизации к нашему таймеру, используя метод record ():
|
1
2
3
4
5
6
7
|
// recording execution time of codetimer.record(() -> { // do something });// record a precomputed valuetimer.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, являются их собственными. |