使用Grafana+OPENTSDB方式Export和Import图表

根据Grafana官方文档和网上的一些教程,尝试了将一个制作好的dashboard导出,并且在需要时重新导入dashboard,但是其中碰到了一些问题,因此将自己的操作过程整理了一下。

1.Export Dashboard

此处省略一些Grafana的简介和如何创建自己的data source,详细的介绍可以参见Grafana官方文档。
有两种方法可以导出制作好的Dashboard的json文件。
1.使用share dashboard中的export功能直接生成你需要保存的dashboard的json文件,方法如下:
点击Share dashbord
使用Grafana+OPENTSDB方式Export和Import图表_第1张图片
选择弹出窗口中上端的Export,并点击Save to file,就可以保存该dashboard的json文件。并且之后可以在通过import功能直接使用该json文件,生成dashboard,省去了重新配置的麻烦。
使用Grafana+OPENTSDB方式Export和Import图表_第2张图片
注意:该方法生成的json文件,在之后使用脚本或Python文件来导入dashboard时,可能会失败,无法导入!!!
2.使用API方式来生成json文件,方法如下:
首先需要获取dashboard的uid,可以直接通过浏览器或使用脚本来获取,使用的url为:

http://0.0.0.0:3000/api/search
注意:其中的0.0.0.0为你安装Grafana的IP地址,3000为默认端口号(可以在配置文件中改为自己想要的端口号)

通过这个方法你可以获得你所有的dashboard的信息,如下图所示:
在这里插入图片描述
在其中找到你需要导出的dashboard的uid信息,并使用下面的API来获取dashboard的json文件:

http://0.0.0.0:3000/api/dashboards/uid/:uid
注意:其中的0.0.0.0为你安装Grafana的IP地址,3000为默认端口号(可以在配置文件中改为自己想要的端口号),最后的;uid需要替换为刚才上一步中得到的uid信息,一般为大小写字母和数字的组合,例如:cIBgcSjkk

通过这个API可以得到你需要导出的dashbord的json文件,大致样式如下:
在这里插入图片描述
通过这个方法你可以手动复制粘贴创建json文件,也可以通过脚本等自动生成json文件。

两种方法的区别

两种方法的区别主要在于生成的json文件有一定区别,第一种方法生成json文件存在换行符,第二种方法得到的json文件是没有换行符的,全部代码都在一行。而且第二种方法产生的json文件中有“dashboard“这个对象,而第一种方法产生的json文件是没有的,但是我记得在Grafana的官方文档中好像提到dashboard的json文件中必须要有“dashboard“这个对象。这两个区别可能就是导致使用脚本等通过API的方式将第一种方式产生的json文件Import到Grafana时,会产生Required Error,导致无法Import。

2.Import

和Export一样,Import也有两种方法。
1.在grafana网页的Creat中的I没port直接导入
使用Grafana+OPENTSDB方式Export和Import图表_第3张图片
使用Grafana+OPENTSDB方式Export和Import图表_第4张图片
点击Upload .json选择刚才通过第一种方法保存的json文件,并且点击Load就可以直接导入刚才保存的dashboard。或者将刚才的json文件中的代码文本复制粘贴至Or paste JSON处,一样可以导入。
2.使用脚本或Python等导入dashboard
这个方法的好处在于可能如果你是企业使用,可能在给客户或者其他人安装软件时,将这个脚本加入安装文件中,并结合其他一些脚本等,实现自动安装Grafana并且导入脚本,使客户或其他一些人可以快速使用,来监控系统等。
下面附上我自己的写的一个简单的python文件,实现dashborad导入:

  1 #!/usr/bin/python
  2 import requests
  3 import json
  4      
  5 db_url='http://admin:[email protected]:3000/api/dashboards/db'
  6 get_url='http://admin:[email protected]:3000/api/dashboards/uid/vSTc90giz'
  7      
  8 headers={"Content-Type": 'application/json',
  9     ┆   ┆"Accept": 'application/json'
 11}
 12      
 13 def main():
 14     try:
 15     ┆   test = requests.get(get_url, headers=headers)
 16if test.status_code == 200:
 17     ┆   ┆   print("This dashboard has been existed.")
 18elif test.status_code == 404:
 19     ┆   ┆   data = open('esgyn_grafana.json')
 20     ┆   ┆   response = requests.post(db_url, data=data, headers=headers)
 21     ┆   ┆   print(response)
 22     ┆   ┆   print(response.text)
 23     except:
 24print("Unexpected error")
 25      
 26 if __name__ == "__main__":
 27     main()                                                                                                                                                                                                           

结语

主要记录一下自己做的过程,其中碰到最大的问题就是使用第一种方法生成json文件后,使用Python或者脚本自动导入dashboard时,一直失败,搞了好久才发现问题所在。
文章中可能有写的不对的地方,欢迎大家交流和指正。谢谢!

你可能感兴趣的:(工作)