天天看點

【Web開發】Python實作Web儀表盤功能(Grafana)

文章目錄
  • 1、簡介
  • 1.1 為什麼選擇Grafana
  • 1.1.1 統一資料,而不是資料庫
  • 1.1.2 每個人都可以看到的資料
  • 1.1.3 任何人都可以使用的儀表闆
  • 1.1.4 靈活性和多功能性
  • 1.2 Grafana特點
  • 1.2.1 圖表
  • 1.2.2 插件
  • 1.2.3 警報
  • 1.2.4 轉換
  • 1.2.5 附注
  • 1.2.6 面闆編輯器
  • 2、Grafana Cloud
  • 3、Grafana 本地
  • 3.1 安裝
  • 3.2 配置
  • 3.3 插件
  • 3.4 運作
  • 4、Grafana 功能
  • 4.1 資料源(Data sources)
  • 4.2 儀表闆(Dashboards)
  • 4.3 面闆(Panels)
  • 4.4 可視化(Visualizations)
  • 5、快速入門
  • 5.1 Build your first dashboard
  • 5.1.1 Install Grafana
  • 5.1.2 Sign in to Grafana
  • 5.1.3 Create a dashboard
  • 5.1.4 Add a data source
  • 6、Python庫
  • 6.1 grafanalib
  • 6.2 grafana-dashboards-builder
  • 結語

1、簡介

​​https://grafana.com/​​

Dashboard anything. Observe everything.

Query, visualize, alert on, and understand your data no matter where it’s stored. With Grafana you can create, explore, and share all of your data through beautiful, flexible dashboards.

Grafana 是一個監控儀表系統,它是由 Grafana Labs 公司開源的的一個系統監測 (System Monitoring) 工具。它可以大大幫助你簡化監控的複雜度,你隻需要提供你需要監控的資料,它就可以幫你生成各種可視化儀表。同時它還有報警功能,可以在系統出現問題時通知你。

Grafana是用于可視化大型測量資料的開源程式,他提供了強大和優雅的方式去建立、共享、浏覽資料。dashboard中顯示了你不同metric資料源中的資料。

Grafana是一個開源的,擁有豐富dashboard和圖表編輯的名額分析平台,和Kibana不同的是Grafana專注于時序類圖表分析,而且支援多種資料源,如Graphite、InfluxDB、Elasticsearch、Mysql、K8s、Zabbix等。

Grafana是一款用Go語言開發的開源資料可視化工具,可以做資料監控和資料統計,帶有告警功能。目前使用Grafana的公司有很多,如paypal、ebay、intel等。

【Web開發】Python實作Web儀表盤功能(Grafana)

Grafana允許您查詢,可視化,警報和了解您的名額,無論它們存儲在何處。建立、探索并與團隊共享精美的儀表闆,并培養資料驅動型文化。最簡單的入門方法是使用Grafana雲,這是我們完全可組合的可觀察性堆棧。

【Web開發】Python實作Web儀表盤功能(Grafana)

1.1 為什麼選擇Grafana

1.1.1 統一資料,而不是資料庫

Grafana 不需要您将資料引入後端存儲或供應商資料庫。相反,Grafana采用一種獨特的方法,通過統一現有資料來提供“單一管理平台”,無論資料位于何處。

使用Grafana,您可以擷取任何現有資料 - 無論是來自Kubernetes叢集,樹莓派,不同的雲服務,甚至是Google表格 - 并根據需要将其可視化,所有這些都來自一個儀表闆。

【Web開發】Python實作Web儀表盤功能(Grafana)
1.1.2 每個人都可以看到的資料

Grafana 建立在以下原則之上:組織中的每個人都可以通路資料,而不僅僅是單個 Ops 人員。

通過使資料民主化,Grafana有助于促進一種文化,在這種文化中,資料可以很容易地被需要它的人使用和通路,幫助打破資料孤島并賦予團隊權力。

1.1.3 任何人都可以使用的儀表闆

Grafana 儀表闆不僅為從衆多來源收集的資料賦予了富有洞察力的含義,而且您還可以與其他團隊成員共享您建立的儀表闆,進而可以一起浏覽資料。

