Ответ
Да, использовал. Сбор метрик (application metrics) — это ключевая практика для мониторинга здоровья, производительности и бизнес-показателей приложения. В Java экосистеме стандартом де-факто долгое время была библиотека Dropwizard Metrics (теперь поддерживается как Eclipse MicroProfile Metrics). Современной альтернативой является Micrometer, который предоставляет vendor-neutral фасад.
Основные типы метрик:
| Тип | Описание | Пример использования |
|---|---|---|
| Counter | Монотонно возрастающий или убывающий счётчик. | Количество HTTP-запросов, успешных транзакций, ошибок. |
| Gauge | Мгновенное значение, которое можно измерить. | Размер очереди сообщений, использование heap memory, число активных сессий. |
| Timer | Измеряет продолжительность операции и её частоту (rate). | Время выполнения HTTP-запроса, время запроса к БД. |
| Histogram | Статистика распределения значений в потоке данных. | Распределение размера ответа, времени отклика (перцентили). |
| Meter | Измеряет частоту (rate) событий. | Количество запросов в секунду (RPS). |
Пример с Dropwizard Metrics:
import com.codahale.metrics.*;
import java.util.concurrent.TimeUnit;
public class OrderService {
private static final MetricRegistry registry = new MetricRegistry();
// Объявляем метрики
private static final Counter orderCounter = registry.counter("orders.total");
private static final Timer orderTimer = registry.timer("orders.processing.time");
private static final Meter errorMeter = registry.meter("orders.errors.rate");
public void processOrder(Order order) {
// Используем Timer.Context для замера времени
final Timer.Context context = orderTimer.time();
try {
orderCounter.inc(); // Увеличиваем счётчик заказов
// ... бизнес-логика ...
} catch (Exception e) {
errorMeter.mark(); // Фиксируем ошибку
throw e;
} finally {
context.stop(); // Останавливаем замер времени
}
}
}
Интеграция и экспорт метрик: Собранные метрики можно экспортировать в различные системы мониторинга:
- Prometheus: Через соответствующий репортёр (
metrics-prometheus). - JMX: Для просмотра в JConsole или VisualVM.
- Graphite/InfluxDB: Для долгосрочного хранения и построения графиков.
- Логи: Периодический вывод snapshot в лог-файл.
Современный подход — Micrometer:
// Micrometer предоставляет единый интерфейс для разных бэкендов (Prometheus, Atlas, etc.)
MeterRegistry registry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);
Counter orderCounter = Counter
.builder("orders.total")
.description("Total number of processed orders")
.register(registry);
orderCounter.increment();
Использование метрик критически важно для построения observable-систем, позволяя выявлять аномалии, планировать нагрузку и понимать поведение приложения в production.