Используете микрометрический таймер для Java процессов? - PullRequest
0 голосов
/ 03 мая 2020

Я хотел бы использовать Микрометр для сбора метрик продолжительности для задачи, которая начинается в одном Java процессе и заканчивается в другом Java процессе (общение между ними через Кафку).

Я думал об этом используйте LongTaskTimer.start(), который возвращает объект LongTaskTimer.Sample, затем передайте его второму процессу вместе с сообщением Kafka, а затем используйте LongTaskTimer.Sample.stop() для записи продолжительности задачи. Но не ясно, можно ли сериализовать LongTaskTimer.Sample объекты, а также вообще может ли такой подход работать.

Возможно ли заставить работать вышеуказанный подход? Как? Если нет, то как проще всего достичь поставленной цели?

Не уверен, что это имеет значение - моя среда выполнения Spring Boot 2, и я собираю метрики для Prometheus (используя стандартный реестр Prometheus для микрометров).

1 Ответ

2 голосов
/ 03 мая 2020

Микрометр не поддерживает метрики, которые появляются в нескольких JVM. Возможны следующие варианты:

  1. Использовать несколько метрик, а затем создать представление в графане, которое будет иметь запрос, суммирующий две (или более) метрики. Вероятно, это будет не точное измерение расхода, а какое-то среднее значение, которое может дать «ощущение» того, что происходит в системе.

  2. Использовать какое-то программное обеспечение для отслеживания. Такие вещи, как Jaeger (см. здесь пример)

  3. Реализуйте поток самостоятельно (например, измеряя разницу во времени одной операции в процессе A, затем помещая это значение в сообщение kafka, затем чтение этого значения в процессе B и суммирование собственной задержки, когда это будет сделано и т. д. Последний процесс в цепочке может записать значение или что-то еще (или использовать микрометр, если хотите)
...