Шаблонные URL в конечной точке Прометея с Джерси и Микрометром - PullRequest
0 голосов
/ 05 октября 2018

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

Когда у меня есть чистые Spring REST API (с помощью Spring Web Annotations), результаты прометея отображаются как показано ниже

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, построенных с использованием Jerseyметрики прометея не являются шаблонными.

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 приводов не работает.Ни одна из конечных точек Prometheus не работает.

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

Любая помощь здесь очень ценится.

1 Ответ

0 голосов
/ 06 октября 2018

Я создал образец для воспроизведения проблемы из вашего описания , но не смог воспроизвести ее.Я вижу, что шаблоны 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

...