跳转至

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

示例

resource "grafana_dashboard" "metrics" {
  config_json = jsonencode({
    title   = "as-code dashboard"
    uid     = "ascode"
  })
}

Grafana Ansible collection

基于 Ansible 的 Grafana Ansible collection

安装

ansible-galaxy collection install community.grafana

使用示例

- 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, 创建 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
}