根据Grafana官方文档和网上的一些教程,尝试了将一个制作好的dashboard导出,并且在需要时重新导入dashboard,但是其中碰到了一些问题,因此将自己的操作过程整理了一下。
1.Export Dashboard
此处省略一些Grafana的简介和如何创建自己的data source,详细的介绍可以参见Grafana官方文档。
有两种方法可以导出制作好的Dashboard的json文件。
1.使用share dashboard中的export功能直接生成你需要保存的dashboard的json文件,方法如下:
点击Share dashbord
选择弹出窗口中上端的Export,并点击Save to file,就可以保存该dashboard的json文件。并且之后可以在通过import功能直接使用该json文件,生成dashboard,省去了重新配置的麻烦。
注意:该方法生成的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直接导入
点击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:admin@0.0.0.0:3000/api/dashboards/db'
6 get_url='http://admin:admin@0.0.0.0: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)
16 ┆ if test.status_code == 200:
17 ┆ ┆ print("This dashboard has been existed.")
18 ┆ elif 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:
24 ┆ print("Unexpected error")
25
26 if __name__ == "__main__":
27 main()
结语
主要记录一下自己做的过程,其中碰到最大的问题就是使用第一种方法生成json文件后,使用Python或者脚本自动导入dashboard时,一直失败,搞了好久才发现问题所在。
文章中可能有写的不对的地方,欢迎大家交流和指正。谢谢!