Ответ
Auto Discovery (автоматическое обнаружение) в Prometheus — это механизм, позволяющий динамически находить и добавлять цели для сбора метрик без необходимости ручного редактирования конфигурационного файла prometheus.yml и перезагрузки сервиса. Он интегрируется с системами оркестрации и облачными платформами.
Как это работает:
Prometheus периодически опрашивает API внешнего сервиса (источника обнаружения) для получения списка доступных целей (targets). Затем он применяет правила перемаркировки (relabel_configs) для фильтрации этих целей и преобразования их метаданных в стандартные метки Prometheus.
Пример конфигурации для автоматического обнаружения подов в Kubernetes:
scrape_configs:
- job_name: 'kubernetes-pods'
# Используем механизм обнаружения для Kubernetes Pods
kubernetes_sd_configs:
- role: pod
# Правила перемаркировки для фильтрации и аннотаций
relabel_configs:
# Оставляем только поды с аннотацией prometheus.io/scrape=true
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: true
# Извлекаем путь для scrape из аннотации
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
target_label: __metrics_path__
regex: (.+)
# Извлекаем порт из аннотации
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_port]
action: replace
regex: (d+)
replacement: $1
target_label: __address__
Поддерживаемые источники обнаружения (service discovery): Kubernetes, Consul, AWS EC2, Azure, Google Cloud, Docker Swarm, файлы (file_sd). Преимущества: Значительно упрощает управление мониторингом в динамических средах, таких как Kubernetes, где поды постоянно создаются и удаляются.