首页 文章详情

Python 自动创建 Grafana 仪表板

DevOps技术栈 | 1296 2020-09-03 13:01 0 0 0
UniSMS (合一短信)

来源: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年的成长感悟



点亮,服务器三年不宕机

good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter