Микрометр не работает при использовании в отдельных сервисах

На данный момент у меня есть два нестандартных весенних артефакта — metrics-util и web-utils. metrics-util содержит все функции, связанные с измерением метрик, такие как веб-фильтр для расчета метрик всех остальных контроллеров. Web-utils использует некоторые функции из metrics-util для измерения показателей внутри функции.

Моя основная программа Spring вызывает внутри себя функции веб-утилиты. И я использую одно и то же имя с разными тегами. Проблема, с которой я столкнулся, заключается в том, что я вижу метрики и различные теги в /actuator/metrics/{metric_name}, но в конечной точке, где выполняется очистка Prometheus, отображается только первый экземпляр имени метрики.

Версия микрометра:

implementation 'io.micrometer:micrometer-core:1.12.3'
implementation 'io.micrometer:micrometer-registry-prometheus:1.12.3'

Моя конфигурация реестра:

@Configuration
@ComponentScan(basePackages = ["co.hyperface.ark.metricsutil.*"])
class BaseMetricsConfig {

    @Bean
    MeterRegistry meterRegistry() {
        return new PrometheusMeterRegistry(PrometheusConfig.DEFAULT)
    }
}

Как я внедряю в свою программу:

class MetricsUtil {

    private MeterRegistry meterRegistry

    @Autowired
    MetricsUtil (MeterRegistry meterRegistry) {
        this.meterRegistry = meterRegistry
    }
}

Ожидаемый результат:

Для любой конечной точки сначала активируется веб-фильтр, поэтому его callcount{call_type='rest_controller'} должно увеличиться, затем, поскольку я вызываю функцию веб-утилиты внутри этого контроллера, количество вызовов callcount{call_type='external'} должно быть увеличено.

Но в конечной точке очистки я получаю только callcount{call_type='rest_controller'}. но я могу увидеть их обоих на /actuator/metrics/callcount Заранее спасибо.

Я только что заметил, что микрометр не работает на разных сервисах с одинаковым названием метрики, хотя у них разные теги.

RektAngle 30.04.2024 09:18
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
1
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

metrics-util содержит все функции, связанные с измерением метрик, такие как веб-фильтр для расчета метрик всех остальных контроллеров. Web-utils использует некоторые функции из metrics-util для измерения показателей внутри функции.

Вы знаете, что если вы добавите Spring Boot Actuator, вы получите это бесплатно?

И я использую одно и то же имя с разными тегами. Проблема, с которой я столкнулся, заключается в том, что я вижу метрики и различные теги в /actuator/metrics/{metric_name}, но в конечной точке, где выполняется очистка Prometheus, отображается только первый экземпляр имени метрики.

Это не рекомендуется сервером Prometheus и невозможно с клиентом Prometheus. Пожалуйста не делай этого. Если теги разные, это другая метрика. Если они одинаковые, теги должны быть одинаковыми. Если у вас нет значения или вы не знаете его, вы всегда можете использовать null, none, na, unknown и т. д.

Решение: вы можете удалить «metrics-utils» и «web-utils», добавить актуатор Spring Boot, который будет все это делать (см. метрику http_server_requests).

Другие вопросы по теме