使用 Python 创建 Grafana Dashboards

k8s技术圈

共 2451字,需浏览 5分钟

 ·

2020-08-25 20:25

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 就完成可以将这个过程自动化了。

?

原文链接:https://medium.com/swlh/create-grafana-dashboards-with-python-14a6962eb06c




K8S进阶训练营,点击下方图片了解详情

浏览 127
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

分享
举报