<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python 自動(dòng)創(chuàng)建 Grafana 儀表板

          共 2586字,需瀏覽 6分鐘

           ·

          2020-09-03 13:01

          來(lái)源:https://medium.com/swlh/

          Grafana 是一個(gè)功能非常強(qiáng)大的圖表可視化工具,可以通過(guò)儀表盤輕松地將多個(gè)數(shù)據(jù)源的指標(biāo)/日志數(shù)據(jù)進(jìn)行可視化。有關(guān)其功能的更多介紹,可以查看官網(wǎng) https://grafana.com/ 的相關(guān)說(shuō)明。創(chuàng)建一個(gè)儀表盤并不是非常困難,但是我們需要手動(dòng)去點(diǎn)擊每個(gè)圖表的設(shè)置項(xiàng)去進(jìn)行配置,這個(gè)過(guò)程比較繁瑣,我們希望有更加工程化的工具來(lái)做這個(gè)事情。

          標(biāo)準(zhǔn)的 Dashboard

          Grafana 的 Dashboard 是通過(guò) JSON 格式的數(shù)據(jù)提供的,我們大部分都會(huì)創(chuàng)建 Dashboard,然后將其粘貼到保存 Dashboard 的文件夾中,如果你也同樣使用 prometheus-operator 的話,則需要更新到對(duì)應(yīng)的 ConfigMap 中去。

          調(diào)整 Dashboard 后對(duì)應(yīng)的 JSON 模型

          這種復(fù)制粘貼 Dashboard 的過(guò)程中,我們會(huì)經(jīng)常在手動(dòng)去更改 JSON 文件中的一些值的時(shí)候出錯(cuò),如何讓這個(gè)過(guò)程更加方便,減少錯(cuò)誤,增加一些版本記錄呢?

          在本文中,我們將使用 Prometheus 數(shù)據(jù)源和 prometheus-operator,你可以通過(guò)一些小的調(diào)整來(lái)適配你的監(jiān)控棧方案。

          使用 Grafanalib

          Grafanalib 是一個(gè)開源的 Python 庫(kù),我們可以使用這個(gè)庫(kù)來(lái)對(duì) Dashboard 進(jìn)行編碼,編碼后的 Dashboard 會(huì)生成對(duì)應(yīng)的 JSON 數(shù)據(jù)。首先安裝這個(gè)依賴庫(kù):

          $ pip install grafanalib

          然后獲取一個(gè) Python 編寫的基本 Dashboard:

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

          然后我們查看 example-core.dashboard.py 文件的內(nèi)容:

          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()

          其中有兩個(gè)地方值得注意:

          1. dataSource:指定 Grafana 中數(shù)據(jù)源的名稱

          1. expr:查詢表達(dá)式,我們這里使用 Prometheus,也就是對(duì)應(yīng)的 PromQL 語(yǔ)句

          如果需要?jiǎng)t調(diào)整相關(guān)的字段,然后使用 Grafanalib 自帶的二進(jìn)制來(lái)創(chuàng)建 JSON 文件:

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

          這樣我們就有了一個(gè)簡(jiǎn)單的 Dashboard 了,由于我這里使用的是 prometheus-operator,所以還需要做額外的配置,我這里已經(jīng)創(chuàng)建了包含 json 數(shù)據(jù)的 ConfigMap,包含指定的標(biāo)簽和命名空間,并將其保存到 yaml 文件中,因?yàn)槲疫@里使用了 GitOps 來(lái)做持續(xù)部署,所以只需要保存到 yaml 文件而不是直接創(chuàng)建到集群中:

          $ 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

          使用這種可編程的方式來(lái)生成 Dashboard 顯然更加工程化,而且我們還可以將代碼提交到 git 倉(cāng)庫(kù)中進(jìn)行版本管理,然后再結(jié)合 GitOps 就完成可以將這個(gè)過(guò)程自動(dòng)化了。

          - END -


          ?推薦閱讀?
          強(qiáng)大的 iptables 在 K8s 中的應(yīng)用剖析

          Python 調(diào)用 Kubernetes API 自動(dòng)化管理資源

          大型網(wǎng)站技術(shù)架構(gòu)的演進(jìn)之路

          Ceph分布式存儲(chǔ)日常運(yùn)維管理

          30個(gè)Python極簡(jiǎn)代碼,10分鐘get常用技巧!

          部署一套完整的Kubernetes高可用集群(二進(jìn)制)

          10 分鐘部署一個(gè) Kubernetes 集群

          從網(wǎng)管到架構(gòu)師再到微創(chuàng)業(yè),我這9年的成長(zhǎng)感悟



          點(diǎn)亮,服務(wù)器三年不宕機(jī)

          瀏覽 121
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中字三级视频网站在线观看 | 91牛网站| 成人电影伊人网 | 高潮视频网站在线 | 黄网在线|