Интеграция Wildly 33 с микрометрической подсистемой

Вопрос или проблема

В настоящее время я работаю над миграцией Spring-приложения с Wildfly 26 на Wildfly 33.

Согласно документации Wildfly 33, упоминается, что MicroProfile больше не поддерживается, и предлагается переходить на Micrometer. Смотрите здесь.

Мне не удается найти достаточную документацию по такой реализации.

Я попробовал реализовать, как указано ниже,

  1. Изменения в standalone.xml
    <extension module="org.wildfly.extension.micrometer"/>
    ...
    ...
    <subsystem xmlns="urn:wildfly:micrometer:1.0" exposed-subsystems="*"/>

Согласно документации, атрибуты endpoint и step могут использоваться выше, однако их использование приводит к ошибке,

Сообщение: WFLYCTL0376: Встречен неожиданный атрибут 'endpoint'. Допустимые атрибуты: 'exposed-subsystems, name'
  1. Зависимость Micrometer
  <dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-core</artifactId>
    <version>1.13.4</version>
  </dependency>
  1. Изменения в коде
  @Inject
  protected MeterRegistry meterRegistry;
   // инкрементируем счётчик
   Counter.builder("my_counter").register(meterRegistry).increment();

Вышеуказанная инъекция возвращает NoOpRegistry (не SimpleMeterRegistry или любую другую реализацию MeterRegistry), а также из документации WFY не ясно, на каком порту и по какому адресу эти метрики доступны. Я делаю что-то не так в этой реализации?

Ответ или решение

Перевод приложения Spring с Wildfly 26 на Wildfly 33 и интеграция системы микрометрии может вызвать ряд вопросов, особенно с учетом того, что поддержка MicroProfile больше не актуальна, и необходимо перейти на Micrometer. Давайте разберем шаги, которые вы уже предприняли, и укажем на возможные ошибки и недочеты.

1. Изменения в standalone.xml

Судя по вашему сообщению, вы правильно добавили расширение для Micrometer в standalone.xml. Попробуйте изменить его следующим образом:

<extension module="org.wildfly.extension.micrometer"/>
...
<subsystem xmlns="urn:wildfly:micrometer:1.0" exposed-subsystems="metrics"/>

Имейте в виду, что в текущей версии Wildfly 33 не требуется атрибут endpoint в описании подсистемы. Атрибут exposed-subsystems просто указывает на то, какие подсистемы будут доступны. Вы можете специфицировать metrics, чтобы это обозревалось корректно.

2. Зависимость Micrometer

Добавление зависимости micrometer-core – это правильный шаг. Убедитесь, что у вас в pom.xml правильно указаны версии зависимостей. Например:

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-core</artifactId>
    <version>1.13.4</version>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId> <!-- если вам нужен Prometheus -->
    <version>1.13.4</version>
</dependency>

Если вы используете другой движок или систему, убедитесь, что в ваших зависимостях присутствует соответствующий артефакт.

3. Изменения в коде

Ваш код для инъекции MeterRegistry в порядке, но вы говорите, что injection возвращает NoOpRegistry. Это может происходить по нескольким причинам:

  • Убедитесь, что соответствующая часть вашего кода исполняется в контексте управления зависимостями CDI (например, в бине CDI).
  • Проверьте, настроена ли у вас поддержка внедрения зависимостей в вашем приложении.

В идеале, если вы все настроили правильно, инъекция должна отдавать рабочий экземпляр MeterRegistry. Если нет, вы можете получить доступ к MeterRegistry через GlobalMeterRegistry (это не рекомендуется в долгосрочной перспективе, но может помочь в отладке).

Пример инъекции:

import io.micrometer.core.instrument.MeterRegistry;

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;

@ApplicationScoped
public class MyMetrics {

    @Inject
    protected MeterRegistry meterRegistry;

    public void incrementCounter() {
        Counter.builder("my_counter").register(meterRegistry).increment();
    }
}

4. Экспонирование метрик

Относительно вопроса о порте и конечной точке, по умолчанию, Micrometer может быть интегрирован с разными системами мониторинга. Чтобы экспонировать метрики, вы можете использовать инкапсуляцию через Prometheus или другой инструмент:

Если вы используете Prometheus:

  1. Добавьте зависимость micrometer-registry-prometheus.
  2. Проверьте, что настроены следующие параметры в standalone.xml или application.properties, чтобы прописать необходимые метрики.

Предположим, что вы используете Prometheus, его конечная точка будет по умолчанию находиться по адресу /actuator/prometheus (если включены соответствующие настройки).

Заключение

Если вы выполните вышеуказанные шаги и убедитесь, что все зависимости настроены правильно, а код указан верно, ваша интеграция Micrometer должна заработать. Также рекомендую проверять логи Wildfly на наличие ошибок во время загрузки приложения, что может дать понимание, что происходит не так. Если у вас remain вопросы, уточняйте, и я помогу вам дальше!

Оцените материал
Добавить комментарий

Капча загружается...