[Grafana] [Bash] API로 dashboard export/import

아래 링크에 grafana api 에 대한 설명이 있기는 한데, 써먹으려면 설명이 좀 더 필요하다.

https://grafana.com/docs/grafana/latest/http_api/

상황은 이러하다.

Grafana 설정을 여러번 바꿔서 재설치를 여러 번 해야한다.

그런데 dashboard가 여러개라 dashboard json파일을 여러번 import하는게 귀찮다.

심지어 dashboard를 계속 수정해야되서 grafana재설치 하기전에 모든 dashboard를 각각 json파일로 저장해야한다.

이걸 GUI에서 하면 되긴하는데 스크립트로 잽싸게 하고 싶다.

*Dashboard를 provisioning 설정하면 손쉽게 import 할수 있지만 dashboard 수정 후 저장이 불가하다

https://jihoon-0521.blogspot.com/2021/07/grafana-provisioning-datasource.html

Grafana api 써먹기 전에 알아야 할것.

1. GUI 화면에서 json model 내용을 그대로 복사해서 json 파일을 만들고 이걸 api로 import하면 안된다.

-> GUI화면에서 json model 내용과 api로 import 했을때 형식이 다른 것 같다.

-> API 로 export해서 json 파일을 받아야지만이 그대로 API로 저장가능하다.

2. json을 import할때 json 파일 내용 중 id 값은 null로 저장해야 한다.

-> import할때 자동으로 생성하게끔 되어있어 값이 정해져 있으면 import가 안되는 것 같다.

Dashboard Export API : garafana에 저장된 dashboard json으로 저장



#!/bin/bash



set -o errexit

set -o pipefail


#ID, PASSWARD에 grafana 로그인 정보 입력

ID="admin"

PASSWARD="admin"

#HOST에 grafana 접속정보 입력

HOST="10.111.111.111:3000"

FULLURL="http://$ID:$PASSWARD@$HOST"

set -o nounset


echo "Exporting Grafana dashboards from $HOST"

rm -rf dashboards

mkdir -p dashboards

for dash in $(curl -s "$FULLURL/api/search?query=&" | jq -r '.[] | select(.type == "dash-db") | .uid'); do

        curl -s "$FULLURL/api/dashboards/uid/$dash" | jq -r . > dashboards/${dash}.json

        slug=$(cat dashboards/${dash}.json | jq -r '.meta.slug')

        mv dashboards/${dash}.json dashboards/${dash}-${slug}.json

done

위 내용을 grafana_export.sh 등으로 저장하고 (chmod +x 로 실행권한 부여한 뒤) 실행하면

현재위치에서 dashboards라는 폴더를 만들고 그 안에 모든 dashboard를 export하여 저장한다.

(기존에 dashboards라는 폴더가 있으면 알아서 삭제 후 다시 생성한다.)

Dashboard Import API : json파일을 Grafana로 업로드하기



#!/bin/bash



#ID, PASSWARD에 grafana 로그인 정보 입력

ID="admin"

PASSWARD="admin"

#HOST에 grafana 접속정보 입력

HOST="10.111.111.111:3000"



FULLURL="http://$ID:$PASSWARD@$HOST"

echo $FULLURL

for FILE in *.json; do

cat $FILE | jq '. * {overwrite: true, dashboard: {id: null}}' | curl -X POST -H "Content-Type: application/json" $FULLURL/api/dashboards/db -d @- ;

done

현재폴더에 있는 모든 json파일을 업로드한다.

api token을 사용하는 경우 위 두 스크립트 모두에 curl 부분에

 -H "Authorization: Bearer api-key-with-write-permissions" 
를 추가하여 token을 넣어야한다.

아래는 참고 링크. 스크립트 내용 대부분을 가져왔다.

https://gist.github.com/crisidev/bd52bdcc7f029be2f295

댓글 쓰기

0 댓글