天天看點

半自動添加Grafana 模闆之 ---- POST送出

目前我們生産環境,每次新加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,如需轉載請自行聯系原作者