Управление панелями Grafana с помощью GitOps и ArgoCD
В этом руководстве показано, как настроить конвейер непрерывного развёртывания с помощью ArgoCD для синхронизации ваших панелей Grafana с репозиторием Git. Вы будете использовать пользовательский ресурс Grafana Dashboard, предоставляемый Grafana Operator, для декларативного управления конфигурациями панелей.
Предварительные требования
Перед началом убедитесь, что у вас есть следующее:
- Существующий стек Grafana Cloud
- Кластер Kubernetes с установленным Grafana Operator, как показано в разделе Grafana Operator Installation
- ArgoCD, установленный в вашем кластере Kubernetes. Обратитесь к ArgoCD Installation Guide
- Репозиторий Git для хранения конфигураций панелей
Настройка репозитория Git
Создайте в репозитории структуру каталогов для организации конфигураций Grafana и панелей. В этом руководстве создайте папку с именем grafana.
Настройка Grafana Operator
Grafana Operator позволяет аутентифицироваться в экземпляре Grafana с помощью пользовательского ресурса (CR) Grafana.
Создание секрета с токеном API Grafana
Сохраните токен API Grafana в секрете. Создайте файл с именем grafana-token.yml в папке grafana вашего репозитория Git:
apiVersion: v1
kind: Secret
metadata:
name: grafana-cloud-credentials
namespace: '<GRAFANA_OPERATOR_NAMESPACE>'
stringData:
GRAFANA_CLOUD_INSTANCE_TOKEN: '<GRAFANA_API_KEY>'
type: Opaque
Замените заполнители своими значениями:
<GRAFANA_API_KEY>: ключ API вашего экземпляра Grafana. Чтобы создать ключ API, обратитесь к Grafana API Key Documentation<GRAFANA_OPERATOR_NAMESPACE>: пространство имён, в котором развёрнутgrafana-operatorв вашем кластере Kubernetes
Настройка пользовательского ресурса Grafana
Настройте подключение к вашему экземпляру Grafana Cloud. Создайте файл с именем grafana-cloud.yml в папке grafana вашего репозитория Git:
apiVersion: grafana.integreatly.org/v1beta1
kind: Grafana
metadata:
name: '<GRAFANA_CLOUD_STACK_NAME>'
namespace: '<GRAFANA_OPERATOR_NAMESPACE>'
labels:
dashboards: '<GRAFANA_CLOUD_STACK_NAME>'
spec:
external:
url: https://<GRAFANA_CLOUD_STACK_NAME>.grafana.net/
apiKey:
name: grafana-cloud-credentials
key: GRAFANA_CLOUD_INSTANCE_TOKEN
Замените заполнители своими значениями:
<GRAFANA_CLOUD_STACK_NAME>: имя вашего стека Grafana Cloud<GRAFANA_OPERATOR_NAMESPACE>: пространство имён, в котором развёрнутgrafana-operatorв вашем кластере Kubernetes
Добавление панелей в репозиторий Git
В вашем каталоге grafana создайте подпапку с именем dashboards.
В этом руководстве показано, как создать три отдельные панели. Во всех конфигурациях панелей замените заполнители своими значениями:
<GRAFANA_CLOUD_STACK_NAME>: имя вашего стека Grafana Cloud<GRAFANA_OPERATOR_NAMESPACE>: пространство имён, в котором развёрнутgrafana-operatorв вашем кластере Kubernetes
Создание простой панели
В папке dashboards создайте файл с именем simple-dashboard.yaml:
apiVersion: grafana.integreatly.org/v1beta1
kind: GrafanaDashboard
metadata:
name: grafanadashboard-sample
namespace: '<GRAFANA_OPERATOR_NAMESPACE>'
spec:
resyncPeriod: 30s
instanceSelector:
matchLabels:
dashboards: '<GRAFANA_CLOUD_STACK_NAME>'
json: >
{
"id": null,
"title": "Simple Dashboard",
"tags": [],
"style": "dark",
"timezone": "browser",
"editable": true,
"hideControls": false,
"graphTooltip": 1,
"panels": [],
"time": {
"from": "now-6h",
"to": "now"
},
"timepicker": {
"time_options": [],
"refresh_intervals": []
},
"templating": {
"list": []
},
"annotations": {
"list": []
},
"refresh": "5s",
"schemaVersion": 17,
"version": 0,
"links": []
}
Создание панели из ConfigMap
В папке dashboards создайте файл с именем dashboard-from-cm.yaml:
apiVersion: v1
kind: ConfigMap
metadata:
name: dashboard-definition
namespace: <GRAFANA_OPERATOR_NAMESPACE>
data:
json: >
{
"id": null,
"title": "Simple Dashboard from ConfigMap",
"tags": [],
"style": "dark",
"timezone": "browser",
"editable": true,
"hideControls": false,
"graphTooltip": 1,
"panels": [],
"time": {
"from": "now-6h",
"to": "now"
},
"timepicker": {
"time_options": [],
"refresh_intervals": []
},
"templating": {
"list": []
},
"annotations": {
"list": []
},
"refresh": "5s",
"schemaVersion": 17,
"version": 0,
"links": []
}
---
apiVersion: grafana.integreatly.org/v1beta1
kind: GrafanaDashboard
metadata:
name: grafanadashboard-from-configmap
namespace: '<GRAFANA_OPERATOR_NAMESPACE>'
spec:
instanceSelector:
matchLabels:
dashboards: '<GRAFANA_CLOUD_STACK_NAME>'
configMapRef:
name: dashboard-definition
key: json
Создание панели с Grafana.com
В папке dashboards создайте файл с именем dashboard-from-id.yaml:
apiVersion: grafana.integreatly.org/v1beta1
kind: GrafanaDashboard
metadata:
name: node-exporter-latest
namespace: '<GRAFANA_OPERATOR_NAMESPACE>'
spec:
instanceSelector:
matchLabels:
dashboards: '<GRAFANA_CLOUD_STACK_NAME>'
grafanaCom:
id: 1860
Настройка ArgoCD для синхронизации репозитория Git
После того как вы зафиксируете все изменения в Git, войдите в интерфейс ArgoCD или используйте CLI.
Создание приложения ArgoCD
В интерфейсе:
- Перейдите в New App и заполните форму, указав данные вашего репозитория Git и путь к папке
grafana - Включите Directory Recurse
- Установите политику синхронизации Automatic
С помощью CLI:
Подготовьте манифест приложения с именем argo-application.yaml:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: Grafana
namespace: '<ARGOCD_NAMESPACE>'
spec:
destination:
name: ''
namespace: ''
server: 'https://kubernetes.default.svc'
source:
path: '<PATH_TO_GRAFANA_FOLDER>'
repoURL: '<GIT_REPO_URL>'
targetRevision: HEAD
directory:
recurse: true
sources: []
project: default
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
retry:
limit: 2
backoff:
duration: 5s
maxDuration: 3m0s
factor: 2
Замените заполнители своими значениями:
<GIT_REPO_URL>: URL вашего репозитория Git<PATH_TO_GRAFANA_FOLDER>: путь к папкеgrafanaв вашем репозитории<ARGOCD_NAMESPACE>: пространство имён, в котором развёрнут ArgoCD в вашем кластере Kubernetes
Создайте приложение в ArgoCD:
kubectl apply -f argo-application.yaml
Проверка состояния синхронизации в ArgoCD
- Отслеживайте только что созданное приложение ArgoCD, чтобы убедиться, что оно успешно синхронизирует конфигурацию вашей панели
- Откройте панель ArgoCD и проверьте состояние синхронизации. Если она успешна, ваши панели Grafana должны соответствовать конфигурации из вашего репозитория Git
Обновление панелей
Чтобы обновить существующую панель:
- Внесите изменения в конфигурацию JSON панели в вашем репозитории Git
- Зафиксируйте и отправьте изменения
- ArgoCD обнаруживает обновление и синхронизирует изменения с вашим пользовательским ресурсом
- Затем Grafana Operator синхронизирует изменения с экземпляром Grafana
Проверка обновлений панели
Войдите в свою панель Grafana и убедитесь, что изменения применены. Вы должны увидеть обновления панели, отражённые в интерфейсе Grafana.
Дальнейшие шаги
Вы успешно настроили рабочий процесс GitOps для управления панелями Grafana с помощью ArgoCD и Grafana Operator. Теперь ваши панели контролируются версиями и могут последовательно развёртываться в разных средах. Такой подход обеспечивает надёжный и проверяемый способ управления панелями наблюдаемости и масштабирования ваших операций.
Чтобы узнать больше об управлении Grafana с помощью Grafana Operator:
Дополнительные замечания
- Вы можете установить Helm-чарт Grafana Operator с помощью ArgoCD, чтобы управлять своей конфигурацией по методологии GitOps
- Аналогичным образом можно настроить работу с папками Grafana и другими ресурсами