3

I am trying to export dashboards of a grafana instance via its HTTP API and reimport them using the HTTP API.

The reimport gives me the following errors (412):

{
  "message": "The dashboard belongs to plugin Prometheus.",
  "status": "plugin-dashboard"
}
{
  "message": "The dashboard has been changed by someone else",
  "status": "version-mismatch"
}

WHAT I DO

EXPORT

curl --fail --insecure --user $USER:$PASSWORD --request "GET" "$TARGET/api/search" --header "Accept: application/json" | jq -r '.[].uri | select(. | startswith("db/"))' > /tmp/grafanaDashboards.txt

while read F  ; do
   FILENAME=$(basename "$F").json
   OUT=$(curl --silent --fail --insecure --user $USER:$PASSWORD --request "GET" "$TARGET/api/dashboards/$F" --header "Accept: application/json" --output "$FILENAME" --write-out '%{http_code}') 2>/dev/null
done </tmp/grafanaDashboards.txt || exit 1

IMPORT

for FILENAME in $SOURCE/micro*; do
   OUT=$(curl --fail --insecure --user $USER:$PASSWORD --request "POST" "$TARGET/api/dashboards/db" --header "Content-Type: application/json" --data-binary @$FILENAME --write-out '%{http_code}')
done || exit 1

CONTENT

The exported content looks like this:

