Измерить время выполнения задачи в java-приложении с помощью клиентской prometheus-библиотеки micrometer

Есть объект MyObj myObj, при создании которого:

  1. в поле date записывается myObj.date = new Date();
  2. данный объект ложится в мапу map.put(myObj.id, myObj);
public MyObj create(id) {
  MyObj myObj = new MyObj();
  myObj.date = new Date();
  map.add(myObj);
}

В конце, когда объект удаляется из мапы, я хочу в prometheus видеть время, которое он там пробыл, т.е. средняя продолжительность времени, в течение которого объекты MyObj находятся в мапе map.

Правильным ли будет такой подход:

private Timer timer = Metrics.timer("myobj.timer");

private remove(int id) {
  MyObj myObj = map.get(id);
  timer.record(System.currentTimeMillis() - myObj.getDate().getTime(), TimeUnit.MILLISECONDS);
  map.remove(id);
}

Если этот подход правильный, то приложение экспортирует две метрики:

myobj_timer_seconds_count = 1.169602685E9
myobj_timer_seconds_sum = -7.773605668087552E9

Непонятно, как сумма может быть отрицательной. Или я выбрал неправильный тип метрики? Используется библиотека micrometer


Ответы (0 шт):