
用 Kubernetes 资源创建 Grafana Dashboard
作者 |阳明
来源 | k8s技术圈(ID:kube100)
我们在使用 Grafana Dashboard 来展示我们的监控图表的时候,很多时候我们都是去找别人已经做好的 Dashboard 拿过来改一改,但是这样也造成了很多使用 Grafana 的人员压根不知道如何去自定义一个 Dashboard,虽然这并不是很困难。这里我们介绍一个比较新颖(骚)的工具:DARK(https://github.com/K-Phoen/dark),通过 Kubernetes 的资源对象来定义 Grafana Dashboard,实现原理也很简单,也就是通过 CRD 来定义 Dashboard,然后通过和 Grafana 的 API Token 进行交互实现 Dashboard 的 CRUD。
下面我们来看下如何使用 DARK 定义 Grafana Dashboard。首先 Clone 项目代码:
然后安装 CRD 资源:
然后通过 Secret 对象创建 Grafana 的 API KEYS,在 Grafana 主界面中,选择左侧的配置菜单 -> API Keys 创建 API Keys,选择 Editor 的角色:
创建完成后会弹出一个对话框显示对应的 APIKeys,使用这个 KEY 来创建一个对应的 Secret 对象:
然后修改 k8s/cluster-role.yaml 文件,如下所示:
然后创建上面的资源对象:
修改 k8s/deployment.yaml 文件,将 GRAFANA_HOST 环境变量修改成自己的 Grafana 的地址,由于我这里 Grafana 也安装在 Kubernetes 集群中的,所以直接用 DNS 形式配置,然后加上上面创建的 dark 这个 ServiceAccount:
修改完成后直接创建上面的 Controller:
现在 Controller 定义好过后,实际上我们就可以去通过 CRD 对象来定义 Grafana Dashboard 了,如下所示定义了一个 GrafanaDashboard 对象,在对象中我们完全就可以根据自己的需求去定义内容了,比如定义 annotations、 variables、 graph、 table 都可以,当然最重要的还是数据源要正确,以及查询语句:(example-dashboards.yaml)
同样直接创建上面的示例文件:
在 Controller 中也可以看到对应的日志信息,资源对象创建成功以后,现在去 Grafana 页面上查看可以看到已经新增了一个 Test folder 的文件夹以及 Awesome dashboard:
查看 Dashboard 就可以看到和上面 CRD 中定义的各种图表信息了:
这样我们就使用 Kubernetes 资源对象去定义了 Grafana Dashboard 了,这种方式比直接在页面上去手动配置显然要更优雅,也符合 Everything AS Code 的思想🤯。
