【SOP 系列 14】如何多个 TiDB 集群共用一个 Grafana

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
3 个赞

这脚本完全跑不通啊.我改了下也没跑通. 有些是中英文符号的问题,其他语法的问题我没找出来

概要

grafana_url=“172.29.238.45:3000”
grafana_user_passwd=“admin:admin”
grafana_dashboard_dir="/data/tidb/deploy/grafana-3000/dashboards"
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

我这粘贴完了格式也不对。还是中文符号

2 个赞

重新调整了一下 shell 的格式,您再试一下。

2 个赞

可以了,感谢感谢。

1 个赞