Стадия жизненного цикла модуля: Preview
У модуля есть требования для установки

Модуль observability предоставляет механизмы разграничения доступа к метрикам уровня кластера и проектов, а также инструменты для их интерактивного анализа.

В зависимости от области видимости различаются два типа метрик:

Тип метрик Область видимости Описание
ClusterMetrics Уровень кластера Метрики, относящиеся к компонентам кластера и системным неймпейсам, имена которых соответствуют шаблону d8-* и kube-*.
Metrics Уровень проекта Метрики, относящиеся к ресурсам конкретного проекта на основании значения лейбла namespace. Доступ к метрикам ограничен рамками соответствующего проекта.

Модуль позволяет выполнять произвольные PromQL-запросы к метрикам кластера или проекта непосредственно из веб-интерфейса Deckhouse.

Возможности интерактивного анализа метрик:

  • выполнение произвольных PromQL-запросов к метрикам;
  • выбор источника данных (основной Prometheus, Longterm и пользовательские источники);
  • визуализация результатов в виде таблиц и графиков;
  • автодополнение метрик и лейблов при вводе запроса.

Варианты обзора данных:

  • Системный обзор данных — доступен администраторам DKP в веб-интерфейсе Deckhouse в разделе «Система» → «Управление системой» → меню «Мониторинг» → «Обзор данных». В этом разделе можно ознакомиться с метриками кластера.

  • Проектный обзор данных — доступен пользователям проектов DKP в веб-интерфейсе Deckhouse в соответствующем проекте → меню «Мониторинг» → «Обзор данных». В этом разделе запросы ограничены метриками, относящимися к данному проекту (в рамках неймспейса).

Доступ к метрикам вне кластера

Модуль позволяет настроить внешний доступ к метрикам кластера для интеграции с внешними системами мониторинга (например, с внешней Grafana) или для записи метрик из внешних источников.

Для включения внешнего доступа используется параметр externalMetricsAccess в настройках модуля. Авторизация запросов осуществляется с помощью сервисного аккаунта с правами доступа на чтение или запись метрик.

Поддерживаются следующие сценарии:

  • чтение метрик кластера — доступ к системным метрикам всего кластера;
  • чтение метрик проекта — доступ к метрикам конкретного неймспейса через Prometheus-совместимый API;
  • запись метрик — отправка метрик из внешних источников по протоколу Prometheus Remote-Write.

Внешний доступ для чтения метрик кластера