{
   "meta":{
      "type":"db",
      "canSave":true,
      "canEdit":true,
      "canStar":true,
      "slug":"microservice-xyz-overview-current-values-m",
      "expires":"0001-01-01T00:00:00Z",
      "created":"2017-11-22T17:41:12Z",
      "updated":"2017-11-22T17:41:12Z",
      "updatedBy":"admin",
      "createdBy":"admin",
      "version":1
   },
   "dashboard":{
      "annotations":{
         "list":[
            {
               "builtIn":1,
               "datasource":"-- Grafana --",
               "enable":true,
               "hide":true,
               "iconColor":"rgba(0, 211, 255, 1)",
               "name":"Annotations \u0026 Alerts",
               "type":"dashboard"
            }
         ]
      },
      "editable":true,
      "gnetId":null,
      "graphTooltip":0,
      "hideControls":false,
      "id":3,
      "links":[

      ],
      "refresh":"5s",
      "rows":[
         {
            "collapse":false,
            "height":"180",
            "panels":[
               {
                  "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":"Prometheus",
                  "description":"Average of all 95th percentile of last minute.",
                  "format":"s",
                  "gauge":{
                     "maxValue":1000,
                     "minValue":0,
                     "show":false,
                     "thresholdLabels":true,
                     "thresholdMarkers":true
                  },
                  "hideTimeOverride":false,
                  "id":11,
                  "interval":null,
                  "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"
                     }
                  ],
                  "span":4,
                  "sparkline":{
                     "fillColor":"rgba(255, 255, 255, 0.08)",
                     "full":true,
                     "lineColor":"rgb(255, 255, 255)",
                     "show":true
                  },
                  "tableColumn":"handler",
                  "targets":[
                     {
                        "expr":"avg(http_response_time{status=~\"2[0-9]{2}\", handler=\"xyz\", quantile=\"0.95\"})",
                        "format":"time_series",
                        "interval":"15s",
                        "intervalFactor":1,
                        "refId":"A",
                        "step":15
                     }
                  ],
                  "thresholds":"400,500",
                  "timeFrom":null,
                  "title":"95-th response time",
                  "type":"singlestat",
                  "valueFontSize":"120%",
                  "valueMaps":[
                     {
                        "op":"=",
                        "text":"0",
                        "value":"null"
                     }
                  ],
                  "valueName":"current"
               },
               {
                  "cacheTimeout":null,
                  "colorBackground":true,
                  "colorValue":false,
                  "colors":[
                     "rgba(245, 54, 54, 0.9)",
                     "rgba(237, 129, 40, 0.89)",
                     "rgba(50, 172, 45, 0.97)"
                  ],
                  "datasource":"Prometheus",
                  "description":"Number of running xyzz/xyzzz services.",
                  "format":"short",
                  "gauge":{
                     "maxValue":10,
                     "minValue":0,
                     "show":false,
                     "thresholdLabels":false,
                     "thresholdMarkers":true
                  },
                  "hideTimeOverride":false,
                  "id":17,
                  "interval":null,
                  "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"
                     }
                  ],
                  "span":4,
                  "sparkline":{
                     "fillColor":"rgba(255, 255, 255, 0.18)",
                     "full":true,
                     "lineColor":"rgb(255, 255, 255)",
                     "show":true
                  },
                  "tableColumn":"",
                  "targets":[
                     {
                        "expr":"sum(up{job=~\"xyzz|xyzzz\"})",
                        "format":"time_series",
                        "interval":"",
                        "intervalFactor":1,
                        "refId":"A",
                        "step":1
                     }
                  ],
                  "thresholds":"2,2",
                  "timeFrom":null,
                  "title":"running instances",
                  "type":"singlestat",
                  "valueFontSize":"120%",
                  "valueMaps":[
                     {
                        "op":"=",
                        "text":"N/A",
                        "value":"null"
                     }
                  ],
                  "valueName":"current"
               },
               {
                  "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":"Prometheus",
                  "format":"none",
                  "gauge":{
                     "maxValue":100,
                     "minValue":0,
                     "show":false,
                     "thresholdLabels":false,
                     "thresholdMarkers":true
                  },
                  "id":22,
                  "interval":null,
                  "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"
                     }
                  ],
                  "span":4,
                  "sparkline":{
                     "fillColor":"rgba(255, 255, 255, 0.18)",
                     "full":true,
                     "lineColor":"rgb(255, 255, 255)",
                     "show":true
                  },
                  "tableColumn":"handler",
                  "targets":[
                     {
                        "expr":"sum(rate(http_response_time_count{handler=\"xyz\", status=~\"2[0-9]{2}\"}[1m]))",
                        "format":"time_series",
                        "intervalFactor":1,
                        "legendFormat":"",
                        "metric":"http_response_time_count",
                        "refId":"A",
                        "step":30
                     }
                  ],
                  "thresholds":"1000,3000",
                  "timeFrom":null,
                  "title":"HTTP-2XX / min",
                  "type":"singlestat",
                  "valueFontSize":"120%",
                  "valueMaps":[
                     {
                        "op":"=",
                        "text":"N/A",
                        "value":"null"
                     }
                  ],
                  "valueName":"current"
               }
            ],
            "repeat":null,
            "repeatIteration":null,
            "repeatRowId":null,
            "showTitle":false,
            "title":"Dashboard Row",
            "titleSize":"h6"
         },
         {
            "collapse":false,
            "height":"180",
            "panels":[
               {
                  "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":"Prometheus",
                  "decimals":null,
                  "format":"short",
                  "gauge":{
                     "maxValue":100,
                     "minValue":0,
                     "show":false,
                     "thresholdLabels":false,
                     "thresholdMarkers":true
                  },
                  "hideTimeOverride":false,
                  "id":20,
                  "interval":null,
                  "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"
                     }
                  ],
                  "span":4,
                  "sparkline":{
                     "fillColor":"rgba(255, 255, 255, 0.18)",
                     "full":true,
                     "lineColor":"rgb(255, 255, 255)",
                     "show":true
                  },
                  "tableColumn":"",
                  "targets":[
                     {
                        "expr":"sum(rate(http_response_time_count{handler=\"xyz\", status=~\"4[0-9]{2}\"}[1m]))",
                        "format":"time_series",
                        "intervalFactor":1,
                        "refId":"A",
                        "step":2
                     }
                  ],
                  "thresholds":"100",
                  "timeFrom":null,
                  "timeShift":null,
                  "title":"HTTP-4XX / min",
                  "type":"singlestat",
                  "valueFontSize":"120%",
                  "valueMaps":[
                     {
                        "op":"=",
                        "text":"N/A",
                        "value":"null"
                     }
                  ],
                  "valueName":"diff"
               },
               {
                  "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":"Prometheus",
                  "format":"short",
                  "gauge":{
                     "maxValue":100,
                     "minValue":0,
                     "show":false,
                     "thresholdLabels":false,
                     "thresholdMarkers":true
                  },
                  "hideTimeOverride":false,
                  "id":18,
                  "interval":null,
                  "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"
                     }
                  ],
                  "span":4,
                  "sparkline":{
                     "fillColor":"rgba(255, 255, 255, 0.18)",
                     "full":true,
                     "lineColor":"rgb(255, 255, 255)",
                     "show":true
                  },
                  "tableColumn":"",
                  "targets":[
                     {
                        "expr":"sum(rate(http_response_time_count{handler=\"xyz\", status=~\"5[0-9]{2}\"}[1m]))",
                        "format":"time_series",
                        "intervalFactor":1,
                        "refId":"A",
                        "step":2
                     }
                  ],
                  "thresholds":"10,100",
                  "timeFrom":null,
                  "timeShift":null,
                  "title":"HTTP-5XX / min",
                  "type":"singlestat",
                  "valueFontSize":"120%",
                  "valueMaps":[
                     {
                        "op":"=",
                        "text":"0",
                        "value":"null"
                     }
                  ],
                  "valueName":"diff"
               },
               {
                  "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":"Prometheus",
                  "format":"none",
                  "gauge":{
                     "maxValue":100,
                     "minValue":0,
                     "show":false,
                     "thresholdLabels":false,
                     "thresholdMarkers":true
                  },
                  "hideTimeOverride":false,
                  "id":21,
                  "interval":null,
                  "links":[

                  ],
                  "mappingType":2,
                  "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":"Come on. Not a single error?",
                        "to":"null"
                     },
                     {
                        "from":"0",
                        "text":"Come on. Not a single error?",
                        "to":"1"
                     },
                     {
                        "from":"1",
                        "text":"Repair that!",
                        "to":"100"
                     },
                     {
                        "from":"100",
                        "text":"That will not end good for you...",
                        "to":"1000"
                     },
                     {
                        "from":"1000",
                        "text":"You have lost the match.",
                        "to":"99999999"
                     }
                  ],
                  "span":4,
                  "sparkline":{
                     "fillColor":"rgba(31, 118, 189, 0.18)",
                     "full":false,
                     "lineColor":"rgb(31, 120, 193)",
                     "show":false
                  },
                  "tableColumn":"",
                  "targets":[
                     {
                        "expr":"sum(rate(http_response_time_count{handler=\"xyz\", status=~\"4[0-9]{2}\"}[1m]))",
                        "format":"time_series",
                        "intervalFactor":1,
                        "refId":"A",
                        "step":2
                     }
                  ],
                  "thresholds":"1,1000",
                  "timeFrom":null,
                  "timeShift":null,
                  "title":"",
                  "type":"singlestat",
                  "valueFontSize":"70%",
                  "valueMaps":[
                     {
                        "op":"=",
                        "text":"0",
                        "value":"null"
                     }
                  ],
                  "valueName":"current"
               }
            ],
            "repeat":null,
            "repeatIteration":null,
            "repeatRowId":null,
            "showTitle":false,
            "title":"SLA quantiles",
            "titleSize":"h6"
         }
      ],
      "schemaVersion":14,
      "style":"dark",
      "tags":[

      ],
      "templating":{
         "list":[

         ]
      },
      "time":{
         "from":"now-1h",
         "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"
         ]
      },
      "timezone":"utc",
      "title":"Microservice | XYZ | Overview | Current Values | M",
      "version":1
   }
}

Does anyone have an idea how I can fix this? Changing the version helps me to prevent version-mismatch-error (this should only be a workaround)!

INFO: The grafana instance for the import is different from the export instance. But it is the same version with the exactly same datasource.

1 Answer 1

7

The dashboard json you are trying to import has the id field ("id": 3) and having the id field in the json means you are trying to update an existing dashboard.

The The dashboard belongs to plugin Prometheus. error is because you are not allowed to update dashboards that belong to a data source or plugin.

To import a new dashboard, simply remove the id field and Grafana will create a new dashboard with the imported json (and assign it a new id).

3
  • ...but how do we update an existing dashboard with an ID? Web UI gives "do you want to overwrite" prompt.
    – bryn
    Commented Oct 4, 2018 at 12:21
  • @bryn do you mean after updating via the Grafana API that you get the overwrite warning when opening the updated dashboard in Grafana? Or are you asking about something else?
    – Daniel Lee
    Commented Oct 4, 2018 at 12:25
  • 2
    No, I'd just like to overwrite via the API. I see now there's a property you can set in your request: "overwrite": true - that should solve it for me :)
    – bryn
    Commented Oct 4, 2018 at 12:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.