Что такое Auto Discovery в Prometheus?

«Что такое Auto Discovery в Prometheus?» — вопрос из категории Мониторинг и логирование, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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, где поды постоянно создаются и удаляются.