GaC方案
GaC
GaC(Grafana as Code, Grafana 即代码)
Grafana 即代码 (Grafana as Code, GaC) 是指通过 代码 而不是手动流程 / 控制台点击来管理和配置 Grafana
Grafana 是被管理对象
可选方案
官方 blog:https://grafana.com/docs/grafana-cloud/developer-resources/infrastructure-as-code/
Grafana Terraform provider
基于 Terraform 的 Grafana Terraform provider
-
https://registry.terraform.io/providers/grafana/grafana/latest
-
https://grafana.com/docs/grafana-cloud/developer-resources/infrastructure-as-code/terraform/
示例
resource "grafana_dashboard" "metrics" {
config_json = jsonencode({
title = "as-code dashboard"
uid = "ascode"
})
}
Grafana Ansible collection
基于 Ansible 的 Grafana Ansible collection
安装
使用示例
- name: dashboard as code
grafana.grafana.dashboard:
dashboard: {
"title": "as-code dashboard",
"uid": "ascode"
}
stack_slug: "{{ stack_slug }}"
grafana_api_key: "{{ grafana_api_key }}"
state: present
Kubernetes Grafana Operator
Grafana Operator 是一个 Kubernetes Operator,用于配置和管理 Grafana 及其使用 Kubernetes CR 的资源。它是一个由 Grafana 社区建立的 Kubernetes 原生解决方案。它还可以把在 Grafonnet 中构建的仪表盘作为仪表盘配置的来源。
使用 Grafana Operator 创建仪表盘的 Kubernetes 配置示例
apiVersion: integreatly.org/v1alpha1
kind: GrafanaDashboard
metadata:
name: simple-dashboard
labels:
app: grafana
spec:
json: >
{
"title": "as-code dashboard",
“uid” : “ascode”
}
Grizzly
Grizzly 是一个命令行工具,允许用代码管理可观察性资源。Grizzly 支持 Kubernetes 启发的 YAML 表示的 Grafana 资源,这使得它更容易熟悉。Grizzly 支持在 Grafana 实例内移动仪表盘,也可以检索已经配置的 Grafana 资源的信息
示例
Copy code to clipboard
apiVersion: grizzly.grafana.com/v1alpha1
kind: Dashboard
metadata:
name: as-code-dashboard
spec:
title: as-code dashboard
uid: ascode
基于 API 的定制化开发
官方 API:
- Grafana API,https://grafana.com/docs/grafana/latest/developers/http_api/,最底层的 API 接口
- grafana-api-golang-client,https://github.com/grafana/grafana-api-golang-client,基于 Grafana API 的低级别的 golang 客户端,也是 Grafana Terraform provider 的底层实现,示例 https://github.com/grafana/grafana-api-golang-client/blob/master/dashboard_test.go
如果使用 Grafana API, 创建 Dashboard 的示例如下
POST /api/dashboards/db HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
{
"dashboard": {
"id": null,
"uid": null,
"title": "Production Overview",
"tags": [ "templated" ],
"timezone": "browser",
"schemaVersion": 16,
"version": 0,
"refresh": "25s"
},
"folderId": 0,
"folderUid": "l3KqBxCMz",
"message": "Made changes to xyz",
"overwrite": false
}