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를 설정 안 했다. 설정하자. 다시 임포트

Alt text

여전히 안된다. 왜 이럴가?

그건 json에 기존에 datasourceid가 hardcoding되어 있기 때문이다.

Alt text

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
Alt text

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

Alt text

선택후 import를 해보자.

여전히 에러가 난다.

Alt text

여전히 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 메뉴로 들어가보자.

Alt text

추가로 variable이 생긴것을 알수 있다.

이 variable을 json에서 사용하자.

기존에 코드는 지우고 아래처럼 업데이트하자.

// "panels": [
//   {
//     "datasource": {
//       "type": "prometheus",
//       "uid": "PBFA97CFB590B2093"
//     },

"panels": [
  {
    "datasource": "${DS_PROMETHEUS}",

중복되는 모든 코드를 수정한다.

다시 임포트해보자.

Alt text

잘 된다.

이제 이 json은 다른 그라파나에서도 쓸수가 있다.

provisioning에서도 동작할가?

https://github.com/teamsmiley/devops-public/tree/main/monitoring/4-2.grafana-portable-dashboard

Alt text
Alt text

잘 동작한다.

Last updated

Was this helpful?