借助Grafana,任何人都可以建立和共享動态儀表闆,以促進協作和透明度。

1.1.4 靈活性和多功能性

将任何資料轉換并轉換為靈活多樣的儀表闆。與其他工具不同,Grafana允許您專門為您和您的團隊建構儀表闆。

借助進階查詢和轉換功能,您可以自定義面闆以建立對您真正有幫助的可視化效果。

1.2 Grafana特點

可視化:快速和靈活的用戶端圖形具有多種選項。面闆插件為許多不同的方式可視化名額和日志。

報警:可視化地為最重要的名額定義警報規則。Grafana将持續評估它們,并發送通知。

通知:警報更改狀态時,它會發出通知。接收電子郵件通知。

動态儀表盤:使用模闆變量建立動态和可重用的儀表闆,這些模闆變量作為下拉菜單出現在儀表闆頂部。

混合資料源:在同一個圖中混合不同的資料源!可以根據每個查詢指定資料源。這甚至适用于自定義資料源。

注釋:注釋來自不同資料源圖表。将滑鼠懸停在事件上可以顯示完整的事件中繼資料和标記。

過濾器:過濾器允許您動态建立新的鍵/值過濾器,這些過濾器将自動應用于使用該資料源的所有查詢。

1.2.1 圖表

從熱圖到直方圖。地理地圖的圖形。Grafana 具有快速靈活的可視化功能,可讓您以任何您想要的方式可視化資料。

【Web開發】Python實作Web儀表盤功能(Grafana)
1.2.2 插件

使用格拉法納插件連接配接您的工具和團隊。資料源插件通過 API 挂接到現有資料源,并實時呈現資料,而無需您遷移或引入資料。

【Web開發】Python實作Web儀表盤功能(Grafana)
1.2.3 警報

借助 Grafana 警報,您可以在一個簡單的 UI 中建立、管理和靜音所有警報,進而輕松整合和集中所有警報。

【Web開發】Python實作Web儀表盤功能(Grafana)
1.2.4 轉換

轉換允許您跨不同的查詢和資料源重命名、彙總、合并和執行計算。

在幾秒鐘内将非時間序列資料轉換為表(例如,JSON 檔案甚至簡單的查找表),無需任何自定義或額外的開銷。

【Web開發】Python實作Web儀表盤功能(Grafana)
1.2.5 附注

使用來自不同資料源的豐富事件對圖形進行批注。将滑鼠懸停在事件上會顯示完整的事件中繼資料和标記。

【Web開發】Python實作Web儀表盤功能(Grafana)
1.2.6 面闆編輯器

面闆編輯器通過一緻的 UI 輕松配置、自定義和浏覽所有面闆,用于在所有可視化中設定資料選項。

【Web開發】Python實作Web儀表盤功能(Grafana)

2、Grafana Cloud

開始使用Grafana Cloud。如果你還不熟悉它,Grafana Cloud是開始觀察名額(Prometheus和Graphite)、日志(Grafana Loki)、跟蹤(Grafana Tempo)和儀表盤的最簡單方法。我們有免費和付費的Grafana雲計劃,以滿足各種使用情況 - 你現在就可以免費注冊。

作為完全托管的服務提供,Grafana 雲是采用 Grafana 的最快方式,包括一個可擴充的托管後端,用于名額、日志和跟蹤。由Grafana實驗室管理,為個人,團隊和大型企業提供免費和付費選項。包括一個強大的免費套餐,可通路 10k 個名額、50GB 日志和 50GB 跟蹤,供 3 個使用者使用。

【Web開發】Python實作Web儀表盤功能(Grafana)
【Web開發】Python實作Web儀表盤功能(Grafana)
【Web開發】Python實作Web儀表盤功能(Grafana)

3、Grafana 本地

【Web開發】Python實作Web儀表盤功能(Grafana)
【Web開發】Python實作Web儀表盤功能(Grafana)

3.1 安裝

