Измерить время выполнения задачи в java-приложении с помощью клиентской prometheus-библиотеки micrometer
Есть объект MyObj myObj, при создании которого:
- в поле date записывается
myObj.date = new Date(); - данный объект ложится в мапу
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