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