Python 自动创建 Grafana 仪表板

DevOps技术栈

共 2586字,需浏览 6分钟

 ·

2020-09-03 13:01

来源:https://medium.com/swlh/

Grafana 是一个功能非常强大的图表可视化工具,可以通过仪表盘轻松地将多个数据源的指标/日志数据进行可视化。有关其功能的更多介绍,可以查看官网 https://grafana.com/ 的相关说明。创建一个仪表盘并不是非常困难,但是我们需要手动去点击每个图表的设置项去进行配置,这个过程比较繁琐,我们希望有更加工程化的工具来做这个事情。

标准的 Dashboard

Grafana 的 Dashboard 是通过 JSON 格式的数据提供的,我们大部分都会创建 Dashboard,然后将其粘贴到保存 Dashboard 的文件夹中,如果你也同样使用 prometheus-operator 的话,则需要更新到对应的 ConfigMap 中去。

调整 Dashboard 后对应的 JSON 模型

这种复制粘贴 Dashboard 的过程中,我们会经常在手动去更改 JSON 文件中的一些值的时候出错,如何让这个过程更加方便,减少错误,增加一些版本记录呢?

在本文中,我们将使用 Prometheus 数据源和 prometheus-operator,你可以通过一些小的调整来适配你的监控栈方案。

使用 Grafanalib

Grafanalib 是一个开源的 Python 库,我们可以使用这个库来对 Dashboard 进行编码,编码后的 Dashboard 会生成对应的 JSON 数据。首先安装这个依赖库:

$ pip install grafanalib

然后获取一个 Python 编写的基本 Dashboard:

$ curl -o example-core.dashboard.py \https://gist.githubusercontent.com/KamilSwiech/bd170b3724819fd14531b4bf36fee8da/raw/d705749745ceffefe86ee775c1e135a4aed95d01/example-core.dashboard.py

然后我们查看 example-core.dashboard.py 文件的内容:

from grafanalib.core import (    Dashboard, Graph,    OPS_FORMAT, Row,    single_y_axis, Target, TimeRange, YAxes, YAxis)
dashboard = Dashboard( title="Python generated dashboard", rows=[ Row(panels=[ Graph( title="Prometheus http requests", dataSource='default', targets=[ Target( expr='rate(prometheus_http_requests_total[5m])', legendFormat="{{ handler }}", refId='A', ), ], yAxes=single_y_axis(format=OPS_FORMAT), ), ]), ],).auto_panel_ids()

其中有两个地方值得注意:

  1. dataSource:指定 Grafana 中数据源的名称

  1. expr:查询表达式,我们这里使用 Prometheus,也就是对应的 PromQL 语句

如果需要则调整相关的字段,然后使用 Grafanalib 自带的二进制来创建 JSON 文件:

$ generate-dashboard -o test.json example-core.dashboard.py

这样我们就有了一个简单的 Dashboard 了,由于我这里使用的是 prometheus-operator,所以还需要做额外的配置,我这里已经创建了包含 json 数据的 ConfigMap,包含指定的标签和命名空间,并将其保存到 yaml 文件中,因为我这里使用了 GitOps 来做持续部署,所以只需要保存到 yaml 文件而不是直接创建到集群中:

$ kubectl create cm test -n prometheus-operator --from-file=test.json -o yaml --dry-run | \kubectl label -f- --dry-run -o yaml --local grafana_dashboard="1" > test.yaml

得到 yaml 文件后直接提交变更到 git 后,新的 Dashboard 就可以使用了。

使用 Python 和 grafanalib 生成的 dashbord

使用这种可编程的方式来生成 Dashboard 显然更加工程化,而且我们还可以将代码提交到 git 仓库中进行版本管理,然后再结合 GitOps 就完成可以将这个过程自动化了。

- END -


 推荐阅读 
强大的 iptables 在 K8s 中的应用剖析

Python 调用 Kubernetes API 自动化管理资源

大型网站技术架构的演进之路

Ceph分布式存储日常运维管理

30个Python极简代码,10分钟get常用技巧!

部署一套完整的Kubernetes高可用集群(二进制)

10 分钟部署一个 Kubernetes 集群

从网管到架构师再到微创业,我这9年的成长感悟



点亮,服务器三年不宕机

浏览 102
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报