Kubernetes Blog на русском
Подписаться
Создание пользовательского экспортера метрик для Kubernetes
Kubernetes масштабируется на основе ЦП и памяти, но реальные потребности часто требуют пользовательских метрик, таких как глубина очереди или активные соединения. Экспортер метрик Prometheus заполняет этот пробел, предоставляя состояние приложения в виде обычного текста в конечной точке HTTP /metrics для сбора Prometheus.Экспортеры могут быть автономными службами или встраиваться непосредственно в приложение, в зависимости от источника данных и контроля над кодом приложения. Prometheus ожидает метрики в определенных форматах: счетчики для постоянно увеличивающихся значений, датчики для колеблющихся значений и гистограммы для распределений. Имена метрик должны следовать четкому соглашению " __ " snake_case.
Создание экспортера на Go включает инициализацию модуля, настройку библиотеки клиента Prometheus и регистрацию метрик, таких как счетчики, датчики и гистограммы. Затем эти метрики обновляются циклом опроса, который считывает данные из источников данных вашего приложения. HTTP-сервер предоставляет конечную точку /metrics, а также конечную точку /healthz для проверок работоспособности.
Экспортер упаковывается в минимальный образ контейнера с использованием многоступенчатой сборки Docker, обеспечивая небольшой размер. Развертывание в кластере Kubernetes включает Deployment для управления подами и Service для предоставления стабильного адреса для Prometheus.
Prometheus обнаруживает эти метрики через ServiceMonitor при использовании Prometheus Operator или через обнаружение на основе аннотаций в шаблоне Pod. Проверка включает проверку страницы целей Prometheus, чтобы убедиться, что экспортер находится в состоянии "UP", и запрос метрик в браузере выражений.
Эта основа позволяет использовать автоматическое масштабирование с помощью HorizontalPodAutoscaler, который использует адаптер метрик (например, Prometheus Adapter) для интеграции пользовательских метрик с Kubernetes Custom Metrics API. Это позволяет рабочим нагрузкам масштабироваться на основе бизнес-значимых сигналов, а не только базового использования ресурсов.