Spring -boot metrics vs spring -cloud metrics
Я играл с метриками в spring -boot и немного запутывался, как выглядит spring -cloud, чтобы изменить поведение.
Простое минимальное приложение spring -boot 1.3.3.RELEASE с приводом и с одним контроллером:
@RestController
public class HelloController {
@Autowired
private CounterService counterService;
@RequestMapping("/hello")
public String sayHello(@RequestParam("name") String name) {
counterService.increment("counter.calls.hello");
return "Hello, " + name;
}
}
конечная точка метрики для этого приложения имеет
...
gauge.response.hello: 5,
gauge.response.metrics: 69,
gauge.response.star-star.favicon.ico: 2,
counter.status.200.star-star.favicon.ico: 4,
counter.status.200.metrics: 1,
counter.calls.hello: 5,
counter.status.200.hello: 5
который описан в spring -boot docs. Мой пользовательский счетчик (counter.calls.hello) функционирует как счетчик, как ожидалось.
Теперь, если я добавлю spring -cloud-starter-eureka (Brixton.RC1) в мой pom и ничего не изменю, конечная точка метрики имеет
...
gauge.servo.counter.calls.hello: 1,
normalized.servo.rest.totaltime: 0,
normalized.servo.rest.count: 0,
gauge.servo.rest.min: 0,
gauge.servo.rest.max: 0,
gauge.servo.response.hello: 7,
gauge.servo.response.star-star.favicon.ico: 2,
нормальные метрики MVC исчезли. Где информация кода ответа? Мой пользовательский счетчик сообщается как gauge.servo.counter.calls.hello, но он больше не работает как счетчик, он, кажется, просто показывает значение 1, даже если я сделал 5 вызовов HelloController. Небольшая отладка и поиск привели меня к изменению метрического имени счетчика на meter.calls.hello, что приводит к counter.servo.calls.hello в ответе метрик и восстанавливает функции счетчика.
Дальнейшее чтение указывает, что spring -cloud использует сервопривод по умолчанию для показателей и указывает, что если я использую java 8, я должен использовать зрителя. Добавив spring -cloud-starter-spectator к моему pom и возвращаясь к "counter.calls.hello" в качестве имени счетчика, конечная точка метрики имеет
...
counter.calls.hello(): 3,
response.hello(): 7,
response.metrics(): 9,
response.star-star.favicon.ico(): 2,
у этого есть еще менее встроенная информация о конечной точке останова, но мой пользовательский счетчик, похоже, функционирует.
Spring -cloud docs о показателях, похоже, указывают, что я должен использовать ServoRegistry, используя серво или зритель. Терминология в разделе метрик зрителя отличается. Счетчик работает не так, как я ожидал. Когда я публикую простой счетчик посещений, используя ServoRegistry, как описано в документах, я возвращаю некоторую скорость в конечной точке метрики.
Есть ли добавленное значение в серво и/или зрителе над тем, что обеспечивается spring -boot? spring -cloud docs указывают на то, что в стандартную контрольную метрику записывается больше информации, но они не отображаются в/метриках. Должен ли я просто исключить ServoMetricsAutoConfiguration и использовать реализацию spring -boot?
Ответы
Ответ 1
В соответствии с Spring Документация Cloud Brixton преимущество показателей Servo/Spectator заключается в том, что они помечены (aka dimension), а регулярные Spring Показатели загрузки являются иерархическими.
Spring Загрузка
"counter.status.200.root": 20
"counter.status.400.root": 3
Netflix
"root(method=GET,status=200,statistic=count)": 20
"root(method=GET,status=400,statistic=count)": 3
Размерные показатели позволяют больше гибкости запросов и по умолчанию запросы MVC помечены с помощью HTTP-метода, статуса HTTP, URI и исключения (если обработчик запроса сделал исключение).
К сожалению, размерные показатели Netflix, похоже, не хорошо переводится, когда они отображаются в конечной точке исполнительного механизма /metrics
, поэтому, если все, что вам нужно, это счетчики запросов по умолчанию, которые Spring Boot предоставляет в конечной точке метрики, вы будете лучше отключить конфигурацию сервопривода:
spring.metrics.servo.enabled=false