Каков ваш опыт работы с Prometheus для мониторинга?

Ответ

Работал с Prometheus как с системой мониторинга и оповещения для Java-приложений, в основном в стеке Spring Boot + Micrometer.

Основные задачи и реализация:

  1. Интеграция и экспорт метрик: Использовал библиотеку Micrometer как фасад для сбора и экспорта метрик в формате, понятном Prometheus.

    // Добавление зависимости Micrometer Registry для Prometheus
    // (например, micrometer-registry-prometheus)
    
    @Bean
    MeterRegistryCustomizer<PrometheusMeterRegistry> metricsCommonTags() {
        return registry -> registry.config()
                .commonTags("application", "user-service", "region", "eu-west-1");
    }
  2. Типы собираемых метрик:

    • JVM-метрики: Использование памяти, загрузка процессора, сборки мусора.
    • Метрики приложения: Тайминги HTTP-запросов (с помощью @Timed или MeterRegistry), количество активных транзакций, размер очереди.
    • Кастомные бизнес-метрики: Количество обработанных заказов, ошибок валидации.
      Counter.builder("orders.processed")
             .description("Total number of processed orders")
             .tag("status", "success")
             .register(meterRegistry)
             .increment();
  3. Настройка и визуализация:

    • Конфигурация scrape_configs в prometheus.yml для сбора метрик с эндпоинта /actuator/prometheus.
    • Создание дашбордов в Grafana для визуализации ключевых метрик и состояния системы.
    • Настройка правил алертинга в Alertmanager (например, при высокой частоте ошибок 5xx или нехватке памяти).

Ответ 18+ 🔞

Да ты посмотри, какой у нас тут крутой эксперт по мониторингу подъехал! Работал, значит, с Prometheus, как с системой мониторинга и оповещения для Java-приложений. В основном, конечно, в связке Spring Boot + Micrometer — куда ж без этого, классика же, блядь.

Чем конкретно занимался, спросишь? А вот чем, в рот меня чих-пых:

  1. Интеграция и экспорт метрик: Использовал библиотеку Micrometer как такой себе фасад, чтобы собирать метрики и вываливать их в формате, который Prometheus схавает без вопросов.

    // Добавление зависимости Micrometer Registry для Prometheus
    // (например, micrometer-registry-prometheus)
    
    @Bean
    MeterRegistryCustomizer<PrometheusMeterRegistry> metricsCommonTags() {
        return registry -> registry.config()
                .commonTags("application", "user-service", "region", "eu-west-1");
    }

    Всё, приложение теперь как миленькое плюётся метриками на эндпоинт /actuator/prometheus. Красота!

  2. А что за метрики собирал? Да всякую хуйню, но полезную!

    • JVM-метрики: Сколько памяти жрёт, как CPU нагнулся, сколько раз garbage collector плакал в подушку.
    • Метрики приложения: Засекал, сколько времени HTTP-запросы ползают (@Timed — наш лучший друг), сколько транзакций висит, какая очередь накопилась.
    • Кастомные бизнес-метрики: Вот это уже интереснее! Считал, сколько заказов обработали, сколько раз пользователь криво форму заполнил.
      Counter.builder("orders.processed")
             .description("Total number of processed orders")
             .tag("status", "success")
             .register(meterRegistry)
             .increment();

      Щёлк — и счётчик подскочил. Магия, ёпта!

  3. Настройка и визуализация: А тут начинается настоящий цирк, блядь.

    • В prometheus.yml тыкаешь в scrape_configs, чтобы этот жадный Prometheus приползал на твой эндпоинт и высасывал все данные. Главное — не забыть, а то сидишь, смотришь на пустые графики и думаешь: "Чё за хуйня? Ничего не работает!".
    • Потом лезешь в Grafana, начинаешь клепать дашборды. Подключаешь источник, таскаешь графики, раскрашиваешь — в итоге получается такая красивая картинка, на которую можно смотреть часами, как в камин, только полезнее.
    • А кульминация — это настройка алертов в Alertmanager. Прописываешь правила: "Если ошибок 5xx больше, чем три в час — бей колоколом! Если память JVM на 95% — ори на всю деревню!". Настраиваешь, чтобы уведомления летели в Slack, Telegram или, на худой конец, на почту. И вот сидишь ты, такой довольный, а потом ночью раз — и тебе сообщение: "ALERT! High error rate!". Волнение ебать, просыпаешься в холодном поту, а это просто тестировщик нагрузку гоняет, пидарас шерстяной.

Вот такая, блядь, работа. Вроде и не ракетостроение, но когда всё настроено и работает — душа поёт. А когда алерты срабатывают на ровном месте — хочется этот весь мониторинг ебнуть об стену. Но в целом — вещь архиполезная, без неё как без рук в продакшене.