目前我们生产环境,每次新加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

},

{

"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文件,修改后的如下:

注意标记红色的第1、2行还有最后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内容。

如果返回值是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对应一个模板)】

转载于:https://blog.51cto.com/lee90/2071548

半自动添加Grafana 模板之 ---- POST提交相关推荐

  1. OA系统添加审批模板

    1.列表页面 1.1.动态添加路由 在"系统管理"->"菜单管理"添加"审批设置"->"审批类型" 对于菜单 ...

  2. ASP.NET 2.0 中动态添加 GridView 模板列

      ASP.NET 2.0 中动态添加 GridView 模板列的例子 动态添加列,关键是实现 ITemplate.InstantiateIn 方法.下面是一个添加 GridView 模板列的例子. ...

  3. 为监控主机添加SNMPv3模板

    转载来源 : 为监控主机添加SNMPv3模板 本次以监控主机华为E9000为例. 1.关于snmpwalk v3命令详解 参考网站: https://blog.csdn.net/ivnetware/a ...

  4. Phpcms黄页yp如何添加企业模板

    在模块->企业黄页 ->企业模板管理 这里,添加新模板 (首先要安装企业黄页,才有这个模块出来) 如果使用上传压缩包方式,请将模板文件放置在upload文件中,css及图片文件放置于upl ...

  5. GBase 8d条目添加到模板

    此操作是指把条目objectclass及属性保存为模板.用户可以在添加条目时选择"基于摸板添加",就可以看到已经添加的模板,并且可以选择模板进行条目添加. ※首先选中要添加到模板的 ...

  6. latex安装教程(texlive+texstudio)并添加IEEE模板

    @[TOC]latex安装教程(texlive+texstudio)并添加IEEE模板 texlive安装 网址:https://tug.org/texlive/ texlive可以选择线上安装也可以 ...

  7. 为Visual Studio添加项目模板及项模板

    1 问题的引入 在做项目的时候,需要代码规范,版本信息不可或缺,但是每次在文件头COPY版本信息很麻烦,而且也不太容易控制.为了更好.更规范的去完成项目,需对项目文件做统一的格式来处理. 2 环境描述 ...

  8. nhmicro添加合同模板管理功能

    nhmicro添加合同模板管理功能 在合同模板列表中创建记录,上传word(2003版)合同模板文件,点击编译后就可以下载pdf了.在编写word文件是可以使用${somekey}作为占位符,下载pd ...

  9. 【VUE项目实战】56、商品添加功能(六)-提交添加的商品

    接上篇<55.商品添加功能(五)-商品内容模块> 上一篇我们完成了商品内容编辑模块的开发,也即是完成了商品所有的信息编辑,本篇我们就来开发提交商品所有信息到后台的功能. 一.要实现的效果 ...

最新文章

  1. IT十八掌作业_java基础第十八天_项目完善
  2. Unity3D安卓程序中常用静态方法封装
  3. linux 双网卡绑定(bonding)实现负载均衡或故障转移
  4. c++11 继承构造
  5. [react] 请说说什么是useRef?
  6. face-recognition库(人脸识别库)安装,使用
  7. HBase错误解决(启动Hbase出现错误的替换,启动hbase shell出现ERROR KeeperErrorCode=NoNode for /hbase/master)
  8. JNI开发笔记(一)--Android Studio安装与环境搭建
  9. js获取单选框里面的值
  10. eclipse里面配置热部署,tomcat配置
  11. Eclipse 常用快捷键(动画讲解)
  12. 呐,一个苹果洞赚10万美元的详细经验都在这里了~
  13. 服务器打包文件命令,nuxt构建项目打包部署服务器二(打包部署)
  14. 运用CNN对ImageNet进行图像分类
  15. 谷歌浏览器查看版本信息及个人资料路径的命令方法
  16. Python_作图添加水平线和垂直线_linspace语句介绍
  17. PWM(脉冲宽度调制)的工作原理、分类及其应用
  18. 利用CC2530单片机的蜂鸣器播放音乐的代码
  19. MySQL学生综合测评系统_大学生综合测评系统的设计和实现(MySQL)
  20. 为什么敬业签绑定了微信提醒不了?

热门文章

  1. 实战:自定义脚本启动mysql-mysql 5.6.19
  2. python select實現非阻塞socket
  3. TranslateAnimation类:位置变化动画类
  4. linux lsattr命令: 显示文件属性
  5. 环信 之 注册及创建应用
  6. WebLogic 控制台乱码
  7. Xcode 开发 控件如何和代码配合使用
  8. 中小企业上云如何选择及操作
  9. UCloud科创板上市获受理,相关文件披露重要经营信息
  10. 短视频直播一对一源码“皇冠”花落谁家