Шаблонные URL-адреса в конечной точке Prometheus с Jersey и Micrometer

Я пытаюсь интегрировать микрометр в приложение Spring, созданное с использованием Jersey REST. Я использую Spring Boot 1.5.

Когда у меня есть чистые API-интерфейсы Spring REST (с использованием веб-аннотаций Spring), результаты prometheus отображаются, как показано ниже

http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/v2/api/greeting/{name}",} 18.0
http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/v2/api/greeting/{name}",} 0.39309228

Но для API, созданных с использованием Джерси, метрики Prometheus не являются шаблонными.

http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/v1/api/greeting/Jersey_1",} 1.0
http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/v1/api/greeting/Jersey_1",} 0.043685372
http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/v1/api/greeting/Jersey_2",} 1.0
http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/v1/api/greeting/Jersey_2",} 0.006280183
http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/v1/api/greeting/Jersey_3",} 1.0
http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/v1/api/greeting/Jersey_3",} 0.006258448
http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/v1/api/greeting/Jersey_4",} 1.0
http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/v1/api/greeting/Jersey_4",} 0.006635791
http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/v1/api/greeting/Jersey_5",} 1.0
http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/v1/api/greeting/Jersey_5",} 0.006313993

Похоже, есть открытая проблема с микрометром, указанным на https://github.com/micrometer-metrics/micrometer/issues/486, который вызывает эту проблему с джерси. Средство указано на странице https://github.com/micrometer-metrics/micrometer/issues/486#issuecomment-372446968. Когда я добавляю spring.jersey.type = filter, ни один из API-интерфейсов актуатора не работает. Ни одна из конечных точек прометея не работает.

Я не хочу, чтобы URL-адреса без шаблона появлялись в конечной точке Prometheus. Поскольку мой API может иметь бесконечно много комбинаций (много имен в приведенных выше примерах), он будет создавать большие данные метрик, и, в свою очередь, сервер prometheus будет иметь тонны метрик.

Любая помощь здесь приветствуется.


person user1401472    schedule 05.10.2018    source источник


Ответы (1)


Я создал образец, чтобы воспроизвести проблему из вашего описания но воспроизвести не удалось. Я вижу, что шаблоны URI используются в конечной точке очистки Prometheus (/management/prometheus) следующим образом:

# HELP http_server_requests_seconds  
# TYPE http_server_requests_seconds summary
http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/prometheus",} 1.0
http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/prometheus",} 0.062559545
http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/hello/{name}",} 1.0
http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/hello/{name}",} 0.02323862
http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="UNKNOWN",} 1.0
http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="UNKNOWN",} 0.050339909
# HELP http_server_requests_seconds_max  
# TYPE http_server_requests_seconds_max gauge
http_server_requests_seconds_max{exception="None",method="GET",status="200",uri="/prometheus",} 0.062559545
http_server_requests_seconds_max{exception="None",method="GET",status="200",uri="/hello/{name}",} 0.02323862
http_server_requests_seconds_max{exception="None",method="GET",status="200",uri="UNKNOWN",} 0.050339909

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

ОБНОВИТЬ:

Судя по комментарию, отключение метрик Web MVC даст более чистый результат:

# HELP http_server_requests_seconds  
# TYPE http_server_requests_seconds summary
http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/hello/{name}",} 1.0
http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/hello/{name}",} 0.032691223
# HELP http_server_requests_seconds_max  
# TYPE http_server_requests_seconds_max gauge
http_server_requests_seconds_max{exception="None",method="GET",status="200",uri="/hello/{name}",} 0.032691223

Я также обновил образец в следующем коммите: https://github.com/izeye/sample-micrometer-spring-boot/commit/14ff838c48cea0c38cf12eeec8e7b211dffe2c50

person Johnny Lim    schedule 06.10.2018
comment
привет спасибо за вашу помощь. Единственное отличие, которое я вижу, это микрометрическая версия. Я использую 1.0.3, тогда как ваш проект использует 1.0.6. Есть одна проблема, которую я наблюдал с 1.0.6, даже если я мог видеть ее, используя ваш проект, это то, что он объединяет URL-адреса с НЕИЗВЕСТНЫМ. http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="UNKNOWN",} 1.0 - person user1401472; 07.10.2018
comment
@ user1401472 Спасибо за отзыв! Я обновил свой ответ, чтобы решить эту проблему. - person Johnny Lim; 08.10.2018
comment
Возможно, вы были правы, отключив метрики веб-mvc. Но моя проблема в том, что я вообще не вижу шаблонных URL-адресов. Итак, в моем примере - я не вижу метрики с URI как / v1 / api / welcome / {name}. Позвольте мне углубиться в это, чтобы выяснить различия. - person user1401472; 08.10.2018
comment
Отсутствует зависимость микрометр-jersey2 !. Спасибо большое за вашу помощь. - person user1401472; 08.10.2018