​​https://grafana.com/grafana/download?pg=get&platform=windows&plcmt=selfmanaged-box1-cta1​​

  • 支援的作業系統:

    (1)Debian / Ubuntu

    (2)RPM-based Linux (CentOS, Fedora, OpenSuse, RedHat)

    (3)macOS

    (4)Windows

  • 支援的資料庫:

    (1)SQLite 3

    (2)MySQL 5.7+

    (3)PostgreSQL 10+

  • 支援的浏覽器:

    (1)Chrome/Chromium

    (2)Firefox

    (3)Safari

    (4)Microsoft Edge

    (5)Internet Explorer 11 is only fully supported in Grafana versions prior v6.0.

【Web開發】Python實作Web儀表盤功能(Grafana)

3.2 配置

  • 單擊下載下傳安裝程式。
  • 打開并運作安裝程式。
  • 要運作 Grafana,請打開浏覽器并轉到 Grafana 端口(預設 http://localhost:3000/),然後按照入門中的說明進行操作。
  • 通過執行位于目錄中的 啟動 Grafana,最好是從指令行。如果要将Grafana作為 Windows 服務運作,請下載下傳 NSSM。使用該工具将格Grafana加為Windows服務非常容易。
【Web開發】Python實作Web儀表盤功能(Grafana)
【Web開發】Python實作Web儀表盤功能(Grafana)

Note: The default Grafana port is 3000. This port might require extra permissions on Windows. If it does not appear in the default port, you can try changing to a different port.

Go into the conf directory and copy sample.ini to custom.ini. Note: You should edit custom.ini, never defaults.ini.

Edit custom.ini and uncomment the http_port configuration option (; is the comment character in ini files) and change it to something like 8080 or similar. That port should not require extra Windows privileges.

On Windows, the sample.ini file is located in the same directory as defaults.ini file. It contains all the settings commented out. Copy sample.ini and name it custom.ini.

進入conf目錄并将配置檔案sample複制為custom,編輯custom配置檔案,Grafana的預設端口為3000,此端口需要Windows上的額外權限,編輯custom并取消注釋http_port配置選項(;是ini檔案中的注釋字元)并将其更改為類似8080或類似的内容,該端口不需要額外的Windows權限。

3.3 插件

使用grafana-cli工具安裝

#擷取可用插件清單

grafana-cli plugins list-remote  

修改圖形為餅狀
grafana-cli plugins install grafana-piechart-panel
安裝其他圖形插件
grafana-cli plugins install grafana-clock-panel
#鐘表形展示
grafana-cli plugins install briangann-gauge-panel
#字元型展示
grafana-cli plugins install natel-discrete-panel
#伺服器狀态
grafana-cli plugins install vonage-status-panel

#
例:grafana-cli plugins uninstall vonage-status-panel
安裝和解除安裝後需要重新開機grafana才能夠生效      

3.4 運作

通過執行位于目錄中的 啟動 Grafana,最好是從指令行。

grafana-server.exe
or 
./grafana-server --cnotallow=../conf/custom.ini      
【Web開發】Python實作Web儀表盤功能(Grafana)
【Web開發】Python實作Web儀表盤功能(Grafana)

打開浏覽器通路:

http://localhost:3000/      
【Web開發】Python實作Web儀表盤功能(Grafana)

4、Grafana 功能

4.1 資料源(Data sources)

Grafana 為您的時序資料(資料源)支援許多不同的存儲後端。有關如何向 Grafana 添加資料源的說明,請參閱添加資料源。隻有具有組織管理者角色的使用者才能添加資料源。

部分資料源如下:

【Web開發】Python實作Web儀表盤功能(Grafana)
【Web開發】Python實作Web儀表盤功能(Grafana)
【Web開發】Python實作Web儀表盤功能(Grafana)
【Web開發】Python實作Web儀表盤功能(Grafana)

4.2 儀表闆(Dashboards)

儀表闆是一組由一個或多個面闆組成,這些面闆組織并排列成一行或多行。Grafana附帶了各種面闆,可以輕松建構正确的查詢,并自定義可視化,以便您可以根據需要建立完美的儀表闆。每個面闆都可以與來自任何已配置的Grafana資料源的資料進行互動。

儀表闆快照是靜态的。無法從快照重新執行查詢和表達式。是以,如果更新查詢或表達式中的任何變量,則不會更改儀表闆資料。

【Web開發】Python實作Web儀表盤功能(Grafana)
【Web開發】Python實作Web儀表盤功能(Grafana)

4.3 面闆(Panels)

該面闆是格拉法納的基本可視化建構塊。每個面闆都有一個特定于在面闆中選擇的資料源的查詢編輯器。查詢編輯器允許您提取完美的可視化效果以顯示在面闆上。

每個面闆都有各種各樣的樣式和格式選項。面闆可以在儀表闆上拖放和重新排列。它們也可以調整大小。

【Web開發】Python實作Web儀表盤功能(Grafana)

4.4 可視化(Visualizations)

格拉法納提供了各種可視化來支援不同的用例。文檔的這一部分重點介紹内置面闆、其選項和典型用法。

  • 圖形和圖表(Graphs & charts)

    Time series:時間序列是預設的和主要的圖形可視化效果。

    State timeline:狀态随時間變化的狀态時間線。

    Status history:一段時間内定期狀态的狀态曆史記錄。

    Bar chart: 條形圖顯示任何分類資料。

    Histogram:直方圖計算并在條形圖中顯示值分布。

    Heatmap:熱圖以二維形式可視化資料,通常用于現象的嚴重程度。

    Pie chart:餅圖通常用于比例很重要的地方。

    Candlestick:蠟燭圖通常用于财務資料,重點是價格/資料移動。

  • 【Web開發】Python實作Web儀表盤功能(Grafana)
  • 【Web開發】Python實作Web儀表盤功能(Grafana)
  • 【Web開發】Python實作Web儀表盤功能(Grafana)
  • 【Web開發】Python實作Web儀表盤功能(Grafana)
  • 統計資料和數字(Stats & numbers)

    Stat:大統計資料和可選迷你圖的統計資料。

    Bar gauge:條形規是水準或垂直條形規。

  • 【Web開發】Python實作Web儀表盤功能(Grafana)
  • 【Web開發】Python實作Web儀表盤功能(Grafana)
  • 【Web開發】Python實作Web儀表盤功能(Grafana)
  • 雜項(Misc)

    Table:表是主要且唯一的表可視化。

    Logs:日志是日志的主要可視化效果。

    Node Graph:有向圖或網絡的節點圖。

    Traces:跟蹤是跟蹤的主要可視化效果。

【Web開發】Python實作Web儀表盤功能(Grafana)
  • 部件(Widgets)

    Dashboard list:儀表闆清單可以列出儀表闆。

    Alert list: 警報清單可以列出警報。

    Text panel:文本面闆可以顯示降價和 html。

    News panel:“新聞”面闆可以顯示 RSS 源。

5、快速入門

5.1 Build your first dashboard

5.1.1 Install Grafana

Grafana可以安裝在許多不同的作業系統上。

【Web開發】Python實作Web儀表盤功能(Grafana)

5.1.2 Sign in to Grafana

  • 要首次登入格拉法納:
  • 打開 Web 浏覽器并轉到 http://localhost:3000/。

    Grafana偵聽的預設 HTTP 端口是,除非您配置了其他端口。3000

  • 在登入頁面上,輸入使用者名和密碼。admin

    單擊“登入”。

    如果成功,您将看到更改密碼的提示。

    在提示符下單擊确定并更改密碼。

  • 【Web開發】Python實作Web儀表盤功能(Grafana)
  • 【Web開發】Python實作Web儀表盤功能(Grafana)

5.1.3 Create a dashboard

  • 要建立您的第一個儀表闆

    單擊側面菜單中儀表闆圖示下的建立儀表闆項。

    在儀表闆上,單擊添加空面闆。

  • 【Web開發】Python實作Web儀表盤功能(Grafana)
  • 【Web開發】Python實作Web儀表盤功能(Grafana)
  • 在“建立儀表闆”/“編輯”面闆視圖中,轉到“查詢”頁籤。

    通過從資料源選擇器中進行選擇來配置查詢。

    這将生成随機遊走儀表闆。

  • 【Web開發】Python實作Web儀表盤功能(Grafana)
  • 單擊螢幕右上角的儲存圖示以儲存儀表闆。

    添加一個描述性名稱,然後單擊“儲存”。

  • 【Web開發】Python實作Web儀表盤功能(Grafana)
  • 恭喜,您已經建立了第一個儀表闆,它正在顯示結果。
  • 【Web開發】Python實作Web儀表盤功能(Grafana)
  • 在儀表闆的标題的箭頭上滑鼠點選,彈出編輯菜單。點選其中的Edit菜單可以對儀表盤進行重新修改。
  • 【Web開發】Python實作Web儀表盤功能(Grafana)

5.1.4 Add a data source

點選左上角的主菜單按鈕傳回主界面之後,點選中間的“Add your first data source”,進行資料源設定。

【Web開發】Python實作Web儀表盤功能(Grafana)

在資料源清單中選擇需要配置的自己資料源。

【Web開發】Python實作Web儀表盤功能(Grafana)

這裡我們選擇使用較為廣泛的 mysql。

【Web開發】Python實作Web儀表盤功能(Grafana)

填寫mysql的相關參數,

【Web開發】Python實作Web儀表盤功能(Grafana)

然後點選最下面的save & test按鈕,進行連接配接測試和儲存。

【Web開發】Python實作Web儀表盤功能(Grafana)

連接配接 Grafana 到 MySQL 顯示查詢失敗,為什麼?

您隻需要為 select 建立具有權限的使用者。

您在添加資料源時指定的資料庫使用者應僅被授予對您要查詢的指定資料庫和表的 SELECT 權限。

Grafana 不會驗證查詢是否安全。 查詢可以包括任何 SQL 語句。

例如像USE otherdb這樣的語句; 和 DROP TABLE 使用者; 将被忽略。

為了防止這種情況,我們強烈建議您建立一個具有受限權限的特定 mysql 使用者。

CREATE USER 'grafanaReader' IDENTIFIED BY '123456';
GRANT SELECT ON db_exam.db_exam TO 'grafanaReader';

#You can use wildcards (*) in place of database or table if you want to grant access to more databases and tables.
CREATE USER 'grafanaReader' IDENTIFIED BY 'password';
GRANT SELECT ON mydatabase.mytable TO 'grafanaReader';      
1、 CREATE DATABASE 資料庫名;
2、 GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON 資料庫名.* TO 資料庫名@localhost IDENTIFIED BY '密碼';
3、 SET PASSWORD FOR '資料庫名'@'localhost' = OLD_PASSWORD('密碼');      
CREATE DATABASE grafana DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
use grafana;
create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10));
insert into Student values('01' , '趙1' , '1990-01-01' , '男');
insert into Student values('02' , '錢2' , '1990-12-21' , '男');
insert into Student values('03' , '孫3' , '1990-05-20' , '男');
insert into Student values('04' , '李4' , '1990-08-06' , '男');
insert into Student values('05' , '周5' , '1991-12-01' , '女');
insert into Student values('06' , '吳6' , '1992-03-01' , '女');
insert into Student values('07' , '鄭7' , '1989-07-01' , '女');
insert into Student values('09' , '張8' , '2017-12-20' , '女');
insert into Student values('10' , '李9' , '2017-12-25' , '女');
insert into Student values('11' , '李10' , '2017-12-30' , '女');
insert into Student values('12' , '趙11' , '2017-01-01' , '女');
insert into Student values('13' , '孫12' , '2018-01-01' , '女');
select * from Student;      
SELECT
  title as 'Title',
  user.login as 'Created By' ,
  dashboard.created as 'Created On'
 FROM dashboard
