Использование таймера для пакетных операций

Я новичок в использовании микрометра и пытаюсь понять, есть ли способ использовать таймер, который также включал бы подсчет количества элементов в сценарии пакетной обработки. Поскольку я обрабатываю пакет с помощью потоков Java, я не видел очевидного способа записать таймер для каждого обрабатываемого элемента, поэтому я искал способ установить атрибут размера пакета. Один из способов, который, я думаю, может сработать, - это использовать FunctionTimer из https://micrometer.io/docs/concepts#_function_tracking_timers, но я считаю, что для этого требуется, чтобы приложение поддерживало постоянный, монотонно увеличивающийся набор значений для общего счетчика и общего времени.

Есть ли более простой способ сделать это? В конечном итоге эти данные будут переданы в New Relic. Я также пробовал устанавливать теги для размера пакета, но они, похоже, отображаются в виде строк, поэтому я не могу выполнить какое-либо агрегирование значений.

Спасибо!


person purginglisp    schedule 18.04.2019    source источник
comment
Добро пожаловать в Stack Overflow! Не могли бы вы уточнить, собираетесь ли вы рассчитать время, сколько занимает вся партия? Или сколько времени занимают отдельные элементы в партии?   -  person checketts    schedule 19.04.2019
comment
@checketts Я думаю, что любой способ может сработать, поскольку в настоящее время у нас есть микрометр, который сообщает каждые 30 секунд. Поскольку я использую Java Streams для обработки, я не видел хорошего способа рассчитать время отдельной обработки. Спасибо.   -  person purginglisp    schedule 19.04.2019


Ответы (1)


Таймер предназначен для измерения действия и, как минимум, дает два измерения: счет и продолжительность.

Таким образом, таймер отлично подойдет для вашей пакетной обработки. В потоке Java операция peek может быть хорошим местом для установки таймера.

Если вы собирались обработать 20 элементов и просто измеряли время для всех 20 элементов, вам нужно было бы создать новый Counter для измерения размера пакета. Вы можете разделить общую продолжительность таймера на ваш счетчик, чтобы получить длительность для каждого элемента, или разделить ее на общее количество таймера, чтобы получить длительность для каждого пакета.

Не стесняйтесь добавлять фрагменты кода, если вам нужна обратная связь по ним.

person checketts    schedule 19.04.2019
comment
Спасибо. Что касается использования peek, не могли бы вы пояснить, как бы вы увидели это при работе с таймером? Мне непонятно, как я могу измерить затраченное время обработки каждого элемента в потоке независимо. Моя потоковая обработка довольно проста, просто выполняю сопоставление и сбор, например: batch.stream().map(x -> x.doSomething()).map(y -> y.doSomething()).collect(toList()) Для использования как счетчика, так и таймера вы предлагаете что-то, что мы будем делать в нашем коде приложения или где собираются данные, в данном случае New Реликвия. - person purginglisp; 20.04.2019