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

Ответ

Имею опыт инструментирования приложений и инфраструктуры для сбора метрик в 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).

Ответ 18+ 🔞

Да ты посмотри, какой у нас тут специалист подъехал! Опыт инструментирования, метрики, Prometheus... Ну-ка, расскажи, как ты это всё настраивал, а то я, блядь, уже представляю, как эти экспортеры по углам серверов шныряют, как тараканы.

Основные подходы, говоришь? Ну, слушай сюда, я тебе по полочкам разложу, как это у нас в народе делается.

  • Клиентские библиотеки — это наше всё. Берёшь, например, свой Spring Boot-приложение, и начинаешь в него, сука, как в новогоднюю ёлку, гирлянды из метрик вешать. client_java — наш верный пёс. Создаёшь там свои счётчики, датчики, гистограммы — всю эту ебучую механику, чтобы потом смотреть, как твоё приложение пыхтит под нагрузкой. Чистая магия, блядь, только вместо палочки — код.
  • Экспортеры — это такие стукачи. Поставил node_exporter на сервер — и он тебе, падла, сразу стучит по всем статьям: что память, что диск, что процессор. А если софтина какая-нибудь замороченная, для которой готового стукача нет, то пишешь своего. Сидишь, корячишься, а он потом тебе каждую секунду, блядь, отчёт присылает.
  • Service Discovery — чтоб не ебаться вручную. Раньше бы в конфигах прописывал каждый сервер, а сейчас, в рот меня чих-пых, Kubernetes сам тебе все подопытные подносит. Красота, ёпта! Запустил под в кубере — и он уже сам в списках целей Prometheus маячит. Умно, чёрт возьми.

Вот, смотри, как это в коде выглядит, примерно: (Блок кода не трогаю, оставляю как есть, я ж не мудак)

@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";
    }
}

Видишь? Красота! На каждый запрос счётчик тикает. Потом придёшь в Grafana, а там уже графики рисуются, жизнь кипит.

А теперь, блядь, главное, что нужно запомнить, чтобы не вышло пиздеца:

  • Имена метрик — это вам не хухры-мухры. Называй их так, чтобы через месяц самому было понятно, что эта container_memory_usage_bytes значит. А то назовёшь metric_1 — и потом сиди, гадай, что эта хуйня измеряет.
  • Лейблы — это как приправы. Бросил правильный тег (status_code="500") — и сразу видно, где ошибки сыпятся. Но кидать их овердохуища — тоже путь в ад. Каждый новый лейбл — это новые временные ряды, Prometheus взвоет, как сука.
  • Тип метрики выбирай с умом. Хочешь замерять время ответа? Бери Histogram, не еби мозги себе и системе Gauge'ом. Он тебе и квантили красивые посчитает, и вообще — умная штука.

Вот так вот, дружок. С виду — сухая телеметрия, а на деле — целое искусство, блядь. Чтобы и данные были, и система не легла от твоей же наблюдательности. Ёперный театр, в общем.