아래 링크에 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을 넣어야한다.
아래는 참고 링크. 스크립트 내용 대부분을 가져왔다.
0 댓글