Чтобы предоставить внешний доступ к метрикам кластера, выполните следующие шаги:

  1. Разрешите внешний доступ к метрикам. Для этого включите параметр externalMetricsAccess в настройках модуля.

  2. Создайте ServiceAccount для авторизации запросов:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: cluster-metrics-access
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: cluster-metrics-access
      annotations:
        kubernetes.io/service-account.name: cluster-metrics-access
    type: kubernetes.io/service-account-token
  3. Предоставьте права на чтение метрик созданному ServiceAccount с помощью ресурсов ClusterRole и ClusterRoleBinding:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: observability-cluster-metrics-viewer
    rules:
      - apiGroups: ["observability.deckhouse.io"]
        resources: ["clustermetrics"]
        verbs: ["get", "list", "watch"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: bind-observability-cluster-metrics-viewer
    subjects:
      - kind: ServiceAccount
        name: cluster-metrics-access
        namespace: default
    roleRef:
      kind: ClusterRole
      name: observability-cluster-metrics-viewer
      apiGroup: rbac.authorization.k8s.io
  4. Получите авторизационный токен для доступа к метрикам.

    При создании ServiceAccount был создан секрет с токеном. Токен хранится в виде Base64-строки. Чтобы извлечь его и раскодировать, выполните следующую команду:

    d8 k -n my-namespace get secret cluster-metrics-access -ojsonpath='{ .data.token }' | base64 -d

    Этот токен потребуется на следующем шаге для настройки источника данных (data source) в Grafana.

  5. Настройте доступ к метрикам во внешней Grafana.

    Добавьте источник данных (data source) Prometheus со следующими параметрами:

    • Name — произвольное имя источника данных.
    • URL — адрес внешнего эндпоинта для доступа к метрикам в формате https://observability.%publicDomainTemplate%/<prefix>, где:
      • %publicDomainTemplate% — шаблон DNS-имен вашего кластера, заданный в глобальных настройках DKP.
      • <prefix> — один из префиксов для доступа к Prometheus:
        • /metrics/main — для метрик основного Prometheus.
        • /metrics/longterm — для метрик Prometheus Longterm.
    • HTTP Headers — дополнительные HTTP-заголовки для авторизации:
      • Header: Authorization.
      • Value: Bearer <TOKEN_VALUE>, где <TOKEN_VALUE> — это токен, полученный из секрета на предыдущем шаге.

Внешний доступ для чтения метрик проекта

Чтобы предоставить внешний доступ к метрикам проекта, выполните следующие шаги:

  1. Разрешите внешний доступ к метрикам. Для этого включите параметр externalMetricsAccess в настройках модуля.

  2. Создайте ServiceAccount для авторизации запросов:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: metrics-access
      namespace: my-namespace
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: metrics-access
      annotations:
        kubernetes.io/service-account.name: metrics-access
    type: kubernetes.io/service-account-token
  3. Предоставьте права на чтение метрик созданному ServiceAccount с помощью ресурсов Role и RoleBinding:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      namespace: my-namespace
      name: metrics-access
    rules:
      - apiGroups: ["observability.deckhouse.io"]
        resources: ["metrics"]
        verbs: ["get", "watch", "list"]
      - apiGroups: [""]
        resources: ["namespaces"]
        verbs: ["get", "watch", "list"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: metrics-access
      namespace: my-namespace
    subjects:
      - kind: ServiceAccount
        name: metrics-access
        namespace: my-namespace
    roleRef:
      kind: Role
      name: metrics-access
      apiGroup: rbac.authorization.k8s.io
  4. Получите авторизационный токен для доступа к метрикам.

    При создании ServiceAccount был создан секрет с токеном. Токен хранится в виде Base64-строки. Чтобы извлечь его и раскодировать, выполните следующую команду:

    d8 k -n my-namespace get secret metrics-access -ojsonpath='{ .data.token }' | base64 -d

    Этот токен потребуется на следующем шаге для настройки источника данных (data source) в Grafana.

  5. Настройте доступ к метрикам во внешней Grafana.

    Добавьте источник данных (data source) Prometheus со следующими параметрами:

    • Name — произвольное имя источника данных.
    • URL — адрес внешнего эндпоинта для доступа к метрикам в формате https://observability.%publicDomainTemplate%/<prefix>, где:
      • %publicDomainTemplate% — шаблон DNS-имен вашего кластера, заданный в глобальных настройках DKP.
      • <prefix> — один из префиксов для доступа к Prometheus:
        • /metrics/main — для метрик основного Prometheus.
        • /metrics/longterm — для метрик Prometheus Longterm.
    • HTTP Headers — дополнительные HTTP-заголовки для авторизации:
      • Header: Authorization.
      • Value: Bearer <TOKEN_VALUE>, где <TOKEN_VALUE> — это токен, полученный из секрета на предыдущем шаге.

Внешний доступ для записи метрик

Чтобы предоставить внешний доступ для записи метрик, выполните следующие шаги:

  1. Разрешите внешний доступ к метрикам. Для этого включите параметр externalMetricsAccess в настройках модуля.

  2. Создайте ServiceAccount для авторизации запросов:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: metrics-access
      namespace: my-namespace
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: metrics-access
      annotations:
        kubernetes.io/service-account.name: metrics-access
    type: kubernetes.io/service-account-token
  3. Предоставьте права на запись метрик созданному ServiceAccount с помощью ресурсов Role и RoleBinding:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      namespace: my-namespace
      name: metrics-access
    rules:
      - apiGroups: ["observability.deckhouse.io"]
        resources: ["metrics"]
        verbs: ["create"]
      - apiGroups: [""]
        resources: ["namespaces"]
        verbs: ["get", "watch", "list"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: metrics-access
      namespace: my-namespace
    subjects:
      - kind: ServiceAccount
        name: metrics-access
        namespace: my-namespace
    roleRef:
      kind: Role
      name: metrics-access
      apiGroup: rbac.authorization.k8s.io
  4. Получите авторизационный токен для записи метрик.

    При создании ServiceAccount был создан секрет с токеном. Токен хранится в виде Base64-строки. Чтобы извлечь его и раскодировать, выполните следующую команду:

    d8 k -n my-namespace get secret metrics-access -ojsonpath='{ .data.token }' | base64 -d
  5. Для записи метрик отправляйте запросы по протоколу Prometheus Remote-Write V1 или V2, используя следующие параметры:

    • URL — адрес внешнего эндпоинта для записи метрик в формате https://observability.%publicDomainTemplate%/api/v1/write, где:
    • HTTP Headers — дополнительные HTTP-заголовки для авторизации:
      • Header: Authorization.
      • Value: Bearer <TOKEN_VALUE>, где <TOKEN_VALUE> — это токен, полученный из секрета на предыдущем шаге.