目前我們生産環境,每次新加DB機器都要人肉去添加模闆,這種方式顯然不是一個IT從業人員應該做的。急需完善流程。
看了 grafana官網自帶的http api說明也不夠清晰,于是自己琢磨了下。有了這篇部落格。
1、去grafana裡面生成一個api key,用于和grafana進行http互動。
因為很多時候,公司内有很多組織的,處于權限控制考慮,我們的監控模闆需要放到對應的組織下,隻允許對應的業務人員檢視。
這裡,我們先建立個組織,例如叫做“會員系統”
然後,去生成1個api key
注意,這個api keys界面隻會出現一次,是以需要記住這個key,後續是無法檢視到的。
這裡,我們記錄下關鍵資訊如下:
Authorization: Bearer eyJrIjoiRDd2SXkxU01PUkk4TFVYT0xsM1lQQ1dFaW92dEJIekMiLCJuIjoiZ3JhZmFuYV9hdXRvIiwiaWQiOjE0fQ==
2、添加grafana的資料源,我這裡取名為prom25:
3、制作一個标準模闆,後面會用到它,我這裡簡單起見,隻用了一個5分鐘負載圖。(實際生産環境這個模闆會展示很多名額,操作方法是一樣的)。
這個模闆沒問題後,我們來導出json格式的模闆檔案,如下圖所示:
我這裡導出的json檔案全文如下:
{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": "-- Grafana --",
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"hideControls": false,
"id": 36,
"links": [],
"rows": [
{
"collapse": false,
"height": "250px",
"panels": [
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "prom25",
"decimals": 2,
"fill": 3,
"id": 1,
"legend": {
"alignAsTable": true,
"avg": false,
"current": true,
"max": true,
"min": true,
"show": true,
"total": false,
"values": true
},
"lines": true,
"linewidth": 2,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"span": 12,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "node_load5{instance=\"10.0.20.25:9100\"}",
"format": "time_series",
"intervalFactor": 1,
"legendFormat": "{{instance}}",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "5分鐘負載",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
"yaxes": [
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
]
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": false,
"title": "Dashboard Row",
"titleSize": "h6"
}
],
"schemaVersion": 14,
"style": "dark",
"tags": [],
"templating": {
"list": []
"time": {
"from": "now-30m",
"to": "now"
"timepicker": {
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
],
"time_options": [
"6h",
"12h",
"24h",
"2d",
"7d",
"30d"
"timezone": "",
"title": "test_dashboard",
"version": 1
}
此外我們可以将這個模闆檔案導出作為備份,然後删除這個模闆。後續會通過http api來添加這個模闆。
4、修改上面的這個json檔案,修改後的如下:
注意标記紅色的第1、2行還有最後3行,都是新加了的内容。
"dashboard":
"id": null,
"aliasColors": {},
"dashes": false,
}
"tooltip": {
"format": "short",
"logBase": 1,
}
,
"overwrite": true
5、使用chrome的插件restlet_client模拟POST送出操作
如下圖,關鍵點都用紅色框起來了。 BODY部分填的就是上面第4步的修改後的json内容。
如果傳回值是200OK,則表示post送出成功了。然後去grafana界面檢視下吧。沒啥問題的話,就可以将這個post請求弄出來了。
點選上圖界面的右上角“save as”旁邊的小箭頭,點選“copy as curl”,即可導出curl格式的指令明細。
我們可看下這個curl的内容,實際上變化的就是3個地方:
1、curl的header部分的認證字段(用來區分屬于哪個grafana組織)
2、http的data部分,實際上就是我們的dashboard的全部内容。
3、dashboard的名稱。
6、後期
通過上面的幾個步驟,我們就可以再努力下,用python搞個web界面,傳一個grafana的組織,需要的主機IP即可完成添加。
【grafana裡的組織和apikey存在對應關系。 對于http的data部分,實際上隻要每次改成一個IP就是一個新的模闆(咱DBA的機器,都是一個IP對應一個模闆)】
本文轉自 lirulei90 51CTO部落格,原文連結:http://blog.51cto.com/lee90/2071548,如需轉載請自行聯系原作者