Настройка Prometheus#

В Kubernetes Prometheus получает конфигурацию сбора метрик не из файла prometheus.yml, а из ресурсов Kubernetes. Prometheus Operator обрабатывает следующие ресурсы и передает Prometheus сведения о целях сбора данных:

  • ServiceMonitor – описание сервисов, метрики которых необходимо получать;

  • Probe – описание проверок доступности через blackbox_exporter. blackbox_exporter – экспортер Prometheus, который выполняет сетевые проверки HTTP, HTTPS и TCP и публикует результат в виде метрик.

Для доступа к метрикам Automation Controller требуется токен доступа. Администратор сохраняет токен в Kubernetes Secret, а ресурсы мониторинга используют его при обращении к API контроллера. После создания ресурсов Prometheus Operator автоматически обнаруживает их и добавляет соответствующие цели в конфигурацию Prometheus.

Метрики и проверки доступности являются разными источниками данных и решают разные задачи мониторинга:

  • Если компонент публикует метрики в формате Prometheus, используйте ресурс ServiceMonitor. Prometheus периодически получает числовые показатели работы компонента, например количество заданий, загрузку ресурсов или размер очередей.

  • Если компонент не публикует собственные метрики или требуется контролировать доступность точки доступа API, используйте ресурс Probe. blackbox_exporter выполняет сетевую проверку указанного адреса и сохраняет результат проверки в виде метрик Prometheus.

Для этой схемы мониторинга используйте следующие ресурсы:

  • Automation Controller публикует метрики Prometheus и подключается через ServiceMonitor;

  • Private Automation Hub публикует метрики Prometheus и подключается через ServiceMonitor;

  • Gateway контролируйте через Probe, поскольку основная задача состоит в проверке доступности API;

  • Event-Driven Automation контролируйте через Probe, поскольку он не предоставляет собственные метрики Prometheus.

Создание токена доступа#

Для получения метрик Automation Controller Prometheus использует токен доступа с привилегиями на чтение.

Создайте токен запросом к Gateway:

curl -sk -X POST "https://<gateway_address>/api/gateway/v1/tokens/" \
  -H "Content-Type: application/json" \
  -u "<username>:<password>" \
  -d '{"description":"prometheus-monitoring","scope":"read"}'

Здесь:

  • <gateway_address> – IP-адрес или FQDN Gateway;

  • <username> – название учетной записи Astra Automation с ролью Системный администратор или Аудитор;

  • <password> – пароль учетной записи.

Сохраните значение поля token из ответа. Полученный токен потребуется при создании секрета.

Создание секрета с токеном#

Kubernetes Secret хранит токен доступа к метрикам Automation Controller. Секрет должен находиться в том же пространстве имен, что и ресурс ServiceMonitor, который на него ссылается. В примерах ниже и секрет, и ServiceMonitor находятся в пространстве имен monitoring. Если платформа Astra Automation установлена не в пространстве имен astra-automation, замените это значение в полях namespaceSelector.matchNames и в командах kubectl -n astra-automation далее на этой странице.

Для создания секрета выполните следующие действия:

  1. Создайте файл controller-token-secret.yaml:

    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: aa-controller-token
      namespace: monitoring
    type: Opaque
    stringData:
      token: "<token>"
    

    Здесь <token> – токен, созданный ранее.

  2. Создайте секрет:

    kubectl apply -f controller-token-secret.yaml
    
  3. Проверьте создание секрета:

    kubectl -n monitoring get secret aa-controller-token
    

Определение точки доступа к метрикам Automation Controller#

Перед созданием ServiceMonitor проверьте, через какой сервис доступна точка доступа метрик Automation Controller. В разных вариантах установки путь может быть доступен через сервис Gateway, сервис Automation Controller или ресурс входящего доступа.