INNER JOIN user on user.id = dashboard.created_by
WHERE $__timeFilter(dashboard.created)      
SELECT
  $__timeGroup(time_date_time,'5m'),
  min(value_double),
  'min' as metric
FROM test_data
WHERE $__timeFilter(time_date_time)
GROUP BY time
ORDER BY time      
SELECT
  $__timeGroup(createdAt,'5m',0),
  sum(value_double) as value,
  hostname
FROM test_data
WHERE
  $__timeFilter(createdAt)
GROUP BY time, hostname
ORDER BY time      
SELECT
  $__timeGroup(time_date_time,'5m'),
  min(value_double) as min_value,
  max(value_double) as max_value
FROM test_data
WHERE $__timeFilter(time_date_time)
GROUP BY time
ORDER BY time      
SELECT
  UNIX_TIMESTAMP(atimestamp) as time,
  aint as value,
  avarchar as metric
FROM my_table
WHERE $__timeFilter(atimestamp) and hostname in($hostname)
ORDER BY atimestamp ASC      
【Web開發】Python實作Web儀表盤功能(Grafana)

當您第一次進入編輯模式或添加新查詢時,Grafana 将嘗試使用具有時間戳列和數字列的第一個表預填充查詢建構器。

時間列字段是指儲存您的時間值的列的名稱。

