Развертывание системы мониторинга#
Для мониторинга Astra Automation в Kubernetes используйте Prometheus Operator.
В примерах ниже Prometheus Operator устанавливается с помощью Helm-чарта kube-prometheus-stack.
Этот Helm-чарт развертывает Prometheus Operator, Prometheus, Grafana, Alertmanager, kube-state-metrics и node_exporter.
Prometheus Operator управляет ресурсами Prometheus и Alertmanager и автоматически добавляет цели сбора данных на основе ресурсов ServiceMonitor, PodMonitor и Probe.
Для проверки доступности Gateway, Event-Driven Automation и других сервисов, работающих по HTTP, дополнительно установите blackbox_exporter.
Проверка доступа к Kubernetes#
kubectl управляет объектами Kubernetes: пространствами имен (namespace), подами (pod), сервисами (service), секретами (secret), ресурсами входящего доступа (ingress) и другими объектами.
Перед установкой компонентов мониторинга проверьте, что kubectl подключается к нужному кластеру:
Проверьте текущий контекст Kubernetes:
kubectl config current-context
Команда должна вывести название текущего контекста Kubernetes.
Проверьте доступность Kubernetes API:
kubectl cluster-infoКоманда должна вывести адреса сервисов Kubernetes.
Проверьте список узлов кластера:
kubectl get nodes
В ответе должен отображаться список узлов Kubernetes.
Подготовка пространства имен#
Компоненты мониторинга размещаются в отдельном пространстве имен monitoring.
Такой подход отделяет служебные ресурсы мониторинга от ресурсов Astra Automation и упрощает настройку прав доступа, сетевых политик и сопровождение компонентов.
Prometheus, Grafana, Alertmanager и blackbox_exporter будут работать в пространстве имен monitoring, а ресурсы ServiceMonitor, PodMonitor, Probe и PrometheusRule могут находиться в пространстве имен Astra Automation.
Для подготовки пространства имен выполните следующие действия:
Создайте пространство имен
monitoring:kubectl create namespace monitoring
Убедитесь, что пространство имен создано:
kubectl get namespace monitoring
В выводе команды должно отображаться пространство
monitoring.
Подготовка параметров установки#
Перед установкой Helm-чарта kube-prometheus-stack создайте файл параметров Helm.
Файл параметров нужен для того, чтобы Prometheus мог находить ресурсы мониторинга не только в пространстве имен monitoring, но и в пространстве, где развернута платформа Astra Automation.
Для подготовки параметров установки выполните следующие действия:
Создайте файл
monitoring-values.yaml:cat > monitoring-values.yaml <<'YAML' --- grafana: enabled: true defaultDashboardsEnabled: true alertmanager: enabled: true prometheus: prometheusSpec: retention: 30d scrapeInterval: 30s serviceMonitorSelectorNilUsesHelmValues: false podMonitorSelectorNilUsesHelmValues: false probeSelectorNilUsesHelmValues: false ruleSelectorNilUsesHelmValues: false serviceMonitorNamespaceSelector: {} podMonitorNamespaceSelector: {} probeNamespaceSelector: {} ruleNamespaceSelector: {} YAML
Проверьте содержимое файла:
cat monitoring-values.yaml
Параметры serviceMonitorNamespaceSelector, podMonitorNamespaceSelector, probeNamespaceSelector и ruleNamespaceSelector разрешают Prometheus искать ресурсы мониторинга в разных пространствах имен.
Установка Prometheus Operator#
Установите Prometheus Operator и компоненты мониторинга с помощью Helm-чарта kube-prometheus-stack:
Добавьте репозиторий Helm:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
Обновите список доступных Helm-чартов:
helm repo update
Установите Prometheus Operator, Prometheus, Grafana, Alertmanager,
kube-state-metricsиnode_exporter:helm upgrade --install kube-prometheus-stack prometheus-community/kube-prometheus-stack \ --namespace monitoring \ --values monitoring-values.yaml
Проверьте состояние подов:
kubectl -n monitoring get pods
Все поды должны перейти в состояние
RunningилиCompleted.Проверьте сервисы мониторинга:
kubectl -n monitoring get svc
В списке должны отображаться сервисы Prometheus, Grafana и Alertmanager.
Установка blackbox_exporter#
blackbox_exporter – экспортер Prometheus для проверки доступности адресов HTTP и HTTPS.
С его помощью можно контролировать доступность Gateway, Event-Driven Automation и других сервисов, которые должны отвечать по сети.
Установите
blackbox_exporter:helm upgrade --install prometheus-blackbox-exporter prometheus-community/prometheus-blackbox-exporter \ --namespace monitoring
Проверьте состояние подов:
kubectl -n monitoring get pods -l app.kubernetes.io/name=prometheus-blackbox-exporter
Поды должны находиться в состоянии
Running.Проверьте сервис
blackbox_exporter:kubectl -n monitoring get svc prometheus-blackbox-exporter
Сервис должен быть доступен внутри кластера по адресу
prometheus-blackbox-exporter.monitoring.svc.cluster.local:9115.
Подготовка пространства имен Astra Automation#
Prometheus должен иметь доступ к пространству имен, в котором развернута платформа Astra Automation.
В примерах указано пространство имен astra-automation.
Если платформа развернута в другом пространстве имен, замените значение переменной AA_NAMESPACE:
Укажите пространство имен установки Astra Automation:
export AA_NAMESPACE=astra-automation
Проверьте, что пространство имен существует:
kubectl get namespace ${AA_NAMESPACE}
В выводе команды должно отображаться пространство имен установки Astra Automation.
Параметры serviceMonitorNamespaceSelector, podMonitorNamespaceSelector, probeNamespaceSelector и ruleNamespaceSelector в файле monitoring-values.yaml определяют, из каких пространств имен Prometheus может получать ресурсы мониторинга.
Если нужно ограничить выбор пространства имен, добавьте метку пространствам имен monitoring и Astra Automation:
kubectl label namespace monitoring monitoring=enabled --overwrite
kubectl label namespace ${AA_NAMESPACE} monitoring=enabled --overwrite
Предупреждение
При включении селекторов matchLabels Prometheus ищет ресурсы мониторинга только в помеченных пространствах имен.
Поэтому метку необходимо назначить обоим пространствам: пространству monitoring, в котором находятся ресурсы ServiceMonitor, Probe и PrometheusRule из этого руководства и собственные ресурсы Helm-чарта kube-prometheus-stack, и пространству имен Astra Automation.
Пространство имен без метки исключается из обнаружения, и Prometheus перестает учитывать находящиеся в нем ресурсы мониторинга.
Проверьте метки пространств имен:
kubectl get namespace monitoring ${AA_NAMESPACE} --show-labels
После добавления меток укажите метку в monitoring-values.yaml:
---
prometheus:
prometheusSpec:
serviceMonitorNamespaceSelector:
matchLabels:
monitoring: enabled
podMonitorNamespaceSelector:
matchLabels:
monitoring: enabled
probeNamespaceSelector:
matchLabels:
monitoring: enabled
ruleNamespaceSelector:
matchLabels:
monitoring: enabled
Определение сервисов Astra Automation#
Названия сервисов, метки и порты зависят от версии операторов Astra Automation и параметров установки.
Перед созданием ServiceMonitor и Probe необходимо определить фактические значения в кластере.
Получите список сервисов Astra Automation и их метки:
kubectl -n ${AA_NAMESPACE} get svc --show-labels
Команда показывает названия сервисов и наборы меток, по которым
ServiceMonitorбудет находить нужные сервисы.Посмотрите описание сервиса Automation Controller:
kubectl -n ${AA_NAMESPACE} describe svc <controller_service>
Здесь <controller_service> – название сервиса Automation Controller из вывода предыдущей команды.
Посмотрите описание сервиса Private Automation Hub:
kubectl -n ${AA_NAMESPACE} describe svc <hub_service>
Здесь <hub_service> – название сервиса Private Automation Hub.
Получите список ресурсов ingress:
kubectl -n ${AA_NAMESPACE} get ingress
Команда помогает определить внешний адрес Gateway.
Получите список подов:
kubectl -n ${AA_NAMESPACE} get pods -o wide
Команда помогает проверить, на каких узлах работают компоненты платформы.
Сохраните найденные значения.
Они потребуются при настройке ServiceMonitor, PodMonitor и Probe.
Настройка сетевого доступа#
Если в пространстве имен Astra Automation настроены NetworkPolicy, разрешите подключение из пространства имен monitoring.
Без такого разрешения Prometheus и blackbox_exporter могут быть установлены корректно, но не смогут обращаться к сервисам Astra Automation.
Для настройки сетевого доступа выполните следующие действия из рабочей среды, где доступен kubectl:
Создайте файл
allow-monitoring-scrape.yaml:cat > allow-monitoring-scrape.yaml <<'YAML' --- apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-monitoring-scrape namespace: astra-automation spec: podSelector: {} policyTypes: - Ingress ingress: - from: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: monitoring ports: - protocol: TCP port: 443 - protocol: TCP port: 80 - protocol: TCP port: 8080 - protocol: TCP port: 9090 YAML
Если Astra Automation установлена не в пространстве имен
astra-automation, замените значение поляnamespaceв блокеmetadata.Примените политику:
kubectl apply -f allow-monitoring-scrape.yaml
Проверьте, что политика создана:
kubectl -n ${AA_NAMESPACE} get networkpolicy allow-monitoring-scrape
После проверки фактических портов сервисов удалите из политики порты, которые сервисы не используют.
Проверка развертывания#
Проверка развертывания подтверждает, что Helm-чарт создал основные объекты мониторинга и Kubernetes запустил их в пространстве имен monitoring.
Выполните следующие действия из рабочей среды, где доступен kubectl:
Проверьте поды и сервисы в пространстве имен
monitoring:kubectl -n monitoring get pods,svc
Поды Prometheus, Grafana, Alertmanager,
kube-state-metrics,node_exporterиblackbox_exporterдолжны находиться в состоянииRunningилиCompleted. В списке сервисов должны отображаться сервисы Prometheus, Grafana, Alertmanager иprometheus-blackbox-exporter.Проверьте ресурс Prometheus:
kubectl -n monitoring get prometheus
В выводе должен отображаться ресурс
kube-prometheus-stack-prometheus. Если в выводе есть столбецREADY, количество готовых реплик должно соответствовать ожидаемому количеству реплик.Проверьте ресурс Alertmanager:
kubectl -n monitoring get alertmanager
В выводе должен отображаться ресурс
kube-prometheus-stack-alertmanager. Если в выводе есть столбецREADY, количество готовых реплик должно соответствовать ожидаемому количеству реплик.Проверьте сервис Grafana:
kubectl -n monitoring get svc kube-prometheus-stack-grafana
Команда должна вывести сервис
kube-prometheus-stack-grafanaи его внутренний адресClusterIP. Если сервис не отображается, проверьте параметры установки Grafana в файлеmonitoring-values.yaml.