我有关于 Grafana API 的问题。
我需要导出使用 GUI 制作的所有仪表板的 JSON 模型,以便将它们导入到另一个 Grafana 实例中。 我尝试使用仪表板 API - api/dashboards/ 使用curl 和仪表板 uuid 或 uri (db/), 但由于某种原因,我总是收到消息未找到
我发现的 uids 和 uris
$URL/api/search?query=&
然后我尝试获取模型或任何数据
curl -k -H “Authorization: Bearer $KEY” $URL/api/dashboards/db/$dash_name
或
curl -k -H “Authorization: Bearer $KEY” $URL/api/dashboards/uid/$uid
结果是一样的。
有谁知道这是为什么吗?我在其他地方找不到任何信息。
提前致谢。
解决方案取自:https://gist.github.com/crisidev/bd52bdcc7f029be2f295#gistcomment-3975489
#!/bin/bash
HOST='http://localhost:3000'
KEY="<add-valid-key>"
DIR="grafana_dashboards"
# Iterate through dashboards using the current API Key
for dashboard_uid in $(curl -sS -H "Authorization: Bearer $KEY" $HOST/api/search\?query\=\& | jq -r '.[] | select( .type | contains("dash-db")) | .uid'); do
url=$(echo $HOST/api/dashboards/uid/$dashboard_uid | tr -d '\r')
dashboard_json=$(curl -sS -H "Authorization: Bearer $KEY" $url)
dashboard_title=$(echo $dashboard_json | jq -r '.dashboard | .title' | sed -r 's/[ \/]+/_/g')
dashboard_version=$(echo $dashboard_json | jq -r '.dashboard | .version')
folder_title="$(echo $dashboard_json | jq -r '.meta | .folderTitle')"
echo "Creating: ${DIR}/${folder_title}/${dashboard_title}_v${dashboard_version}.json"
mkdir -p "${DIR}/${folder_title}"
echo ${dashboard_json} | jq -r {meta:.meta}+.dashboard > "${DIR}/${folder_title}/${dashboard_title}_v${dashboard_version}.json"
done
Grafana v9.1.7 中的工作解决方案
#!/bin/bash
HOST='http://<YOUR_GRAFANA_URL>:3000'
DASH_DIR=./
# Declare a list with the api keys using as a prefix the organization name plus "_" character
declare -a StringArray=("<YOUR_ORG_NAME>_<API_KEY>")
# Iterate through api keys:
for API_KEY in "${StringArray[@]}"; do
ORG=$(echo $API_KEY | cut -d "_" -f1) # Name of the organization based on the prefix
KEY=$(echo $API_KEY | cut -d "_" -f2) # API Key for that organization after removing the prefix
# Iterate through dashboards using the current API Key
for dashboard_uid in $(curl -sS -H "Authorization: Bearer $KEY" $HOST/api/search\?query\=\& | jq -r '.[] | select( .type | contains("dash-db")) | .uid'); do
url=`echo $HOST/api/dashboards/uid/$dashboard_uid | tr -d '\r'`
dashboard_json=$(curl -sS -H "Authorization: Bearer $KEY" $url)
dashboard_title=$(echo $dashboard_json | jq -r '.dashboard | .title' | sed -r 's/[ \/]+/_/g' )
dashboard_version=$(echo $dashboard_json | jq -r '.dashboard | .version')
folder_title="$(echo $dashboard_json | jq -r '.meta | .folderTitle')"
# You can export the files like this to keep them organized by organization:
mkdir -p "$DASH_DIR/$ORG/$folder_title/dashboards_$ORG"
echo $dashboard_json | jq -r {meta:.meta}+.dashboard > $DASH_DIR/$ORG/$folder_title/dashboards_$ORG/${dashboard_title}_v${dashboard_version}.json
done
done
对于 google - PowerShell Grafana 保存/导出所有仪表板
给自己的一封信。
有时您需要在报表中搜索源数据,但又不想每次都编写脚本。
$_KEY="xxx"
$_HOST="https://xxx"
$headers = @{Authorization="Bearer $_KEY"}
$responseData = (Invoke-WebRequest -Uri $_HOST/api/search -Method Get -Headers $headers -UseBasicParsing -ContentType "application/json; charset=UTF-8").Content | ConvertFrom-Json
for ($i = 0; $i -lt $responseData.Length; $i++)
{
if ($responseData[$i].type -ne "dash-db") { continue }
((Invoke-WebRequest -Uri "$_HOST/api/dashboards/uid/$($responseData[$i].uid)" -Method Get -Headers $headers -UseBasicParsing -ContentType "application/json; charset=UTF-8").Content | ConvertFrom-Json).dashboard | ConvertTo-Json -depth 100 | Out-File -Encoding utf8 -FilePath "$($responseData[$i].uid).json"
}