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

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

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

Виды дашбордов

Поддерживаются три типа дашбордов:

Тип дашбордов Область видимости У кого есть доступ
Системные дашборды (ClusterObservabilityDashboard) Уровень кластера Администраторы DKP
Проектные дашборды (ObservabilityDashboard) Уровень проекта (неймспейса) Пользователи соответствующего проекта
Общедоступные (propagated) дашборды (ClusterObservabilityPropagatedDashboard) Создаются на уровне кластера и автоматически доступны во всех проектах Пользователи всех проектов (в режиме чтения)

Описание дашбордов:

  • Системные дашборды (ClusterObservabilityDashboard) — используются для визуализации метрик кластера. Доступны в веб-интерфейсе Deckhouse в разделе «Система» → «Управление системой» → «Мониторинг» → «Дашборды». Создаются и управляются администраторами DKP.

  • Проектные дашборды (ObservabilityDashboard) — предназначены для визуализации метрик конкретного проекта (неймспейса). Доступны в соответствующем проекте в разделе «Мониторинг» → «Дашборды». Пользователи проекта могут создавать и редактировать такие дашборды в рамках настроенных прав доступа.

  • Общедоступные (propagated) дашборды (ClusterObservabilityPropagatedDashboard) — создаются на уровне кластера и автоматически становятся доступными во всех проектах. Используются для предоставления единых дашбордов (например, поставляемых модулями DKP) всем пользователям. Доступны пользователям всех проектов в режиме чтения.

Разграничение прав доступа к дашбордам

Доступ к дашбордам настраивается с помощью механизмов действующей ролевой модели (RBAC).

В зависимости от типа дашборда, права назначаются на следующие ресурсы:

  • clusterobservabilitydashboards.observability.deckhouse.io — системные дашборды;
  • observabilitydashboards.observability.deckhouse.io — дашборды в рамках неймспейса;
  • clusterobservabilitypropagateddashboards.observability.deckhouse.io — дашборды, распространяемые на всех пользователей.

Для выполнения операций с дашбордами требуются следующие разрешения:

  • чтение — get;
  • создание и редактирование — create, update, patch, delete.

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

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

  • Пользователи неймспейсов получают доступ только к метрикам своего неймспейса. Проверяется RBAC-доступ к ресурсу metrics.observability.deckhouse.io.

  • Администраторы DKP получают доступ ко всем системным метрикам:

    • метрики Deckhouse (d8-*);
    • метрики Kubernetes (kube-*);
    • метрики без лейбла namespace.

    Используется RBAC-доступ к ресурсу clustermetrics.observability.deckhouse.io.

  • Метрики из пользовательских неймспейсов также могут быть доступны администраторам при наличии соответствующих прав на ресурс metrics.observability.deckhouse.io.

Пример настройки ресурсов ClusterRole и RoleBinding для доступа к метрикам и дашбордам на чтение и редактирование:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: observability-editor
rules:
  - apiGroups: ["observability.deckhouse.io"]
    resources: ["metrics", "observabilitydashboards"]
    verbs: ["get", "list", "watch"]
  - apiGroups: ["observability.deckhouse.io"]
    resources: ["observabilitydashboards"]
    verbs: ["create", "update", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: bind-observability-editor
  namespace: my-namespace
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: observability-editor
subjects:
  - kind: User
    name: user@example.com
    apiGroup: rbac.authorization.k8s.io

Конвертация дашбордов из GrafanaDashboardDefinition

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

Формат GrafanaDashboardDefinition Формат модуля observability
Папка в Grafana для отображения дашборда задается в поле spec.folder. Папка задается с помощью аннотации observability.deckhouse.io/category.
Название дашборда задается в поле title JSON-манифеста. Название задаётся с помощью аннотации observability.deckhouse.io/title. Если аннотация отсутствует, используется поле title из JSON-манифеста.

Пример конвертации:

  • Старый формат:

    apiVersion: deckhouse.io/v1
    kind: GrafanaDashboardDefinition
    metadata:
      name: example-dashboard
    spec:
      folder: "Apps"
      json: '{
        "title": "Example Dashboard",
        ...
      }'
  • Новый формат:

    apiVersion: observability.deckhouse.io/v1alpha1
    kind: ObservabilityDashboard
    metadata:
      name: example-dashboard
      namespace: my-namespace
      annotations:
        metadata.deckhouse.io/category: "Apps"
        metadata.deckhouse.io/title: "Example Dashboard"
    spec:
      definition: |
        {
          "title": "Example Dashboard",
          ...
        }