度量列建議将僅包含具有文本資料類型(text、tinytext、mediumtext、longtext、varchar、char)的列。

如果您想使用具有不同資料類型的列作為度量列,您可以輸入帶有強制轉換的列名:CAST(numericColumn as CHAR)。

您還可以在度量列字段中輸入任意 SQL 表達式,這些表達式的計算結果為文本資料類型,如 CONCAT(column1, “ “, CAST(numericColumn as CHAR))。

【Web開發】Python實作Web儀表盤功能(Grafana)
【Web開發】Python實作Web儀表盤功能(Grafana)

6、Python庫

6.1 grafanalib

Python library for building Grafana dashboards.

grafanalib lets you generate Grafana dashboards from simple Python scripts.

grafanalib works with Python 3.6 through 3.10.

  • build from source
$ virtualenv .env
$ . ./.env/bin/activate
$ pip install -e .      
  • grafanalib is just a Python package, so:
pip install grafanalib      
  • Generate the JSON dashboard like so:
$ curl -o example.dashboard.py https://raw.githubusercontent.com/weaveworks/grafanalib/main/grafanalib/tests/examples/example.dashboard.py
$ generate-dashboard -o frontend.json example.dashboard.py      
  • How it works:

    檢視示例目錄,例如,此儀表闆将使用單行配置儀表闆,其中一個 QPS 圖按狀态代碼細分,另一個延遲圖顯示中位數和第 99 百分位延遲。

    在代碼中,這裡有相當多的重複,但是一旦你弄清楚什麼适合你的需求,你就可以把它排除在外。請參閱我們的編織專用定制,擷取靈感。

    您可以在 readthedocs.io 上閱讀整個Grafana 文檔。

  • Writing dashboards

    下面将配置一個儀表闆,其中包含幾個使用随機遊走和 Prometheus 資料源的示例面闆。

