Развертывание системы мониторинга#

Для мониторинга 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 подключается к нужному кластеру:

  1. Проверьте текущий контекст Kubernetes:

    kubectl config current-context
    

    Команда должна вывести название текущего контекста Kubernetes.

  2. Проверьте доступность Kubernetes API:

    kubectl cluster-info
    

    Команда должна вывести адреса сервисов Kubernetes.

  3. Проверьте список узлов кластера:

    kubectl get nodes
    

    В ответе должен отображаться список узлов Kubernetes.

Подготовка пространства имен#

Компоненты мониторинга размещаются в отдельном пространстве имен monitoring. Такой подход отделяет служебные ресурсы мониторинга от ресурсов Astra Automation и упрощает настройку прав доступа, сетевых политик и сопровождение компонентов. Prometheus, Grafana, Alertmanager и blackbox_exporter будут работать в пространстве имен monitoring, а ресурсы ServiceMonitor, PodMonitor, Probe и PrometheusRule могут находиться в пространстве имен Astra Automation.

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

  1. Создайте пространство имен monitoring:

    kubectl create namespace monitoring
    
  2. Убедитесь, что пространство имен создано:

    kubectl get namespace monitoring
    

    В выводе команды должно отображаться пространство monitoring.

Подготовка параметров установки#

Перед установкой Helm-чарта kube-prometheus-stack создайте файл параметров Helm. Файл параметров нужен для того, чтобы Prometheus мог находить ресурсы мониторинга не только в пространстве имен monitoring, но и в пространстве, где развернута платформа Astra Automation.

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

  1. Создайте файл 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
    
  2. Проверьте содержимое файла:

    cat monitoring-values.yaml
    

Параметры serviceMonitorNamespaceSelector, podMonitorNamespaceSelector, probeNamespaceSelector и ruleNamespaceSelector разрешают Prometheus искать ресурсы мониторинга в разных пространствах имен.

Установка Prometheus Operator#

Установите Prometheus Operator и компоненты мониторинга с помощью Helm-чарта kube-prometheus-stack:

  1. Добавьте репозиторий Helm:

    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    
  2. Обновите список доступных Helm-чартов:

    helm repo update
    
  3. Установите 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
    
  4. Проверьте состояние подов:

    kubectl -n monitoring get pods
    

    Все поды должны перейти в состояние Running или Completed.

  5. Проверьте сервисы мониторинга:

    kubectl -n monitoring get svc
    

    В списке должны отображаться сервисы Prometheus, Grafana и Alertmanager.

Установка blackbox_exporter#

blackbox_exporter – экспортер Prometheus для проверки доступности адресов HTTP и HTTPS. С его помощью можно контролировать доступность Gateway, Event-Driven Automation и других сервисов, которые должны отвечать по сети.

  1. Установите blackbox_exporter:

    helm upgrade --install prometheus-blackbox-exporter prometheus-community/prometheus-blackbox-exporter \
      --namespace monitoring
    
  2. Проверьте состояние подов:

    kubectl -n monitoring get pods -l app.kubernetes.io/name=prometheus-blackbox-exporter
    

    Поды должны находиться в состоянии Running.

  3. Проверьте сервис 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:

  1. Укажите пространство имен установки Astra Automation:

    export AA_NAMESPACE=astra-automation
    
  2. Проверьте, что пространство имен существует:

    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 необходимо определить фактические значения в кластере.

  1. Получите список сервисов Astra Automation и их метки:

    kubectl -n ${AA_NAMESPACE} get svc --show-labels
    

    Команда показывает названия сервисов и наборы меток, по которым ServiceMonitor будет находить нужные сервисы.

  2. Посмотрите описание сервиса Automation Controller:

    kubectl -n ${AA_NAMESPACE} describe svc <controller_service>
    

    Здесь <controller_service> – название сервиса Automation Controller из вывода предыдущей команды.

  3. Посмотрите описание сервиса Private Automation Hub:

    kubectl -n ${AA_NAMESPACE} describe svc <hub_service>
    

    Здесь <hub_service> – название сервиса Private Automation Hub.

  4. Получите список ресурсов ingress:

    kubectl -n ${AA_NAMESPACE} get ingress
    

    Команда помогает определить внешний адрес Gateway.

  5. Получите список подов:

    kubectl -n ${AA_NAMESPACE} get pods -o wide
    

    Команда помогает проверить, на каких узлах работают компоненты платформы.

Сохраните найденные значения. Они потребуются при настройке ServiceMonitor, PodMonitor и Probe.

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

Если в пространстве имен Astra Automation настроены NetworkPolicy, разрешите подключение из пространства имен monitoring. Без такого разрешения Prometheus и blackbox_exporter могут быть установлены корректно, но не смогут обращаться к сервисам Astra Automation. Для настройки сетевого доступа выполните следующие действия из рабочей среды, где доступен kubectl:

  1. Создайте файл 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.

  2. Примените политику:

    kubectl apply -f allow-monitoring-scrape.yaml
    
  3. Проверьте, что политика создана:

    kubectl -n ${AA_NAMESPACE} get networkpolicy allow-monitoring-scrape
    

После проверки фактических портов сервисов удалите из политики порты, которые сервисы не используют.

Проверка развертывания#

Проверка развертывания подтверждает, что Helm-чарт создал основные объекты мониторинга и Kubernetes запустил их в пространстве имен monitoring. Выполните следующие действия из рабочей среды, где доступен kubectl:

  1. Проверьте поды и сервисы в пространстве имен 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.

  2. Проверьте ресурс Prometheus:

    kubectl -n monitoring get prometheus
    

    В выводе должен отображаться ресурс kube-prometheus-stack-prometheus. Если в выводе есть столбец READY, количество готовых реплик должно соответствовать ожидаемому количеству реплик.

  3. Проверьте ресурс Alertmanager:

    kubectl -n monitoring get alertmanager
    

    В выводе должен отображаться ресурс kube-prometheus-stack-alertmanager. Если в выводе есть столбец READY, количество готовых реплик должно соответствовать ожидаемому количеству реплик.

  4. Проверьте сервис Grafana:

    kubectl -n monitoring get svc kube-prometheus-stack-grafana
    

    Команда должна вывести сервис kube-prometheus-stack-grafana и его внутренний адрес ClusterIP. Если сервис не отображается, проверьте параметры установки Grafana в файле monitoring-values.yaml.