Настройка 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 создайте файл и настройте права доступа:
Создайте пустой файл:
sudo install -o prometheus -g prometheus -m 0600 \ /dev/null /etc/prometheus/aa-controller.token
Запишите токен в файл:
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.
Для подключения источников данных выполните следующие действия на узле мониторинга:
Создайте файл
/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.Проверьте корректность конфигурации 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 при выполнении проверки.
Для настройки проверок доступности выполните следующие действия на узле мониторинга:
Разрешите
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.Замените файл
/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.Перезапустите
blackbox_exporter:sudo systemctl restart blackbox_exporter
Проверьте, что
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.Перезапустите Prometheus, чтобы он начал использовать обновленную конфигурацию сбора метрик:
sudo systemctl restart prometheus
Проверка конфигурации#
После завершения настройки убедитесь, что Prometheus получает данные от всех источников.
Проверьте доступность целей через API Prometheus:
curl -s http://localhost:9090/api/v1/targets | python3 -m json.tool
Для каждой целевой системы в поле
healthдолжно отображаться значениеup. Если поле содержит значениеdown, проверьте сетевой доступ, порт, путь к метрикам, TLS и токен доступа.Откройте графическую консоль Prometheus:
http://<monitoring_host>:9090
Перейдите в раздел и выполните проверочные запросы 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.
Убедитесь, что каждый запрос возвращает один или несколько временных рядов.
После успешной проверки Prometheus готов к использованию в качестве источника данных для Grafana и системы оповещений.