Service discovery
Тема дорожной карты · Prometheus
Обнаружение сервисов в Prometheus обеспечивает автоматическое обнаружение и настройку целей опроса без необходимости вручную обновлять prometheus.yml при изменении инфраструктуры. Prometheus поддерживает широкий спектр интеграций обнаружения сервисов: kubernetes_sd_configs, consul_sd_configs, ec2_sd_configs, file_sd_configs, dns_sd_configs и многие другие — каждая из них периодически запрашивает соответствующую систему на наличие доступных целей. Обнаруженные цели поставляются с метками метаданных (с префиксом __meta_), описывающими свойства цели — такие как пространство имён пода Kubernetes, аннотации и порт контейнера — которые затем можно отобразить в метки Prometheus через relabel_configs. Механизм file_sd_configs предоставляет общий вариант обнаружения сервисов, считывая списки целей из JSON- или YAML-файлов, которые могут обновляться внешними инструментами без перезапуска Prometheus. Обнаружение сервисов — одна из наиболее мощных возможностей Prometheus для динамических облачно-ориентированных сред: оно устраняет дрейф конфигурации и обеспечивает охват мониторингом в соответствии с изменениями инфраструктуры.
Как это работает
Service discovery: scrape_configs: определяет job_name, static_configs или service discovery (kubernetes_sd_configs, consul_sd_configs, dns_sd_configs и т.д.), scrape_interval (дефолт 15s), scrape_timeout, metrics_path (дефолт /metrics), scheme (http/https), basic_auth/bearer_token/tls_config для auth. relabel_configs переписывает список таргетов до scrape. metric_relabel_configs — после scrape.
Когда применять
Service discovery — в динамических средах (k8s, Consul, EC2 tags); статические списки гниют быстро. Подгоняйте scrape_interval под нужды alert resolution (быстрее = больше CPU + storage). Длиннее scrape_interval (60s+) — для медленно меняющихся экспозиций (node disk); 15s-точность не нужна. scrape_timeout < scrape_interval.
Типичные ошибки
Ловушки Service discovery: scrape_timeout равен scrape_interval (timeout крадёт следующий scrape); скрейп эндпойнтов, отвечающих > scrape_interval (каскад timeouts); не скрейпите up{...} для каждого job (без него нельзя алертить на "scrape валится" — к счастью Prometheus автогенерит эту метрику).