запрос данных с помощью микрометра - PullRequest
0 голосов
/ 05 октября 2018

У нас есть эта причудливая система мониторинга, в которую наши сервисы весенней загрузки отправляют метрики в приточную БД с микрометром.Есть хороший интерфейс для 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 () будет указывать, что он может выполнять и то, и другое, но поскольку запрос данных, насколько я могу судить, кажется недокументированным, это может быть неправильным представлением с моей стороны.что я попробую позже, но в конце концов я не хочу, чтобы несколько компонентов в моем приложении делали одно и то же только потому, что я не знаком с инструментами, которые я унаследовал.

1 Ответ

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

InfluxMeterRegistry - это StepMeterRegistry, поэтому созданный Counter из него - StepCounter.StepCounter.increment() увеличивает счет на текущем шаге, но StepCounter.count() вернет счет на предыдущем шаге.Вот почему вы видите 0 с count(), хотя вы уже вызывали increment() несколько раз.Вы можете увидеть его на следующем шаге, и шаг по умолчанию равен 1 минуте, поэтому вам нужно подождать 1 минуту, чтобы увидеть его.

См. Следующий тест, чтобы понять, как он работает: https://github.com/izeye/sample-micrometer-spring-boot/blob/influx/src/test/java/com/izeye/sample/InfluxMeterRegistryTests.java

...