• Русский
  • Управление метриками

    Система мониторинга платформы основана на метриках, собираемых Prometheus / VictoriaMetrics. В этом документе описано, как управлять этими метриками.

    Просмотр метрик, предоставляемых компонентами платформы

    Метод мониторинга компонентов кластера внутри платформы заключается в извлечении метрик, предоставляемых через ServiceMonitor. Метрики в платформе доступны публично через эндпоинт /metrics. Вы можете просмотреть метрики конкретного компонента платформы, используя следующий пример команды:

    curl -s http://<Component IP>:<Component metrics port>/metrics | grep 'TYPE\|HELP'

    Пример вывода:

    # HELP controller_runtime_active_workers Number of currently used workers per controller
    # TYPE controller_runtime_active_workers gauge
    # HELP controller_runtime_max_concurrent_reconciles Maximum number of concurrent reconciles per controller
    # TYPE controller_runtime_max_concurrent_reconciles gauge
    # HELP controller_runtime_reconcile_errors_total Total number of reconciliation errors per controller
    # TYPE controller_runtime_reconcile_errors_total counter
    # HELP controller_runtime_reconcile_time_seconds Length of time per reconciliation per controller

    Просмотр всех метрик, хранящихся в Prometheus / VictoriaMetrics

    Вы можете просмотреть список доступных метрик в кластере, чтобы помочь вам написать необходимый PromQL на основе этих метрик.

    Предварительные условия

    1. У вас есть ваш пользовательский Token

    2. У вас есть адрес платформы

    Процедуры

    Выполните следующую команду для получения списка метрик с помощью команды curl:

    curl -k -X 'GET' -H 'Authorization: Bearer <Your token>' 'https://<Your platform access address>/v2/metrics/<Your cluster name>/prometheus/label/__name__/values'

    Пример вывода:

    {
      "status": "success",
      "data": [
        "ALERTS",
      "ALERTS_FOR_STATE",
      "advanced_search_cached_resources_count",
      "alb_error",
      "alertmanager_alerts",
      "alertmanager_alerts_invalid_total",
      "alertmanager_alerts_received_total",
      "alertmanager_cluster_enabled"]
    }

    Просмотр всех встроенных метрик, определённых платформой

    Для упрощения использования пользователями платформа встроила большое количество часто используемых метрик. Вы можете напрямую использовать эти метрики при настройке оповещений или панелей мониторинга без необходимости определять их самостоятельно. Ниже описано, как просмотреть эти метрики.

    Предварительные условия

    1. У вас есть ваш пользовательский Token

    2. У вас есть адрес платформы

    Процедуры

    Выполните следующую команду для получения списка метрик с помощью команды curl:

    curl -k -X 'GET' -H 'Authorization: Bearer <Your token>' 'https://<Your platform access address>/v2/metrics/<Your cluster name>/indicators'

    Пример вывода:

    [
      {
      "alertEnabled": true, 
      "annotations": {
       "cn": "Использование CPU контейнерами в компоненте вычислений",
       "descriptionEN": "Cpu utilization for pods in workload",
       "descriptionZH": "CPU utilization of containers in the compute component",
       "displayNameEN": "CPU utilization of the pods",
       "displayNameZH": "CPU utilization of containers in the compute component",
       "en": "Cpu utilization for pods in workload",
       "features": "SupportDashboard", 
       "summaryEN": "CPU usage rate {{.externalLabels.comparison}}{{.externalLabels.threshold}} of Pod ({{.labels.pod}})",
       "summaryZH": "CPU usage rate {{.externalLabels.comparison}}{{.externalLabels.threshold}} of pod ({{.labels.pod}})"
      },
      "displayName": "Использование CPU контейнерами в компоненте вычислений",
      "kind": "workload",
      "multipleEnabled": true,  
      "name": "workload.pod.cpu.utilization",
      "query": "avg by (kind,name,namespace,pod) (avg by (kind,name,namespace,pod,container)(cpaas_advanced_container_cpu_usage_seconds_total_irate5m{kind=~\"{{.kind}}\",name=~\"{{.name}}\",namespace=~\"{{.namespace}}\",container!=\"\",container!=\"POD\"}) / avg by (kind,name,namespace,pod,container)(cpaas_advanced_kube_pod_container_resource_limits{kind=~\"{{.kind}}\",name=~\"{{.name}}\",namespace=~\"{{.namespace}}\",resource=\"cpu\"}))", 
      "summary": "CPU usage rate {{.externalLabels.comparison}}{{.externalLabels.threshold}} of pod ({{.labels.pod}})",
      "type": "metric",
      "unit": "%",
      "legend": "{{.namespace}}/{{.pod}}",
      "variables": [ 
       "namespace",
       "name",
       "kind"
      ]
     }
    ]
    
    1. Поддерживает ли эта метрика настройку оповещений
    2. Поддерживает ли эта метрика использование в панелях мониторинга
    3. Поддерживает ли эта метрика настройку оповещений для нескольких ресурсов
    4. Определённое для метрики выражение PromQL
    5. Переменные, которые можно использовать в выражении PromQL метрики

    Интеграция внешних метрик

    Помимо встроенных метрик платформы, вы также можете интегрировать метрики, предоставляемые вашими приложениями или сторонними приложениями через ServiceMonitor или PodMonitor. В этом разделе в качестве примера используется Elasticsearch Exporter, установленный в виде pod в том же кластере.

    Предварительные условия

    Вы установили ваше приложение и открыли метрики через указанные интерфейсы. В этом документе предполагается, что ваше приложение установлено в пространстве имён cpaas-system и открыло эндпоинт http://<elasticsearch-exporter-ip>:9200/_prometheus/metrics.

    Процедуры

    1. Создайте Service/Endpoint для Exporter, чтобы открыть метрики

      apiVersion: v1
      kind: Service
      metadata:
        labels:
          chart: elasticsearch
          service_name: cpaas-elasticsearch
        name: cpaas-elasticsearch
        namespace: cpaas-system
      spec:
        clusterIP: 10.105.125.99
        ports:
        - name: cpaas-elasticsearch
          port: 9200
          protocol: TCP
          targetPort: 9200
        selector:
          service_name: cpaas-elasticsearch
        sessionAffinity: None
        type: ClusterIP
    2. Создайте объект ServiceMonitor для описания метрик, предоставляемых вашим приложением:

      apiVersion: monitoring.coreos.com/v1
      kind: ServiceMonitor
      metadata:
        labels:
          app: cpaas-monitor
          chart: cpaas-monitor
          heritage: Helm
          prometheus: kube-prometheus
          release: cpaas-monitor
        name: cpaas-elasticsearch-Exporter
        namespace: cpaas-system
      spec:
        jobLabel: service_name
        namespaceSelector:
          any: true
        selector:
          matchExpressions:
            - key: service_name
              operator: Exists
        endpoints:
          - port: cpaas-elasticsearch
            path: /_prometheus/metrics
            interval: 60s
            honorLabels: true
            basicAuth:
              password:
                key: ES_PASSWORD
                name: acp-config-secret
              username:
                key: ES_USER
                name: acp-config-secret
      1. К какому Prometheus должен быть синхронизирован ServiceMonitor; оператор будет слушать соответствующий ресурс ServiceMonitor на основе конфигурации serviceMonitorSelector в Prometheus CR. Если метки ServiceMonitor не соответствуют конфигурации serviceMonitorSelector Prometheus CR, этот ServiceMonitor не будет мониториться оператором.
      2. В каких пространствах имён ServiceMonitor будет слушать оператор на основе конфигурации serviceMonitorNamespaceSelector в Prometheus CR; если ServiceMonitor не находится в serviceMonitorNamespaceSelector Prometheus CR, этот ServiceMonitor не будет мониториться оператором.
      3. Метрики, собираемые Prometheus, будут иметь метку job, значение которой соответствует значению метки сервиса, указанной в jobLabel.
      4. ServiceMonitor сопоставляется с соответствующим Service на основе конфигурации namespaceSelector.
      5. ServiceMonitor сопоставляется с Service на основе конфигурации selector.
      6. ServiceMonitor сопоставляется с портом Service на основе конфигурации port.
      7. Путь доступа к Exporter, по умолчанию /metrics.
      8. Интервал, с которым Prometheus опрашивает метрики Exporter.
      9. Если для доступа к пути Exporter требуется аутентификация, необходимо добавить данные аутентификации; также поддерживаются bearer token, tls аутентификация и другие методы.
    3. Проверьте, мониторится ли ServiceMonitor Prometheus

      Зайдите в UI компонента мониторинга и проверьте, существует ли задача cpaas-elasticsearch-exporter.

      • Адрес UI Prometheus: https://<Your platform access address>/clusters/<Cluster name>/prometheus-0/targets
      • Адрес UI VictoriaMetrics: https://<Your platform access address>/clusters/<Cluster name>/vmselect-ui/vmui/?#/metrics