Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add dashboard configuration json file in Grafana image?

I have a grafana docker image which have hawkular-datasource pre-configured using configuration files.

After after running grafana instance, I have a json given by teammate, which can be imported inside grafana and that json file creates dashboard when imported.

How do I make that dashboards appear by default in Grafana instance?

I tried copying the json file to /etc/grafana/provisioning/dashboards/ folder and created a new docker image. But when I run the image, the instance doesn't contain the dashboard at the homepage or anywhere in it.

How do I add this json file in docker image. Am I following the correct way?

I tried this http://docs.grafana.org/administration/provisioning/ But it didn't help out much. Any suggestion?

Here is the json file.

{
    "id": null,
    "title": "Openshift Metrics",
    "tags": [],
    "style": "dark",
    "timezone": "browser",
    "editable": true,
    "hideControls": false,
    "sharedCrosshair": false,
    "rows": [
      {
        "collapse": false,
        "editable": true,
        "height": "322px",
        "panels": [
          {
            "content": "<center><p style='font-size: 40pt'>$app</p></center>",
            "editable": true,
            "error": false,
            "id": 23,
            "isNew": true,
            "links": [],
            "mode": "html",
            "repeatIteration": 1476706310439,
            "scopedVars": {},
            "span": 2,
            "style": {
              "font-size": "36pt"
            },
            "title": "",
            "type": "text"
          },
          {
            "aliasColors": {},
            "bars": false,
            "datasource": "Hawk-DS",
            "editable": true,
            "error": false,
            "fill": 1,
            "grid": {
              "threshold1": null,
              "threshold1Color": "rgba(216, 200, 27, 0.27)",
              "threshold2": null,
              "threshold2Color": "rgba(234, 112, 112, 0.22)"
            },
            "id": 9,
            "isNew": true,
            "legend": {
              "avg": false,
              "current": false,
              "max": false,
              "min": false,
              "show": true,
              "total": false,
              "values": false
            },
            "lines": true,
            "linewidth": 2,
            "links": [],
            "nullPointMode": "connected",
            "percentage": false,
            "pointradius": 5,
            "points": false,
            "renderer": "flot",
            "repeatIteration": 1476706310439,
            "scopedVars": {},
            "seriesOverrides": [],
            "span": 6,
            "stack": false,
            "steppedLine": false,
            "targets": [
              {
                "queryBy": "tags",
                "rate": false,
                "refId": "A",
                "seriesAggFn": "none",
                "tags": [
                  {
                    "name": "container_name",
                    "value": "$app"
                  },
                  {
                    "name": "descriptor_name",
                    "value": "memory/usage"
                  }
                ],
                "target": "select metric",
                "tagsQL": "container_name IN [$app] AND descriptor_name='memory/usage'",
                "timeAggFn": "avg",
                "type": "gauge"
              }
            ],
            "timeFrom": null,
            "timeShift": null,
            "title": "Memory usage",
            "tooltip": {
              "msResolution": true,
              "shared": true,
              "sort": 0,
              "value_type": "cumulative"
            },
            "type": "graph",
            "xaxis": {
              "show": true
            },
            "yaxes": [
              {
                "format": "bytes",
                "label": null,
                "logBase": 1,
                "max": null,
                "min": 0,
                "show": true
              },
              {
                "format": "short",
                "label": null,
                "logBase": 1,
                "max": null,
                "min": null,
                "show": true
              }
            ]
          },
          {
            "cacheTimeout": null,
            "colorBackground": true,
            "colorValue": false,
            "colors": [
              "rgba(50, 172, 45, 0.97)",
              "rgba(237, 129, 40, 0.89)",
              "rgba(245, 54, 54, 0.9)"
            ],
            "datasource": "Hawk-DS",
            "editable": true,
            "error": false,
            "format": "bytes",
            "gauge": {
              "maxValue": 100,
              "minValue": 0,
              "show": false,
              "thresholdLabels": false,
              "thresholdMarkers": true
            },
            "height": "100px",
            "id": 12,
            "interval": null,
            "isNew": true,
            "links": [],
            "mappingType": 1,
            "mappingTypes": [
              {
                "name": "value to text",
                "value": 1
              },
              {
                "name": "range to text",
                "value": 2
              }
            ],
            "maxDataPoints": 100,
            "nullPointMode": "connected",
            "nullText": null,
            "postfix": "",
            "postfixFontSize": "50%",
            "prefix": "",
            "prefixFontSize": "50%",
            "rangeMaps": [
              {
                "from": "null",
                "text": "N/A",
                "to": "null"
              }
            ],
            "repeatIteration": 1476706310439,
            "scopedVars": {},
            "span": 2,
            "sparkline": {
              "fillColor": "rgba(31, 118, 189, 0.18)",
              "full": false,
              "lineColor": "rgb(31, 120, 193)",
              "show": false
            },
            "targets": [
              {
                "queryBy": "tags",
                "rate": false,
                "refId": "A",
                "seriesAggFn": "sum",
                "tags": [
                  {
                    "name": "container_name",
                    "value": "$app"
                  },
                  {
                    "name": "descriptor_name",
                    "value": "memory/usage"
                  }
                ],
                "target": "select metric",
                "tagsQL": "container_name IN [$app] AND descriptor_name='memory/usage'",
                "timeAggFn": "live",
                "type": "gauge"
              }
            ],
            "thresholds": "140000000,180000000",
            "title": "Live, all pods",
            "type": "singlestat",
            "valueFontSize": "80%",
            "valueMaps": [
              {
                "op": "=",
                "text": "N/A",
                "value": "null"
              }
            ],
            "valueName": "avg"
          },
          {
            "cacheTimeout": null,
            "colorBackground": true,
            "colorValue": false,
            "colors": [
              "rgba(50, 172, 45, 0.97)",
              "rgba(237, 129, 40, 0.89)",
              "rgba(245, 54, 54, 0.9)"
            ],
            "datasource": "Hawk-DS",
            "editable": true,
            "error": false,
            "format": "bytes",
            "gauge": {
              "maxValue": 100,
              "minValue": 0,
              "show": false,
              "thresholdLabels": false,
              "thresholdMarkers": true
            },
            "height": "100px",
            "id": 15,
            "interval": null,
            "isNew": true,
            "links": [],
            "mappingType": 1,
            "mappingTypes": [
              {
                "name": "value to text",
                "value": 1
              },
              {
                "name": "range to text",
                "value": 2
              }
            ],
            "maxDataPoints": 100,
            "nullPointMode": "connected",
            "nullText": null,
            "postfix": "",
            "postfixFontSize": "50%",
            "prefix": "",
            "prefixFontSize": "50%",
            "rangeMaps": [
              {
                "from": "null",
                "text": "N/A",
                "to": "null"
              }
            ],
            "repeatIteration": 1476706310439,
            "scopedVars": {},
            "span": 2,
            "sparkline": {
              "fillColor": "rgba(31, 118, 189, 0.18)",
              "full": false,
              "lineColor": "rgb(31, 120, 193)",
              "show": false
            },
            "targets": [
              {
                "queryBy": "tags",
                "rate": false,
                "refId": "A",
                "seriesAggFn": "avg",
                "tags": [
                  {
                    "name": "container_name",
                    "value": "$app"
                  },
                  {
                    "name": "descriptor_name",
                    "value": "memory/usage"
                  }
                ],
                "target": "select metric",
                "tagsQL": "container_name IN [$app] AND descriptor_name='memory/usage'",
                "timeAggFn": "live",
                "type": "gauge"
              }
            ],
            "thresholds": "140000000,180000000",
            "title": "Live per pod",
            "type": "singlestat",
            "valueFontSize": "80%",
            "valueMaps": [
              {
                "op": "=",
                "text": "N/A",
                "value": "null"
              }
            ],
            "valueName": "avg"
          },
          {
            "cacheTimeout": null,
            "colorBackground": true,
            "colorValue": false,
            "colors": [
              "rgba(50, 172, 45, 0.97)",
              "rgba(237, 129, 40, 0.89)",
              "rgba(245, 54, 54, 0.9)"
            ],
            "datasource": "Hawk-DS",
            "editable": true,
            "error": false,
            "format": "bytes",
            "gauge": {
              "maxValue": 100,
              "minValue": 0,
              "show": false,
              "thresholdLabels": false,
              "thresholdMarkers": true
            },
            "height": "100px",
            "id": 10,
            "interval": null,
            "isNew": true,
            "links": [],
            "mappingType": 1,
            "mappingTypes": [
              {
                "name": "value to text",
                "value": 1
              },
              {
                "name": "range to text",
                "value": 2
              }
            ],
            "maxDataPoints": 100,
            "nullPointMode": "connected",
            "nullText": null,
            "postfix": "",
            "postfixFontSize": "50%",
            "prefix": "",
            "prefixFontSize": "50%",
            "rangeMaps": [
              {
                "from": "null",
                "text": "N/A",
                "to": "null"
              }
            ],
            "repeatIteration": 1476706310439,
            "scopedVars": {},
            "span": 2,
            "sparkline": {
              "fillColor": "rgba(31, 118, 189, 0.18)",
              "full": false,
              "lineColor": "rgb(31, 120, 193)",
              "show": false
            },
            "targets": [
              {
                "queryBy": "tags",
                "rate": false,
                "refId": "A",
                "seriesAggFn": "sum",
                "tags": [
                  {
                    "name": "container_name",
                    "value": "$app"
                  },
                  {
                    "name": "descriptor_name",
                    "value": "memory/usage"
                  }
                ],
                "target": "select metric",
                "tagsQL": "container_name IN [$app] AND descriptor_name='memory/usage'",
                "timeAggFn": "avg",
                "type": "gauge"
              }
            ],
            "thresholds": "140000000,180000000",
            "title": "Average, all pods",
            "type": "singlestat",
            "valueFontSize": "80%",
            "valueMaps": [
              {
                "op": "=",
                "text": "N/A",
                "value": "null"
              }
            ],
            "valueName": "avg"
          },
          {
            "cacheTimeout": null,
            "colorBackground": true,
            "colorValue": false,
            "colors": [
              "rgba(50, 172, 45, 0.97)",
              "rgba(237, 129, 40, 0.89)",
              "rgba(245, 54, 54, 0.9)"
            ],
            "datasource": "Hawk-DS",
            "editable": true,
            "error": false,
            "format": "bytes",
            "gauge": {
              "maxValue": 100,
              "minValue": 0,
              "show": false,
              "thresholdLabels": false,
              "thresholdMarkers": true
            },
            "height": "100px",
            "id": 13,
            "interval": null,
            "isNew": true,
            "links": [],
            "mappingType": 1,
            "mappingTypes": [
              {
                "name": "value to text",
                "value": 1
              },
              {
                "name": "range to text",
                "value": 2
              }
            ],
            "maxDataPoints": 100,
            "nullPointMode": "connected",
            "nullText": null,
            "postfix": "",
            "postfixFontSize": "50%",
            "prefix": "",
            "prefixFontSize": "50%",
            "rangeMaps": [
              {
                "from": "null",
                "text": "N/A",
                "to": "null"
              }
            ],
            "repeatIteration": 1476706310439,
            "scopedVars": {},
            "span": 2,
            "sparkline": {
              "fillColor": "rgba(31, 118, 189, 0.18)",
              "full": false,
              "lineColor": "rgb(31, 120, 193)",
              "show": false
            },
            "targets": [
              {
                "queryBy": "tags",
                "rate": false,
                "refId": "A",
                "seriesAggFn": "avg",
                "tags": [
                  {
                    "name": "container_name",
                    "value": "$app"
                  },
                  {
                    "name": "descriptor_name",
                    "value": "memory/usage"
                  }
                ],
                "target": "select metric",
                "tagsQL": "container_name IN [$app] AND descriptor_name='memory/usage'",
                "timeAggFn": "avg",
                "type": "gauge"
              }
            ],
            "thresholds": "140000000,180000000",
            "title": "Average per pod",
            "type": "singlestat",
            "valueFontSize": "80%",
            "valueMaps": [
              {
                "op": "=",
                "text": "N/A",
                "value": "null"
              }
            ],
            "valueName": "avg"
          },
          {
            "cacheTimeout": null,
            "colorBackground": true,
            "colorValue": false,
            "colors": [
              "rgba(50, 172, 45, 0.97)",
              "rgba(237, 129, 40, 0.89)",
              "rgba(245, 54, 54, 0.9)"
            ],
            "datasource": "Hawk-DS",
            "editable": true,
            "error": false,
            "format": "bytes",
            "gauge": {
              "maxValue": 100,
              "minValue": 0,
              "show": false,
              "thresholdLabels": false,
              "thresholdMarkers": true
            },
            "height": "100px",
            "id": 11,
            "interval": null,
            "isNew": true,
            "links": [],
            "mappingType": 1,
            "mappingTypes": [
              {
                "name": "value to text",
                "value": 1
              },
              {
                "name": "range to text",
                "value": 2
              }
            ],
            "maxDataPoints": 100,
            "nullPointMode": "connected",
            "nullText": null,
            "postfix": "",
            "postfixFontSize": "50%",
            "prefix": "",
            "prefixFontSize": "50%",
            "rangeMaps": [
              {
                "from": "null",
                "text": "N/A",
                "to": "null"
              }
            ],
            "repeatIteration": 1476706310439,
            "scopedVars": {},
            "span": 2,
            "sparkline": {
              "fillColor": "rgba(31, 118, 189, 0.18)",
              "full": false,
              "lineColor": "rgb(31, 120, 193)",
              "show": false
            },
            "targets": [
              {
                "queryBy": "tags",
                "rate": false,
                "refId": "A",
                "seriesAggFn": "sum",
                "tags": [
                  {
                    "name": "container_name",
                    "value": "$app"
                  },
                  {
                    "name": "descriptor_name",
                    "value": "memory/usage"
                  }
                ],
                "target": "select metric",
                "tagsQL": "container_name IN [$app] AND descriptor_name='memory/usage'",
                "timeAggFn": "max",
                "type": "gauge"
              }
            ],
            "thresholds": "140000000,180000000",
            "title": "Max, all pods",
            "type": "singlestat",
            "valueFontSize": "80%",
            "valueMaps": [
              {
                "op": "=",
                "text": "N/A",
                "value": "null"
              }
            ],
            "valueName": "avg"
          },
          {
            "cacheTimeout": null,
            "colorBackground": true,
            "colorValue": false,
            "colors": [
              "rgba(50, 172, 45, 0.97)",
              "rgba(237, 129, 40, 0.89)",
              "rgba(245, 54, 54, 0.9)"
            ],
            "datasource": "Hawk-DS",
            "editable": true,
            "error": false,
            "format": "bytes",
            "gauge": {
              "maxValue": 100,
              "minValue": 0,
              "show": false,
              "thresholdLabels": false,
              "thresholdMarkers": true
            },
            "height": "100px",
            "id": 14,
            "interval": null,
            "isNew": true,
            "links": [],
            "mappingType": 1,
            "mappingTypes": [
              {
                "name": "value to text",
                "value": 1
              },
              {
                "name": "range to text",
                "value": 2
              }
            ],
            "maxDataPoints": 100,
            "nullPointMode": "connected",
            "nullText": null,
            "postfix": "",
            "postfixFontSize": "50%",
            "prefix": "",
            "prefixFontSize": "50%",
            "rangeMaps": [
              {
                "from": "null",
                "text": "N/A",
                "to": "null"
              }
            ],
            "repeatIteration": 1476706310439,
            "scopedVars": {},
            "span": 2,
            "sparkline": {
              "fillColor": "rgba(31, 118, 189, 0.18)",
              "full": false,
              "lineColor": "rgb(31, 120, 193)",
              "show": false
            },
            "targets": [
              {
                "queryBy": "tags",
                "rate": false,
                "refId": "A",
                "seriesAggFn": "avg",
                "tags": [
                  {
                    "name": "container_name",
                    "value": "$app"
                  },
                  {
                    "name": "descriptor_name",
                    "value": "memory/usage"
                  }
                ],
                "target": "select metric",
                "tagsQL": "container_name IN [$app] AND descriptor_name='memory/usage'",
                "timeAggFn": "max",
                "type": "gauge"
              }
            ],
            "thresholds": "140000000,180000000",
            "title": "Max per pod",
            "type": "singlestat",
            "valueFontSize": "80%",
            "valueMaps": [
              {
                "op": "=",
                "text": "N/A",
                "value": "null"
              }
            ],
            "valueName": "avg"
          }
        ],
        "repeat": "app",
        "scopedVars": {
          "app": {
            "text": "aloha",
            "value": "aloha",
            "selected": true
          }
        },
        "title": "New row"
      }
    ],
    "time": {
      "from": "now-30m",
      "to": "now"
    },
    "timepicker": {
      "refresh_intervals": [
        "5s",
        "10s",
        "30s",
        "1m",
        "5m",
        "15m",
        "30m",
        "1h",
        "2h",
        "1d"
      ],
      "time_options": [
        "5m",
        "15m",
        "1h",
        "6h",
        "12h",
        "24h",
        "2d",
        "7d",
        "30d"
      ]
    },
    "templating": {
      "list": [
        {
          "current": {},
          "datasource": "Hawk-DS",
          "hide": 0,
          "includeAll": true,
          "label": "Application",
          "multi": true,
          "name": "app",
          "options": [],
          "query": "tags/container_name:*",
          "refresh": 1,
          "regex": "",
          "type": "query"
        }
      ]
    },
    "annotations": {
      "list": []
    },
    "schemaVersion": 12,
    "version": 32,
    "links": [],
    "gnetId": null
}
like image 682
GreyWorm Avatar asked Feb 21 '19 18:02

