Перейти к содержанию

Grafana Operator для Kubernetes


Если Grafana развёрнута в Kubernetes, можно идти ещё дальше. Grafana Operator — это приложение, которое работает как контроллер Kubernetes и автоматизирует Provisioning всех ресурсов Grafana, превращая их в нативные Kubernetes-объекты.

Теперь вместо того, чтобы отдельно писать datasource.yml и dashboard.json и монтировать их в под, вы описываете Custom Resources и оператор сам всё делает через API Grafana.


Как это работает

Оператор устанавливается из Helm-чарта:

helm repo add grafana https://grafana.github.io/helm-charts
helm install grafana-operator grafana/grafana-operator

Оператор следит за namespace'ами на предмет Custom Resources определённого типа. Когда вы создаёте объект, оператор вызывает API Grafana через Service Account Token и обеспечивает соответствие желаемого состояния фактическому.


Основные Custom Resources

GrafanaDataSource

apiVersion: grafana.integreatly.org/v1beta1
kind: GrafanaDataSource
metadata:
  name: prometheus-datasource
spec:
  datasource:
    name: Prometheus
    type: prometheus
    url: http://prometheus-kube-prometheus-prometheus.monitoring:9090
    access: proxy
    isDefault: true
    jsonData:
      timeInterval: 15s

GrafanaDashboard

apiVersion: grafana.integreatly.org/v1beta1
kind: GrafanaDashboard
metadata:
  name: kubernetes-overview
spec:
  json: |
    {
      "title": "K8s overview",
      "panels": [...]
    }
  folderUID: "abc-123"

Здесь json — содержимое JSON-файла дашборда.


GrafanaAlertRule

apiVersion: grafana.integreatly.org/v1beta1
kind: GrafanaAlertRule
metadata:
  name: high-cpu
spec:
  folderUID: "federal"
  ruleGroup: main
  orgId: 1
  for: 5m
  condition: B
  data:
    - refId: A
      relativeTimeRange:
        from: 600
        to: 0
      model:
        expr: avg by(instance) (rate(node_cpu_seconds_total{mode!="idle"}[5m])) > 0.9

GrafanaContactPoint

apiVersion: grafana.integreatly.org/v1beta1
kind: GrafanaContactPoint
metadata:
  name: telegram-oncall
spec:
  name: telegram-oncall
  type: telegram
  settings:
    chatid: "-oncall"
    bottoken__secret:
      name: telegram-bot-token
      key: token


Когда использовать Operator

Operator идеален когда:

  • Вы уже используете Kubernetes для всего и хотите единый подход
  • Дашбордов много (>50) и нужно автоматизировать их полный жизненный цикл (создание, обновление, удаление)
  • Разные команды в кластере хотят управлять своими дашбордами независимо, через CI/CD, через Helm

В противном случае для простых сетапов достаточно классического file-based provisioning в ConfigMap.



Следующая часть: Best Practices