Какой у вас опыт создания метрик в Prometheus?

«Какой у вас опыт создания метрик в Prometheus?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Имею опыт инструментирования приложений и инфраструктуры для сбора метрик в Prometheus.

Основные подходы:

  • Использование клиентских библиотек: Интеграция client_java для Spring Boot-приложений, создание кастомных метрик (Counters, Gauges, Histograms, Summaries).
  • Экспортеры: Настройка и использование официальных экспортеров (node_exporter, blackbox_exporter) и написание кастомных для специфичного ПО.
  • Service Discovery: Автоматическое обнаружение целей в Kubernetes, Consul и других системах.

Пример объявления метрики в Java (Micrometer):

@RestController
public class MyController {
    private final Counter requestCounter = Counter.builder("http.requests.total")
        .description("Total number of HTTP requests")
        .tag("handler", "my_endpoint")
        .register(Metrics.globalRegistry);

    @GetMapping("/data")
    public String getData() {
        requestCounter.increment(); // Инкремент метрики
        return "data";
    }
}

Ключевые принципы:

  • Семантика метрик: Использование осмысленных имен (http_requests_total, container_memory_usage_bytes).
  • Лейблы: Правильное применение лейблов для детализации (по path, method, status_code), избегая их избыточности.
  • Типы метрик: Выбор подходящего типа (например, Histogram для latency).