from grafanalib.core import (
    Dashboard, TimeSeries, GaugePanel,
    Target, GridPos,
    OPS_FORMAT
)

dashboard = Dashboard(
    title="Python generated example dashboard",
    descriptinotallow="Example dashboard using the Random Walk and default Prometheus datasource",
    tags=[
        'example'
    ],
    timeznotallow="browser",
    panels=[
        TimeSeries(
            title="Random Walk",
            dataSource='default',
            targets=[
                Target(
                    datasource='grafana',
                    expr='example',
                ),
            ],
            gridPos=GridPos(h=8, w=16, x=0, y=0),
        ),
        GaugePanel(
            title="Random Walk",
            dataSource='default',
            targets=[
                Target(
                    datasource='grafana',
                    expr='example',
                ),
            ],
            gridPos=GridPos(h=4, w=4, x=17, y=0),
        ),
        TimeSeries(
            title="Prometheus http requests",
            dataSource='prometheus',
            targets=[
                Target(
                    expr='rate(prometheus_http_requests_total[5m])',
                    legendFormat="{{ handler }}",
                    refId='A',
                ),
            ],
            unit=OPS_FORMAT,
            gridPos=GridPos(h=8, w=16, x=0, y=10),
        ),
    ],
).auto_panel_ids()      
  • Generating dashboards

    如果将上述内容另存為 example.dashboard.py(字尾必須為 .dashboard.py),則可以生成包含以下内容的 JSON 儀表闆:

