半自动添加Grafana 模板之 ---- POST提交

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
简介:

目前我们生产环境,每次新加DB机器都要人肉去添加模板,这种方式显然不是一个IT从业人员应该做的。急需完善流程。


看了 grafana官网自带的http api说明也不够清晰,于是自己琢磨了下。有了这篇博客。


1、去grafana里面生成一个api key,用于和grafana进行http交互。

因为很多时候,公司内有很多组织的,处于权限控制考虑,我们的监控模板需要放到对应的组织下,只允许对应的业务人员查看。

这里,我们先新建个组织,例如叫做“会员系统”

image.png

image.png


然后,去生成1api key

image.png

注意,这个api keys界面只会出现一次,因此需要记住这个key,后续是无法查看到的。

image.png


这里,我们记录下关键信息如下:

Authorization:  Bearer eyJrIjoiRDd2SXkxU01PUkk4TFVYT0xsM1lQQ1dFaW92dEJIekMiLCJuIjoiZ3JhZmFuYV9hdXRvIiwiaWQiOjE0fQ==



2、添加grafana的数据源,我这里取名为prom25

image.png



3、制作一个标准模板,后面会用到它,我这里简单起见,只用了一个5分钟负载图。(实际生产环境这个模板会展示很多指标,操作方法是一样的)。

image.png


这个模板没问题后,我们来导出json格式的模板文件,如下图所示:

image.png


我这里导出的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

            },

            {

              "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": [

      "5m",

      "15m",

      "1h",

      "6h",

      "12h",

      "24h",

      "2d",

      "7d",

      "30d"

    ]

  },

  "timezone": "",

  "title": "test_dashboard",

  "version": 1

}

 

此外我们可以将这个模板文件导出作为备份,然后删除这个模板。后续会通过http api来添加这个模板。

 

 

4、修改上面的这个json文件,修改后的如下:

注意标记红色的第12行还有最后3行,都是新加了的内容。

{

  "dashboard":

{

  "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": null,

  "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

            },

            {

              "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": [

      "5m",

      "15m",

      "1h",

      "6h",

      "12h",

      "24h",

      "2d",

      "7d",

      "30d"

    ]

  },

  "timezone": "",

  "title": "test_dashboard",

  "version": 1

}

,

 "overwrite": true

}

 

 

 

5、使用chrome的插件restlet_client模拟POST提交操作

如下图,关键点都用红色框起来了。 BODY部分填的就是上面第4步的修改后的json内容。

image.png


如果返回值是200OK,则表示post提交成功了。然后去grafana界面查看下吧。没啥问题的话,就可以将这个post请求弄出来了。

 

点击上图界面的右上角“save as”旁边的小箭头,点击“copy as curl”,即可导出curl格式的命令明细。

image.png


我们可看下这个curl的内容,实际上变化的就是3个地方:

1curlheader部分的认证字段(用来区分属于哪个grafana组织)

2httpdata部分,实际上就是我们的dashboard的全部内容。

3、dashboard的名称。

 

 

 

6、后期

通过上面的几个步骤,我们就可以再努力下,用python搞个web界面,传一个grafana的组织,需要的主机IP即可完成添加。

grafana里的组织和apikey存在对应关系。 对于httpdata部分,实际上只要每次改成一个IP就是一个新的模板(咱DBA的机器,都是一个IP对应一个模板)】

 










本文转自 lirulei90 51CTO博客,原文链接:http://blog.51cto.com/lee90/2071548,如需转载请自行联系原作者
相关实践学习
通过可观测可视化Grafana版进行数据可视化展示与分析
使用可观测可视化Grafana版进行数据可视化展示与分析。
目录
相关文章
|
存储 监控 关系型数据库
|
24天前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第26天】Prometheus与Grafana是智能运维中的强大组合,前者是开源的系统监控和警报工具,后者是数据可视化平台。Prometheus具备时间序列数据库、多维数据模型、PromQL查询语言等特性,而Grafana支持多数据源、丰富的可视化选项和告警功能。两者结合可实现实时监控、灵活告警和高度定制化的仪表板,广泛应用于服务器、应用和数据库的监控。
134 3
|
26天前
|
Prometheus 监控 Cloud Native
基于Docker安装Grafana和Prometheus
Grafana 是一款用 Go 语言开发的开源数据可视化工具,支持数据监控和统计,并具备告警功能。通过 Docker 部署 Grafana 和 Prometheus,可实现系统数据的采集、展示和告警。默认登录用户名和密码均为 admin。配置 Prometheus 数据源后,可导入主机监控模板(ID 8919)进行数据展示。
65 2
|
23天前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第27天】在智能运维中,Prometheus和Grafana的组合已成为监控和告警体系的事实标准。Prometheus负责数据收集和存储,支持灵活的查询语言PromQL;Grafana提供数据的可视化展示和告警功能。本文介绍如何配置Prometheus监控目标、Grafana数据源及告警规则,帮助运维团队实时监控系统状态,确保稳定性和可靠性。
121 0
|
5月前
|
Prometheus 监控 Cloud Native
基于Prometheus和Grafana的监控平台 - 环境搭建
基于Prometheus和Grafana的监控平台 - 环境搭建
|
3月前
|
Prometheus 监控 Cloud Native
自定义grafana_table(数据源Prometheus)
综上所述,自定义 Grafana 表格并将 Prometheus 作为数据源的关键是理解 PromQL 的查询机制、熟悉 Grafana 面板的配置选项,并利用 Grafana 强大的转换和自定义功能使数据展示更为直观和有洞见性。随着对这些工具更深入的了解,您将可以创建出更高级的监控仪表盘,以支持复杂的业务监控需求。
303 1
|
3月前
|
Prometheus 监控 Cloud Native
prometheus学习笔记之Grafana安装与配置
prometheus学习笔记之Grafana安装与配置
|
3月前
|
存储 Prometheus 监控
Grafana 与 Prometheus 集成:打造高效监控系统
【8月更文第29天】在现代软件开发和运维领域,监控系统已成为不可或缺的一部分。Prometheus 和 Grafana 作为两个非常流行且互补的开源工具,可以协同工作来构建强大的实时监控解决方案。Prometheus 负责收集和存储时间序列数据,而 Grafana 则提供直观的数据可视化功能。本文将详细介绍如何集成这两个工具,构建一个高效、灵活的监控系统。
434 1
|
3月前
|
Prometheus 监控 Cloud Native
Spring Boot 性能护航!Prometheus、Grafana、ELK 组合拳,点燃数字化时代应用稳定之火
【8月更文挑战第29天】在现代软件开发中,保证应用性能与稳定至关重要。Spring Boot 作为流行的 Java 框架,结合 Prometheus、Grafana 和 ELK 可显著提升监控与分析能力。Prometheus 负责收集时间序列数据,Grafana 将数据可视化,而 ELK (Elasticsearch、Logstash、Kibana)则管理并分析应用日志。通过具体实例演示了如何在 Spring Boot 应用中集成这些工具:配置 Prometheus 获取度量信息、Grafana 显示结果及 ELK 分析日志,从而帮助开发者快速定位问题,确保应用稳定高效运行。
111 1
|
3月前
|
Prometheus Kubernetes 监控
Kubernetes(K8S) 监控 Prometheus + Grafana
Kubernetes(K8S) 监控 Prometheus + Grafana
272 2
下一篇
无影云桌面