4. grafana portable dashboard
source-code : https://github.com/teamsmiley/devops-public/tree/main/monitoring/4.grafana-portable-dashboard
json파일을 portable하게 만들기
사실은 앞에 파일을 다른곳에서 사용하게 되면 에러가 난다.
해보자.
docker-compose up -d
이제 dashboard를 import해보자. 에러난다.
왜 이럴가?
oh no! datasource를 설정 안 했다. 설정하자. 다시 임포트

여전히 안된다. 왜 이럴가?
그건 json에 기존에 datasourceid가 hardcoding되어 있기 때문이다.

data source를 추가하면 매번 id가 바뀌기 때문에 이런 문제가 발생한다.
이걸 해결하려면 json파일을 portable하게 만들어야 한다.
아래 부분을 json에 추가를 해주자.
"__inputs": [
{
"name": "DS_PROMETHEUS",
"label": "Prometheus",
"description": "",
"type": "datasource",
"pluginId": "prometheus",
"pluginName": "Prometheus"
}
],
"__elements": {},
"__requires": [
{
"type": "panel",
"id": "gauge",
"name": "Gauge",
"version": ""
},
{
"type": "grafana",
"id": "grafana",
"name": "Grafana",
"version": "9.4.3"
},
{
"type": "datasource",
"id": "prometheus",
"name": "Prometheus",
"version": "1.0.0"
},
{
"type": "panel",
"id": "stat",
"name": "Stat",
"version": ""
},
{
"type": "panel",
"id": "timeseries",
"name": "Time series",
"version": ""
}
],
"annotations": {
"list": [
xxx

data source를 추가하는 곳이 생겼다.

선택후 import를 해보자.
여전히 에러가 난다.

여전히 datasource가 하드코딩 되있기 때문이다. 아래 코드를 추가하자. 기존코드는 삭제하자.
// "templating": {
// "list": []
// },
"templating": {
"list": [
{
"current": {
"selected": false,
"text": "default",
"value": "default"
},
"hide": 2,
"includeAll": false,
"label": "datasource",
"multi": false,
"name": "DS_PROMETHEUS",
"options": [],
"query": "prometheus",
"refresh": 1,
"regex": "",
"skipUrlSync": false,
"type": "datasource"
}
]
},
임포트해보자. 마찬가지로 에러이다.
이제 설정 버튼을 클릭하고 variable 메뉴로 들어가보자.

추가로 variable이 생긴것을 알수 있다.
이 variable을 json에서 사용하자.
기존에 코드는 지우고 아래처럼 업데이트하자.
// "panels": [
// {
// "datasource": {
// "type": "prometheus",
// "uid": "PBFA97CFB590B2093"
// },
"panels": [
{
"datasource": "${DS_PROMETHEUS}",
중복되는 모든 코드를 수정한다.
다시 임포트해보자.

잘 된다.
이제 이 json은 다른 그라파나에서도 쓸수가 있다.
provisioning에서도 동작할가?
https://github.com/teamsmiley/devops-public/tree/main/monitoring/4-2.grafana-portable-dashboard


잘 동작한다.
Last updated
Was this helpful?