generate-dashboard -o frontend.json example.dashboard.py      
  • Generating dashboards from code

    有時,您可能需要直接從Python代碼生成和上傳儀表闆。下面的示例為其提供了最少的代碼樣闆:

from grafanalib.core import Dashboard
from grafanalib._gen import DashboardEncoder
import json
import requests
from os import getenv


def get_dashboard_json(dashboard, overwrite=False, message="Updated by grafanlib"):
    '''
    get_dashboard_json generates JSON from grafanalib Dashboard object

    :param dashboard - Dashboard() created via grafanalib
    '''

    # grafanalib generates json which need to pack to "dashboard" root element
    return json.dumps(
        {
            "dashboard": dashboard.to_json_data(),
            "overwrite": overwrite,
            "message": message
        }, sort_keys=True, indent=2, cls=DashboardEncoder)


def upload_to_grafana(json, server, api_key, verify=True):
    '''
    upload_to_grafana tries to upload dashboard to grafana and prints response

    :param json - dashboard json generated by grafanalib
    :param server - grafana server name
    :param api_key - grafana api key with read and write privileges
    '''

    headers = {'Authorization': f"Bearer {api_key}", 'Content-Type': 'application/json'}
    r = requests.post(f"https://{server}/api/dashboards/db", data=json, headers=headers, verify=verify)
    # TODO: add error handling
    print(f"{r.status_code} - {r.content}")


grafana_api_key = getenv("GRAFANA_API_KEY")
grafana_server = getenv("GRAFANA_SERVER")

my_dashboard = Dashboard(title="My awesome dashboard", uid='abifsd')
my_dashboard_json = get_dashboard_json(my_dashboard, overwrite=True)
upload_to_grafana(my_dashboard_json, grafana_server, grafana_api_key)      

我們可以通過 grafanalib 将我們需要的 dashboard 設計好,然後通過 grafana-api

将其應用到 grafana 上面。

​​https://grafana.com/docs/grafana/latest/developers/http_api/​​

【Web開發】Python實作Web儀表盤功能(Grafana)

6.2 grafana-dashboards-builder

A wrapper around grafanalib which simplifies generating multiple dashboards.

grafanalib是一個很棒的工具,可以讓你從簡單的Python腳本生成格拉法納儀表闆。遺憾的是,它隻能讀取單個檔案作為儀表闆源,并且沒有多個輸出目錄的概念。這些限制使得很難為整個 Grafana 執行個體提供許多檔案夾和多個儀表闆源。

grafana-dashboards-builder以遞歸方式查找目錄樹中的所有 .dashboard.py 檔案。它生成儀表闆并将其放置在代表Grafana檔案夾的子目錄中。

它在編寫時考慮了 Kubernetes,是以即使在加載從平面 ConfigMap 挂載的源代碼時,它也可以生成嵌套的輸出目錄結構(請參閱下面的示例)。

  • Installation:
pip install grafana-dashboards-builder      
  • Usage:
grafana-dashboards-builder [OPTIONS] INPUT_DIR [OUTPUT_DIR]

INPUT_DIR is the directory tree with dashboard sources.
OUTPUT_DIR is the directory where generated dashboards are placed (defaults to ./out).

Options:
--from-configmap  generate output directories based on a source files prefix and a '--' separator
--help            Show this message and exit.      

結語

​如果您覺得該方法或代碼有一點點用處,可以給作者點個贊,或打賞杯咖啡;​

​​╮( ̄▽ ̄)╭

​​

​如果您感覺方法或代碼不咋地​

​​//(ㄒoㄒ)//​

​,就在評論處留言,作者繼續改進;​

​​o_O???

​​

​如果您需要相關功能的代碼定制化開發,可以留言私信作者;​

​​(✿◡‿◡)

​​

​感謝各位大佬童鞋們的支援!​

​( ´ ▽´ )ノ ( ´ ▽´)っ!!!