Настройка Prometheus#

Prometheus централизованно собирает метрики компонентов Astra Automation, операционной системы узлов и вспомогательных сервисов. Prometheus получает данные из следующих источников:

  • метрики Automation Controller;

  • метрики Private Automation Hub;

  • метрики операционной системы через node_exporter;

  • метрики PostgreSQL через postgres_exporter;

  • метрики Redis через redis_exporter;

  • результаты проверок доступности через blackbox_exporter.

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

Для получения метрик Automation Controller Prometheus использует токен доступа с привилегиями на чтение. Тот же токен используется для проверки Gateway через blackbox_exporter, потому что точка доступа /api/gateway/v1/status/ требует заголовок Authorization.

Создайте токен запросом к 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 с ролью «Системный администратор» (System administrator) или «Системный аудитор» (System auditor);

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

Сохраните значение поля token из ответа. Далее это значение записывается в отдельный файл на узле мониторинга. Не добавляйте токен непосредственно в prometheus.yml.

Подготовка файла с токеном#

Файл /etc/prometheus/aa-controller.token используется двумя процессами:

  • Prometheus читает файл напрямую через параметр authorization.credentials_file и добавляет заголовок Authorization: Bearer при получении метрик Automation Controller;

  • blackbox_exporter читает этот же файл через параметр authorization.credentials_file в своем модуле http_2xx_bearer и добавляет заголовок Authorization: Bearer при проверке Gateway.

Для пакетной установки Prometheus создайте файл и настройте права доступа:

  1. Создайте пустой файл:

    sudo install -o prometheus -g prometheus -m 0600 \
      /dev/null /etc/prometheus/aa-controller.token
    
  2. Запишите токен в файл:

    sudo sh -c 'printf "%s" "<token>" > /etc/prometheus/aa-controller.token'
    

    Здесь <token> – значение токена, созданного ранее.

После этого Prometheus сможет читать файл, но blackbox_exporter еще не будет иметь к нему доступа. Доступ для blackbox_exporter настраивается в разделе проверки доступности.

Подключение источников данных#

