Как дать разные метрики метки для разных контроллеров в 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 проверить Meters, поскольку они зарегистрированы и добавляют теги там на основе имени счетчика.

Помните, что теги лучше всего использовать для представления подмножества измерений:

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}

В этом случае разбивка метрики по вызывающей стороне не будет полезна.

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