GreyWorm


People also ask

How do I import a JSON file into Grafana dashboard?

Upload your Grafana dashboardIn the bottom left panel, click Upload a dashboard. In the Upload dashboard dialog box, click select dashboard. json file to locate the dashboard on your computer. Click Upload dashboard.

How do I display json data in Grafana?

One way to display Json data is through grafana's own json datasource (grafana-simple-json-datasource) which would then convert into data. You might want to check if that would meet your needs. One other way would be developing a panel plugin that would plot a graph given the json you give it.

Where is Grafana dashboard json stored?

The default folder of the dashboard is /var/lib/grafana . If you navigate to the folder, you will find a file name grafana. db .


2 Answers

I've faced with the same problem and I hope the next solution could help somebody. For example, you have the next working directory:

├── docker-compose.yml          
├── grafana                     
│   ├── Dockerfile
│   ├── dashboards
│   │   └── exported_dashboard.json    #dashboard you saved before
│   └── provisioning            
│       │                       
│       ├── dashboards          
│       │   └── all.yml         
│       └── datasources
│           └── all.yml         
  1. In the Dockerfile you have to add provisioning and dashboards folders into grafana container:
FROM grafana/grafana:latest
ADD ./provisioning /etc/grafana/provisioning
ADD ./dashboards /var/lib/grafana/dashboards
  1. In provisioning/dashboards/all.yml you have to set path to imported dashboards folder where exported_dashboard.json is actually placed:
