LoginSignup
0
0

Grafana の dashboard を CLI で json export したかった走り書き

Posted at

背景

Grafana の運用を開始していい感じの dashboard もいくつかできてきたところで、
「この dashboard 設定まるごと吹き飛んだら泣いちゃうな・・・」となった。
しかしながら、Grafana から dashboard を JSON Export しようとすると、各 dashbaord にアクセスしてポチポチ export するしかない。
手動でそんなことはやりたくないので API 叩いてなんとかした。

成果物と雑な解説

backup.sh
#!/bin/bash

each_jq(){
        jq -c '.[]'
}

cd /path/to/backup_folder
source ./grafana_token

folders=$(curl -X GET -H "Accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer ${GRAFANA_TOKEN}" http://localhost:3000/api/folders)

echo $folders | each_jq | while read -r folder
do
        id=$(echo $folder | jq .id)
        name=$(echo $folder | jq -r .title)
        base="grafana_dashboards/$name"
        mkdir -p $base
        dashboards=$(curl -X GET -H "Accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer ${GRAFANA_TOKEN}" "http://localhost:3000/api/search?folderIds=$id")
        echo $dashboards | each_jq | while read -r dashboard
        do
                uid=$(echo $dashboard | jq -r .uid)
                name=$(echo $dashboard | jq -r .title)
                path="${base}/${name}.json"
                d=$(curl -X GET -H "Accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer ${GRAFANA_TOKEN}" http://localhost:3000/api/dashboards/uid/$uid | jq .dashboard)
                echo $d > "$path"
        done
done

GRAFANA_TOKEN に dashboard アクセス可能な token が入るようにして実行すれば、各フォルダ内の dashboard を逐次取得して grafana_dashboards/[folder name]/[dashboard name].json に保存される。

/api/dashboards/uid/$uid API の結果をまるごと保存すると情報も含まれてしまうため、response.dashboard の内容が JSON Export された内容と一致していたので、そこを採用した。

このスクリプトだと General フォルダの dashboard が入ってこないので、General は sandbox 的な場所とする、という社内ルールを策定した。(General はバックアップされない前提)
また、たぶん ! とか ? とか " とか入ると死ぬので、フォルダ・グラフ名にはそれらの記号をつけてはいけないという社内ルールを策定した。

取得後は適当に git push する cron を回している。

Grafana API に dashboard の一覧を返すやつがあればこんなにグルグルループしなくて済むんだが・・・。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0