Что такое микрометр?
Микрометр — это простой фасад для сбора метрик внутри 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, являются их собственными. |