У нас есть эта причудливая система мониторинга, в которую наши сервисы весенней загрузки отправляют метрики в приточную БД с микрометром.Есть хороший интерфейс для grafana, но проблема в том, что мы сейчас находимся на этапе, когда нам нужно иметь некоторые из этих метрик в других сервисах, чтобы рассуждать.Вся система была создана моим предшественником, и мое нынешнее понимание этого практически равно нулю.Я могу добавлять и публиковать новые метрики, но я не могу за всю свою жизнь получить что-либо из .
Вот краткий пример: наш шлюз увеличивает счетчик для каждого изображения, котороекамера отправляет к нему.Определение счетчика выглядит следующим образом:
private val imageCounters = mutableMapOf<String, Counter>()
private val imageCounter = { camera: String ->
imageCounters.getOrPut(camera) {
registry.counter("gateway.image.counter", "camera", camera)
}
И счетчик увеличивается в коде так:
imageCounter("placeholder-id").increment()
Теперь мы улучшаем наш биллинг и сервис биллингаНеобходимо знать, сколько изображений для определенной камеры прошло через шлюз.Естественно, первое, что я пытаюсь сделать, выглядит следующим образом:
class MonitoringService(val metrics: MeterRegistry) {
private val log = logger()
private val imageCounters = mutableMapOf<String, Counter>()
private val imageCounter = { camera: String ->
imageCounters.getOrPut(camera) {
metrics.counter("gateway.image.counter", "camera", camera)
}
}
fun test() {
val test = imageCounter("16004").count()
val bugme = true
log.info("influx test: $test")
}
}
Есть две проблемы с этим: во-первых, он всегда возвращает ноль, поэтому, очевидно, я делаю это неправильно.Я просто не могу понять, что это такое.Во-вторых, даже если бы это возвращало разумное значение, я не вижу способа ограничить это временем (мне обычно нужно количество изображений, загруженных в течение текущего месяца).
Меня беспокоит то, чточто хотя я могу найти много документации о том, как размещать данные с помощью микрометра, я не могу найти никакой документации о том, как делать запросы.Микрометр предназначен только для публикации данных мониторинга, но не для их запроса?метод .getOrPut () будет указывать, что он может выполнять и то, и другое, но поскольку запрос данных, насколько я могу судить, кажется недокументированным, это может быть неправильным представлением с моей стороны.что я попробую позже, но в конце концов я не хочу, чтобы несколько компонентов в моем приложении делали одно и то же только потому, что я не знаком с инструментами, которые я унаследовал.