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.
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).
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.