Используйте следующий порядок:

  1. Определите сервисы и их порты:

    kubectl -n astra-automation get svc --show-labels
    kubectl -n astra-automation describe svc <service_name>
    

    Здесь <service_name> – название сервиса, через который проверяется доступ к метрикам.

  2. Проверьте путь /api/controller/v2/metrics/ через выбранный сервис:

    kubectl -n astra-automation port-forward svc/<service_name> 8443:<service_port>
    

    В другом терминале выполните запрос:

    curl -sk \
      -H "Authorization: Bearer <token>" \
      https://127.0.0.1:8443/api/controller/v2/metrics/ | head
    

    Здесь:

    • <service_port> – номер порта сервиса;

    • <token> – токен доступа с правами чтения;

    • 127.0.0.1:8443 – локальный адрес, открытый командой kubectl port-forward.

    При проверке выбранного сервиса через kubectl port-forward не заменяйте 127.0.0.1:8443 на адрес Gateway.

    Если команда возвращает строки метрик Prometheus, используйте этот сервис в ServiceMonitor. Если сервис возвращает 404 или перенаправляет запрос иначе, проверьте путь через Gateway или ресурс входящего доступа. У прямого сервиса Automation Controller также доступен путь /api/v2/metrics/ – базовый путь API контроллера, однако для единообразия с доступом через Gateway используйте в ServiceMonitor путь /api/controller/v2/metrics/.

Настройка ServiceMonitor#

Ресурс ServiceMonitor описывает сервис Kubernetes, метрики которого Prometheus должен получать. Prometheus Operator автоматически обнаруживает такие ресурсы и создает необходимые цели мониторинга.

Automation Controller#

Для сбора метрик Automation Controller укажите в ресурсе ServiceMonitor стандартный путь:

/api/controller/v2/metrics/

Prometheus Operator использует этот путь при создании цели мониторинга для сервиса Automation Controller.

Для настройки сбора метрик выполните следующие действия:

  1. Определите название сервиса Automation Controller и его метки:

    kubectl -n astra-automation get svc --show-labels
    
  2. Создайте файл controller-servicemonitor.yaml:

    ---
    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      name: aa-controller
      namespace: monitoring
      labels:
        release: kube-prometheus-stack
    spec:
      namespaceSelector:
        matchNames:
          - astra-automation
    
      selector:
        matchLabels:
          <controller_service_label_key>: <controller_service_label_value>
    
      endpoints:
        - port: <https_port_name>
          path: /api/controller/v2/metrics/
          interval: 30s
          scrapeTimeout: 10s
          scheme: https
    
          tlsConfig:
            insecureSkipVerify: true
    
          authorization:
            type: Bearer
            credentials:
              name: aa-controller-token
              key: token
    
          relabelings:
            - targetLabel: platform
              replacement: astra_automation
            - targetLabel: component
              replacement: controller
    

    Здесь:

    • <controller_service_label_key> – ключ метки сервиса Automation Controller;

    • <controller_service_label_value> – значение метки сервиса Automation Controller;

    • <https_port_name> – название порта HTTPS в сервисе Automation Controller или Gateway.

    Prometheus Operator поддерживает поле authorization начиная с версии 0.50.0. Только если в кластере используется более старая версия оператора, используйте вместо него устаревшее поле bearerTokenSecret с тем же секретом.

  3. Создайте ресурс:

    kubectl apply -f controller-servicemonitor.yaml
    

Private Automation Hub#

Для сбора метрик Private Automation Hub укажите в ресурсе ServiceMonitor стандартный путь:

/metrics

Prometheus Operator использует этот путь при создании цели мониторинга для сервиса Private Automation Hub.

Для настройки сбора метрик выполните следующие действия:

  1. Определите название сервиса и метки Private Automation Hub:

    kubectl -n astra-automation get svc --show-labels
    
  2. Создайте файл hub-servicemonitor.yaml:

    ---
    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      name: aa-hub
      namespace: monitoring
      labels:
        release: kube-prometheus-stack
    spec:
      namespaceSelector:
        matchNames:
          - astra-automation
    
      selector:
        matchLabels:
          <hub_service_label_key>: <hub_service_label_value>
    
      endpoints:
        - port: <https_port_name>
          path: /metrics
          interval: 30s
          scrapeTimeout: 10s
          scheme: https
    
          tlsConfig:
            insecureSkipVerify: true
    
          relabelings:
            - targetLabel: platform
              replacement: astra_automation
            - targetLabel: component
              replacement: hub
    

    Здесь:

    • <hub_service_label_key> – ключ метки сервиса Private Automation Hub;

    • <hub_service_label_value> – значение метки сервиса Private Automation Hub;

    • <https_port_name> – название порта HTTPS в сервисе Private Automation Hub.

  3. Создайте ресурс:

    kubectl apply -f hub-servicemonitor.yaml
    

Настройка Probe#

Ресурс Probe описывает проверку доступности сервиса через blackbox_exporter. Prometheus получает не сами метрики приложения, а результат проверки доступности.

