Я хочу измерить, сколько времени занимает обработка некоторых данных: мое приложение считывает эти данные из определенного источника с фиксированной скоростью. Перед каждым кругом я храню Instant.now()
. Я читаю данные, добавляя эту временную метку к каждой записи. Данные сохраняются, преобразуются, и непосредственно перед отправкой через WebSockets я хочу измерить продолжительность между now()
и этой начальной отметкой времени.
Я пытался
long millis = Duration.between(dataEntry.getReceivedTimestamp(), Instant.now()).toMillis();
LOG.info(millis + "ms");
registry.timer("processingDuration").record(millis, TimeUnit.MILLISECONDS);
, но визуализация этого позволяет мне использовать только processingDuration_seconds_count
, _max
и _sum
. count
и sum
увеличиваются со временем (конечно), max
является постоянным большую часть времени. Итак, как мне увидеть более высокие и более низкие плато нагрузки? Я попытался, по крайней мере, irate(processingDuration_seconds_sum[10m])
увидеть скачки, но поскольку irate()
использует только две точки данных, я все еще не могу легко определить более длительные периоды высокой нагрузки. Плюс: значение составляет около 0,6 на графике, в то время как зарегистрированное мс составляет около 5-10, поэтому я теряю фактическое значение здесь.
Поэтому я попытался использовать вместо него Gauge
- что Предполагается, что допускаются как увеличивающиеся, так и уменьшающиеся значения:
registry.gauge("processingDurationGauge", millis);
Я думал, что это будет go вверх и вниз в пределах диапазона регистрируемых мс, но оно постоянно 92.
Как я измеряю в течение времени данных?