- name: 'default'
  org_id: 1
  folder: ''
  type: 'file'
  options:
    folder: '/var/lib/grafana/dashboards'
  1. [Optional] Then you also can configure default datasourse in provisioning/datasources/all.yml, prometheus, for example:
datasources:
-  access: 'proxy'
   editable: true
   is_default: true
   name: 'prom1'
   org_id: 1
   type: 'prometheus'
   url: 'http://prometheus:9090'
   version: 1
  1. Finally, docker-compose.yml:
version: '3.8'

services:
  grafana:
    image: awesome-grafana:latest
    build:
      context: grafana
    ports:
      - "3000:3000"
    environment:
      GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH: "/var/lib/grafana/dashboards/exported_dashboard.json"
  • As for HOME dashborad, you can use the GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH evironment variable, as shown above. More about GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH evironment variable you can read in that github issue.
  • The full comprehensive code example you can find in the next github repository
  • Original article with explanation there.
like image 117
Volodya Lombrozo Avatar answered Oct 02 '22 10:10

Volodya Lombrozo


You should put a YAML file pointing to the JSON files in that folder. For example write /etc/grafana/provisioning/dashboards/local.yml:

apiVersion: 1

providers:
- name: 'default'
  orgId: 1
  folder: ''
  type: file
  disableDeletion: false
  updateIntervalSeconds: 10 #how often Grafana will scan for changed dashboards
  options:
    path: /var/lib/grafana/dashboards

And then write your JSON file to /var/lib/grafana/dashboards/openshift.json.


Before Grafana 5, my previous solution was to wrap the whole Docker process in a script that uses the API to create the dashboard once the Docker container is up. You can use the GF_SECURITY_ADMIN_PASSWORD environment variable to set the password. You can also use GF_AUTH_ANONYMOUS_ENABLED, but you'll need to make sure it's not accessible to the outside world.

docker run -p 3000:3000 -e GF_AUTH_ANONYMOUS_ENABLED=true grafana/grafana ...
sleep 10  # wait for grafana to load (use a better method of waiting in production)
curl -skfS -XPOST --header "Content-Type: application/json" "http://localhost:3000/grafana/api/dashboards/db" --data-binary @dashboard.json
like image 25
kichik Avatar answered Oct 02 '22 12:10

kichik