Файл /etc/prometheus/prometheus.yml задает интервалы сбора метрик, подключение Alertmanager и список источников данных. В примере ниже Prometheus получает метрики Automation Controller, Private Automation Hub, операционной системы, PostgreSQL и Redis, а также результаты проверок доступности через blackbox_exporter. Для подключения источников данных выполните следующие действия на узле мониторинга:

  1. Создайте файл /etc/prometheus/prometheus.yml на основе примера:

    ---
    global:
      scrape_interval: 30s
      evaluation_interval: 30s
      scrape_timeout: 10s
    
    rule_files:
      - /etc/prometheus/rules/*.yml
    
    alerting:
      alertmanagers:
        - static_configs:
            - targets:
                - 127.0.0.1:9093
    
    scrape_configs:
      - job_name: aa_controller
        scheme: https
        metrics_path: /api/controller/v2/metrics/
        authorization:
          type: Bearer
          credentials_file: /etc/prometheus/aa-controller.token
    
        tls_config:
          insecure_skip_verify: true
    
        static_configs:
          - targets:
              - <gateway_address>
            labels:
              component: controller
              platform: astra_automation
    
      - job_name: aa_hub
        scheme: https
        metrics_path: /metrics
    
        tls_config:
          insecure_skip_verify: true
    
        static_configs:
          - targets:
              - <hub01_ip>
            labels:
              component: hub
              platform: astra_automation
              hub_role: primary
    
      - job_name: aa_hub_health
        scheme: https
        metrics_path: /metrics
    
        tls_config:
          insecure_skip_verify: true
    
        static_configs:
          - targets:
              - <hub01_ip>
              - <hub02_ip>
            labels:
              component: hub
              platform: astra_automation
              hub_role: health_check
    
      - job_name: aa_nodes
        static_configs:
          - targets:
              - <ac01_ip>:9100
              - <ex01_ip>:9100
              - <hub01_ip>:9100
              - <hub02_ip>:9100
              - <eda01_ip>:9100
              - <eda02_ip>:9100
              - <gw01_ip>:9100
              - <gw02_ip>:9100
              - <db_ip>:9100
            labels:
              platform: astra_automation
    
      - job_name: aa_postgres
        static_configs:
          - targets:
              - <db_ip>:9187
            labels:
              component: postgres
              platform: astra_automation
    
      - job_name: aa_redis
        static_configs:
          - targets:
              - <hub01_ip>:9121
              - <hub02_ip>:9121
              - <eda01_ip>:9121
              - <eda02_ip>:9121
              - <gw01_ip>:9121
              - <gw02_ip>:9121
            labels:
              component: redis
              platform: astra_automation
    
      - job_name: aa_blackbox_http
        metrics_path: /probe
    
        params:
          module:
            - http_2xx
    
        static_configs:
          - targets:
              - https://<gateway_address>/api/eda/v1/status/
              - https://<gateway_address>/api/galaxy/
    
        relabel_configs:
          - source_labels: [__address__]
            target_label: __param_target
    
          - source_labels: [__param_target]
            target_label: instance
    
          - target_label: __address__
            replacement: 127.0.0.1:9115
    
      - job_name: aa_blackbox_gateway
        metrics_path: /probe
    
        params:
          module:
            - http_2xx_bearer
    
        static_configs:
          - targets:
              - https://<gateway_address>/api/gateway/v1/status/
    
        relabel_configs:
          - source_labels: [__address__]
            target_label: __param_target
    
          - source_labels: [__param_target]
            target_label: instance
    
          - target_label: __address__
            replacement: 127.0.0.1:9115
    

    Здесь:

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

    • <hub01_ip>, <hub02_ip> – IP-адреса узлов Private Automation Hub;

    • <ac01_ip>, <ex01_ip>, <eda01_ip>, <eda02_ip>, <gw01_ip>, <gw02_ip>, <db_ip> – IP-адреса узлов платформы.

    Задание aa_controller использует параметр authorization с типом Bearer и файлом токена credentials_file. Prometheus читает только значение токена из файла и сам формирует заголовок авторизации HTTP. Задание aa_blackbox_gateway не передает токен напрямую в Prometheus: Prometheus обращается к локальному blackbox_exporter, а уже blackbox_exporter добавляет заголовок авторизации при запросе к Gateway.

  2. Проверьте корректность конфигурации Prometheus:

    promtool check config /etc/prometheus/prometheus.yml
    

Настройка проверок доступности#

blackbox_exporter проверяет доступность точек доступа Astra Automation и передает результат в Prometheus. Для точек доступа без авторизации используйте модуль http_2xx. Для Gateway используйте модуль http_2xx_bearer, потому что путь /api/gateway/v1/status/ требует заголовок Authorization.

В конфигурации ниже токен не хранится в файле blackbox.yml. blackbox_exporter читает токен из файла /etc/prometheus/aa-controller.token при выполнении проверки.

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

  1. Разрешите blackbox_exporter читать файл с токеном:

    sudo usermod -aG prometheus blackbox_exporter
    sudo chown prometheus:prometheus /etc/prometheus/aa-controller.token
    sudo chmod 0640 /etc/prometheus/aa-controller.token
    

    Владелец файла остается prometheus, поэтому Prometheus продолжает читать токен. Пользователь blackbox_exporter получает доступ к файлу через группу prometheus. Если каталог /etc/prometheus закрыт для группы prometheus, разрешите группе проход по каталогу или перенесите файл с токеном в отдельный защищенный каталог, доступный только пользователям prometheus и blackbox_exporter.

  2. Замените файл /etc/blackbox_exporter/blackbox.yml конфигурацией с двумя модулями:

    ---
    modules:
      http_2xx:
        prober: http
        timeout: 10s
        http:
          valid_status_codes: []
          tls_config:
            insecure_skip_verify: true
    
      http_2xx_bearer:
        prober: http
        timeout: 10s
        http:
          valid_status_codes: []
          authorization:
            type: Bearer
            credentials_file: /etc/prometheus/aa-controller.token
          tls_config:
            insecure_skip_verify: true
    

    Модуль http_2xx используется для точек доступа без авторизации. Модуль http_2xx_bearer используется только для Gateway status и читает токен из файла /etc/prometheus/aa-controller.token.

  3. Перезапустите blackbox_exporter:

    sudo systemctl restart blackbox_exporter
    
  4. Проверьте, что blackbox_exporter выполняет проверку Gateway с заголовком авторизации:

    curl -s 'http://127.0.0.1:9115/probe?target=https://<gateway_address>/api/gateway/v1/status/&module=http_2xx_bearer' | grep '^probe_success'
    

    Команда должна вывести строку probe_success 1. Значение 0 означает, что Gateway недоступен для проверки, токен не подходит или blackbox_exporter не может прочитать файл /etc/prometheus/aa-controller.token.

  5. Перезапустите Prometheus, чтобы он начал использовать обновленную конфигурацию сбора метрик:

    sudo systemctl restart prometheus
    

Проверка конфигурации#

После завершения настройки убедитесь, что Prometheus получает данные от всех источников.

  1. Проверьте доступность целей через API Prometheus:

    curl -s http://localhost:9090/api/v1/targets | python3 -m json.tool
    

    Для каждой целевой системы в поле health должно отображаться значение up. Если поле содержит значение down, проверьте сетевой доступ, порт, путь к метрикам, TLS и токен доступа.

  2. Откройте графическую консоль Prometheus:

    http://<monitoring_host>:9090
    
  3. Перейдите в раздел Graph и выполните проверочные запросы PromQL.

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

    • up – показывает состояние всех целей сбора метрик. Для доступных целей значение равно 1.

    • awx_system_info – проверяет наличие системных метрик Automation Controller. Если запрос возвращает данные, Prometheus успешно получает метрики контроллера.

    • awx_pending_jobs_total – показывает количество заданий Automation Controller, ожидающих запуска. Запрос должен возвращать временной ряд после подключения метрик Automation Controller.

    • callback_receiver_events_queue_size_redis – показывает размер очереди событий заданий в Redis. Запрос нужен для проверки метрик обработки событий Automation Controller.

    • redis_up – показывает доступность Redis с точки зрения redis_exporter. Для доступного Redis значение равно 1.

  4. Убедитесь, что каждый запрос возвращает один или несколько временных рядов.

После успешной проверки Prometheus готов к использованию в качестве источника данных для Grafana и системы оповещений.