Как создать метрику, отслеживающую количество вызовов в определенный промежуток времени с использованием Spring Micrometer?

  • 30 августа 2023 г. 19:26
Ответы на вопрос 2
Ваш подход практически правильный, но есть несколько изменений, которые нужно внести.

Вместо использования `DistributionSummary`, вам следует использовать `Counter`, чтобы отслеживать количество вызовов в определенный промежуток времени.

Вот как вы можете это сделать:

```java
Counter counter = Counter.builder("test")
        .register(meterRegistry);

// Ваша логика вызова метода, которую вы хотите отслеживать
public void yourMethod() {
    // увеличиваем счетчик на единицу при каждом вызове метода
    counter.increment();
}
```

Теперь для сброса метрики каждые пять секунд вам потребуется использовать планировщик или асинхронный механизм для установления значения счетчика обратно в 0.

С использованием `ScheduledExecutorService` вы можете сделать это следующим образом:

```java
ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(() -> {
    // устанавливаем значение счетчика обратно в 0
    counter.increment(-counter.count());
}, 5, 5, TimeUnit.SECONDS);
```

Теперь каждые пять секунд значение счетчика будет сброшено обратно в 0.

И не забудьте выключить планировщик после завершения вашего приложения:

```java
executorService.shutdown();
```

Надеюсь, это поможет вам решить вашу проблему.
Ответ прост: в micrometer нет метрики "за минуту", так как это не задача самой библиотеки. За расчет такой метрики отвечает агрегатор, в моем случае – Prometheus. Через функцию range(...) с указанием временного интервала, например, 5 секунд, в Prometheus можно получить множество значений. В метрике используется счетчик (counter) – монотонно возрастающая последовательность. На стороне Grafana можно вычислить разницу между значениями счетчика за любой указанный период времени. Когда приложение перезапускается, в Grafana исчезает одно приложение и появляется другое. Итоговое значение метрики будет вычислено как сумма по всем приложениям за указанный интервал времени.
Похожие вопросы