Стадия жизненного цикла модуля: Preview
У модуля есть требования для установки
Модуль observability предоставляет механизмы разграничения доступа к метрикам уровня кластера и проектов,
а также инструменты для их интерактивного анализа.
В зависимости от области видимости различаются два типа метрик:
| Тип метрик | Область видимости | Описание |
|---|---|---|
| ClusterMetrics | Уровень кластера | Метрики, относящиеся к компонентам кластера и системным неймпейсам, имена которых соответствуют шаблону d8-* и kube-*. |
| Metrics | Уровень проекта | Метрики, относящиеся к ресурсам конкретного проекта на основании значения лейбла namespace. Доступ к метрикам ограничен рамками соответствующего проекта. |
Модуль позволяет выполнять произвольные PromQL-запросы к метрикам кластера или проекта непосредственно из веб-интерфейса Deckhouse.
Возможности интерактивного анализа метрик:
- выполнение произвольных PromQL-запросов к метрикам;
- выбор источника данных (основной Prometheus, Longterm и пользовательские источники);
- визуализация результатов в виде таблиц и графиков;
- автодополнение метрик и лейблов при вводе запроса.
Варианты обзора данных:
-
Системный обзор данных — доступен администраторам DKP в веб-интерфейсе Deckhouse в разделе «Система» → «Управление системой» → меню «Мониторинг» → «Обзор данных». В этом разделе можно ознакомиться с метриками кластера.
-
Проектный обзор данных — доступен пользователям проектов DKP в веб-интерфейсе Deckhouse в соответствующем проекте → меню «Мониторинг» → «Обзор данных». В этом разделе запросы ограничены метриками, относящимися к данному проекту (в рамках неймспейса).
Доступ к метрикам вне кластера
Модуль позволяет настроить внешний доступ к метрикам кластера для интеграции с внешними системами мониторинга (например, с внешней Grafana) или для записи метрик из внешних источников.
Для включения внешнего доступа используется параметр externalMetricsAccess в настройках модуля.
Авторизация запросов осуществляется с помощью сервисного аккаунта с правами доступа на чтение или запись метрик.
Поддерживаются следующие сценарии:
- чтение метрик кластера — доступ к системным метрикам всего кластера;
- чтение метрик проекта — доступ к метрикам конкретного неймспейса через Prometheus-совместимый API;
- запись метрик — отправка метрик из внешних источников по протоколу Prometheus Remote-Write.
Внешний доступ для чтения метрик кластера
Чтобы предоставить внешний доступ к метрикам кластера, выполните следующие шаги:
-
Разрешите внешний доступ к метрикам. Для этого включите параметр
externalMetricsAccessв настройках модуля. -
Создайте 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 -
Предоставьте права на чтение метрик созданному 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 -
Получите авторизационный токен для доступа к метрикам.
При создании ServiceAccount был создан секрет с токеном. Токен хранится в виде Base64-строки. Чтобы извлечь его и раскодировать, выполните следующую команду:
d8 k -n my-namespace get secret cluster-metrics-access -ojsonpath='{ .data.token }' | base64 -dЭтот токен потребуется на следующем шаге для настройки источника данных (data source) в Grafana.
-
Настройте доступ к метрикам во внешней 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>— это токен, полученный из секрета на предыдущем шаге.
Внешний доступ для чтения метрик проекта
Чтобы предоставить внешний доступ к метрикам проекта, выполните следующие шаги:
-
Разрешите внешний доступ к метрикам. Для этого включите параметр
externalMetricsAccessв настройках модуля. -
Создайте 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 -
Предоставьте права на чтение метрик созданному 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 -
Получите авторизационный токен для доступа к метрикам.
При создании ServiceAccount был создан секрет с токеном. Токен хранится в виде Base64-строки. Чтобы извлечь его и раскодировать, выполните следующую команду:
d8 k -n my-namespace get secret metrics-access -ojsonpath='{ .data.token }' | base64 -dЭтот токен потребуется на следующем шаге для настройки источника данных (data source) в Grafana.
-
Настройте доступ к метрикам во внешней 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>— это токен, полученный из секрета на предыдущем шаге.
Внешний доступ для записи метрик
Чтобы предоставить внешний доступ для записи метрик, выполните следующие шаги:
-
Разрешите внешний доступ к метрикам. Для этого включите параметр
externalMetricsAccessв настройках модуля. -
Создайте 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 -
Предоставьте права на запись метрик созданному 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 -
Получите авторизационный токен для записи метрик.
При создании ServiceAccount был создан секрет с токеном. Токен хранится в виде Base64-строки. Чтобы извлечь его и раскодировать, выполните следующую команду:
d8 k -n my-namespace get secret metrics-access -ojsonpath='{ .data.token }' | base64 -d -
Для записи метрик отправляйте запросы по протоколу Prometheus Remote-Write V1 или V2, используя следующие параметры:
URL— адрес внешнего эндпоинта для записи метрик в форматеhttps://observability.%publicDomainTemplate%/api/v1/write, где:%publicDomainTemplate%— шаблон DNS-имен вашего кластера, заданный в глобальных настройках DKP.
HTTP Headers— дополнительные HTTP-заголовки для авторизации:Header:Authorization.Value: Bearer <TOKEN_VALUE>, где<TOKEN_VALUE>— это токен, полученный из секрета на предыдущем шаге.