1. 环境介绍
1.1 操作系统环境
[root@r10 .tiup]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@r10 .tiup]# uname -r
3.10.0-1160.el7.x86_64
1.2 集群环境
有两套独立的集群环境,Grafana 环境如下
tidb-c0-v409: Grafana 192.168.12.10:3000
tidb-test: Grafana 192.168.12.10:23000
2. 两套 Prometheus 共用一套 Grafana
目标 - 将 tidb-test 的 Grafana 合并至 tidb-c0-v409 中
2.1 在 tidb-c0-v409 中添加新的数据源
如果不了解数据源的具体信息,可以登录 tidb-test 的 Grafana 界面查看
添加过数据源后点击 Save & Test 按钮进行测试
2.2 将 tidb-test 的 dashboard 导入到 Grafana 中
在 grafana 中创建一个新的 folder tidb-test
导入 tidb-test 的原有 dashboard
导入 tidb-test 的原有 dashboard
刚才导入的报表已经可以在新创建的 tidb-test 目录下
2.3 通过 Grafana HTTP API 导入报表
当一次性导入大量报表时,可以考虑使用 Grafana 提供的 HTTP API 接口
2.3.1 进入到要入的 dashboard 目录
在我的环境中,tidb-test dashboard 的目录为 /opt/tidb/grafana-23000/dashboards
[root@r10 dashboards]# cd /opt/tidb/grafana-23000/dashboards
[root@r10 dashboards]# mkdir dashboard-trans
2.3.2 替换 dashboard 文件中的 uid,并且加上 dashboard 的标签
以 tidb.json 文件为例
vuuid=
uuidgen
&& cat tidb.json
sed “s#"uid".*#"uid" : "$vuuid",#g”
sed '1i {“dashboard”: ’ sed ‘$a }’ > dashboard-trans/tidb-trans.json
需要注意的是,本例中并没有替换 dashboard 中的数据源,因为在创建数据源的时候,使用的是原有的数据源的名字。
如果更改了数据源的名称,datasource 的值也需要跟着改动。
[root@r10 dashboards]# cat pd.json | grep ‘“datasource”:’ | head -1
“datasource”: “tidb-test”
2.3.3 使用 Grafana 的 HTTP API 将报表导入
curl -i -X POST \
–user admin:admin \
-H “Accept: application/json” -H “Content-Type: application/json” -k -v \ http://192.168.12.10:3000/api/dashboards/db \
-d @/opt/tidb/grafana-23000/dashboards/dashboard-trans/tidb-trans.json
其中,–user admin:admin 为登录 Grafna 的用户名和密码
http://192.168.12.10:3000 为我环境中的 Grafana
2.3.4 检查 Grafana 中的报表
可以在 dashboard 中创建一个新的目录,将导入的 dashboard 迁移到新的目录中,进行管理。在本例中,我创建了一个新的目录 tidb-test。可以将导入的 tidb-test-TIDB 迁移到该目录下。
2.3.5 将上述的操作整理成脚本
grafana_url="192.168.12.10:3000" # Changed in your env
grafana_user_passwd="admin:admin" # Changed in your env
grafana_dashboard_dir="/opt/tidb/grafana-23000/dashboards" # Changed in your env
cd $grafana_dashboard_dir && mkdir -p dashboard-trans
for i_dashboard in `ls | grep json`; do
echo "transform dashboard - $i_dashboard"
v_dashboard_item=`echo $i_dashboard | sed "s/\.json//g" `
echo $v_dashboard_item
vuuid=`uuidgen` && cat $i_dashboard | \
sed "s#\"uid\".*#\"uid\" : \"$vuuid\",#g" | \
sed '1i {"dashboard": ' | sed '$a }' \
> dashboard-trans/$v_dashboard_item-trans.json
echo "debug # $grafana_user_passwd"
echo "debug # http://$grafana_url/api/dashboards/db"
echo "debug # $grafana_dashboard_dir/dashboard-trans/$v_dashboard_item-trans.json"
curl -i -X POST \
--user $grafana_user_passwd \
-H "Accept: application/json" -H "Content-Type: application/json" -k -v http://$grafana_url/api/dashboards/db \
-d @$grafana_dashboard_dir/dashboard-trans/$v_dashboard_item-trans.json
done