Как дать разные метрики метки для разных контроллеров в Spring Boot
В Spring Boot 2.0.2 возможно использование одного bean-компонента meterRegistry для всех контроллеров, при этом каждому контроллеру присваивается свой набор общих тегов. Например в моем Application.java
Я определяю следующее.
@Bean
public MeterRegistryCustomizer<PrometheusMeterRegistry> metrics() {
return registry -> registry.config().commonTags("messageType", "x");
}
Затем, когда я регистрирую любые счетчики на registry
у них будет это messageType = x
, Можно ли определить в этом бине, что commonTags
будет регистрироваться, когда любая функция будет выполнена в рамках Контроллера?
Если так, как? Это нужно сделать внутри самого контроллера?
1 ответ
Для счетчиков, которые зарегистрированы в определенном контексте, на самом деле нет способа автоматически получить тег. Краткий ответ: вам нужно будет добавить тег вручную.
Вы могли бы использовать MeterFilter
проверить Meter
s, поскольку они зарегистрированы и добавляют теги там на основе имени счетчика.
Помните, что теги лучше всего использовать для представления подмножества измерений:
db.request.total{queryType=userLookup}
db.request.total{queryType=groupLookup}
db.request.total{queryType=userUpdate}
Это рекомендуемый способ использования тегов, потому что тогда вы можете определить, сколько запросов выполняется, и какой путь может быть оптимизирован для скорости.
db.request.total{caller=controller}
db.request.total{caller=notAController}
В этом случае разбивка метрики по вызывающей стороне не будет полезна.