Gateway#

Для контроля доступности Gateway используйте проверку HTTP через blackbox_exporter. Такая проверка показывает, что точка доступа отвечает по сети и возвращает успешный статус HTTP. Для проверки используйте точку доступа Gateway /api/gateway/v1/ping/: она отвечает кодом 200 без аутентификации и показывает доступность самого Gateway.

Агрегированный статус Gateway по адресу /api/gateway/v1/status/ требует токен доступа. Стандартный ресурс Probe не подходит для проверки значения поля status в ответе JSON. Также не добавляйте токен Gateway в сам Probe: параметры авторизации ресурса Probe относятся к запросу Prometheus к blackbox_exporter и не являются безопасным способом передать заголовок в проверяемый HTTP target. Если нужно контролировать именно агрегированный статус Gateway, используйте отдельный экспортер синтетических проверок или другой инструмент. Такой инструмент должен передавать заголовок Authorization к Gateway и преобразовывать результат проверки в метрику Prometheus.

Для базовой проверки доступности Gateway выполните следующие действия:

  1. Создайте файл gateway-probe.yaml:

    ---
    apiVersion: monitoring.coreos.com/v1
    kind: Probe
    metadata:
      name: aa-gateway
      namespace: monitoring
    spec:
      interval: 30s
      scrapeTimeout: 10s
    
      module: http_2xx
    
      prober:
        url: prometheus-blackbox-exporter.monitoring.svc.cluster.local:9115
    
      targets:
        staticConfig:
          static:
            - https://<gateway_address>/api/gateway/v1/ping/
    

    Здесь <gateway_address> – адрес Gateway.

  2. Создайте ресурс:

    kubectl apply -f gateway-probe.yaml
    

Event-Driven Automation#

Event-Driven Automation не предоставляет собственные метрики Prometheus. Для контроля работоспособности используйте проверку доступности через Gateway API.

Для настройки проверки доступности выполните следующие действия:

  1. Создайте файл eda-probe.yaml:

    ---
    apiVersion: monitoring.coreos.com/v1
    kind: Probe
    metadata:
      name: aa-eda
      namespace: monitoring
    spec:
      interval: 30s
      scrapeTimeout: 10s
    
      module: http_2xx
    
      prober:
        url: prometheus-blackbox-exporter.monitoring.svc.cluster.local:9115
    
      targets:
        staticConfig:
          static:
            - https://<gateway_address>/api/eda/v1/status/
    

    Здесь <gateway_address> – адрес Gateway.

  2. Создайте ресурс:

    kubectl apply -f eda-probe.yaml
    

Проверка настройки#

Проверка ServiceMonitor#

После создания ServiceMonitor убедитесь, что Kubernetes зарегистрировал ресурсы.

Для проверки выполните следующие действия:

  1. Получите список ServiceMonitor:

    kubectl -n monitoring get servicemonitor
    
  2. Убедитесь, что в выводе присутствуют следующие ресурсы:

    • aa-controller;

    • aa-hub.

  3. Просмотрите подробную информацию о ServiceMonitor:

    kubectl -n monitoring describe servicemonitor aa-controller
    

Проверка Probe#

После создания Probe убедитесь, что Kubernetes зарегистрировал ресурсы.

Для проверки выполните следующие действия:

  1. Получите список Probe:

    kubectl -n monitoring get probe
    
  2. Убедитесь, что в выводе присутствуют следующие ресурсы:

    • aa-gateway;

    • aa-eda.

  3. Просмотрите подробную информацию о Probe:

    kubectl -n monitoring describe probe aa-gateway
    

Проверка целей в Prometheus#

После создания ServiceMonitor и Probe убедитесь, что Prometheus обнаружил новые цели мониторинга.

Для проверки выполните следующие действия:

  1. Получите название Prometheus pod:

    kubectl -n monitoring get pod \
      -l app.kubernetes.io/name=prometheus
    
  2. Настройте локальную переадресацию порта:

    kubectl -n monitoring port-forward <prometheus_pod> 9090:9090
    

    Здесь <prometheus_pod> – название Prometheus pod из вывода предыдущей команды.

  3. Откройте графическую консоль Prometheus, располагающуюся по адресу http://localhost:9090.

  4. Перейдите в раздел Status ‣ Targets.

  5. Убедитесь, что цели, созданные через ServiceMonitor и Probe, находятся в состоянии UP.