使用HTTP API导入grafana现有json文件时出现“消息”:“无法导入仪表板”错误

时间:2019-07-04 09:35:39

标签: grafana grafana-api

我正在尝试使用HTTP API导入grafana现有的json文件,它已成功读取json文件,但是每一行都抛出2019-07-04 12:48:26.837 WARN 94752 --- [main] o.s.w.c.s.GenericWebApplicationContext: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Failed to start bean 'org.springframework.kafka.config.internalKafkaListenerEndpointRegistry'; nested exception is org.apache.kafka.common.errors.TimeoutException: Timeout expired while fetching topic metadata 错误。

我试图执行以下命令,

command not found

它正在读取json文件中的每一行,但会引发错误

  

“消息”:“无法导入仪表板”

curl -X POST --insecure -H "Authorization: Bearer eyJrIjoiOWwwUmpQYUFmczhRVG1CZ1VmdTZ1VlZLTlc2ba0xUb0QiLCJuIjoia2xhIiwiaWQiOjJ9" -H "Content-Type: application/json" -d '{"dashboard":{"id": 1,"title": "tested33","tags": ["templated"],"timezone": "browser","rows": [{}],"schemaVersion": 6,"version": 0},"overwrite":false}' -d "$(/u04/my_metrics.json)"   localhost:3000/api/dashboards/db

请一次检查json文件,并协助我解决此问题

3 个答案:

答案 0 :(得分:2)

您正在尝试导入在Grafana UI中导出的仪表板json /u04/my_metrics.json。您还必须使用Grafana UI进行导入-https://grafana.com/docs/reference/export_import/

如果要使用Grafana仪表板API(https://grafana.com/docs/http_api/dashboard/),则需要从Grafana API中“导出”(正确的API名称为“获取仪表板”)。

Grafana UI和Grafana仪表板API会生成不同的仪表板JSON主体架构,因此您不能轻松互换它们。从理论上讲,您可以将json转换为正确的格式,但是您需要熟悉使用的仪表板JSON主体架构。

答案 1 :(得分:0)

请从json中删除“ id”:17。它将开始工作

答案 2 :(得分:0)

我需要使用配置了必要仪表板的grafana来自动启动docker容器,因此请按照以下步骤操作:

  • 首先,我使用存储在 Prometheus,仪表板设计完成后,我将使用导出 显示仪表板的UID的选项(它也存在于 URL)。

enter image description here

  • 接下来,我使用邮递员工具并调用 Grafana REST API 以获取 仪表板的 UID 以JSON格式显示的详细信息。您可以获得更多 following link中的信息。

在我的情况下,我使用默认的用户名和密码(admin / admin)以及在配置Docker容器时映射的端口3000。

URL如下:

http:// admin:admin @ localhost:3000 / api / dashboards / uid / lNCIQZdGk

如您所见,它将以兼容的格式返回仪表板的元数据,以通过Grafana REST API导入。

enter image description here

最后一步,有必要删除JSON的“ id”属性,以避免在导入时收到404,并继续使用该配置创建新的信息中心,并为其分配一个新的ID。

enter image description here

enter image description here

如您所见,删除该属性将创建一个新的仪表板并为其分配ID 4。

enter image description here

使用类似于以下内容的CURL命令通过脚本自动创建仪表板会更合适:

curl --verbose -L -s --fail -H "Accept: application/json" -H "Content-Type: application/json" -X POST -k http://admin:admin@localhost:3000/api/dashboards/db --data @/etc/grafana/dashboards/kafka_exporter_overview.json

我与您分享了在创建Docker容器期间用于配置仪表板和数据源的脚本:

GRAFANA_URL=${GRAFANA_URL:-http://$GF_SECURITY_ADMIN_USER:$GF_SECURITY_ADMIN_PASSWORD@localhost:3000}
#GRAFANA_URL=http://grafana-plain.k8s.playground1.aws.ad.zopa.com
DATASOURCES_PATH=${DATASOURCES_PATH:-/etc/grafana/datasources}
DASHBOARDS_PATH=${DASHBOARDS_PATH:-/etc/grafana/dashboards}

# Generic function to call the Vault API
grafana_api() {
  local verb=$1
  local url=$2
  local params=$3
  local bodyfile=$4
  local response
  local cmd

  cmd="curl --verbose -L -s --fail -H \"Accept: application/json\" -H \"Content-Type: application/json\" -X ${verb} -k ${GRAFANA_URL}${url}"
  [[ -n "${params}" ]] && cmd="${cmd} -d \"${params}\""
  [[ -n "${bodyfile}" ]] && cmd="${cmd} --data @${bodyfile}"
  echo "Running ${cmd}"
  eval ${cmd} || return 1
  return 0
}

wait_for_api() {
  while ! grafana_api GET /api/user/preferences
  do
    sleep 5
  done 
}

install_datasources() {
  local datasource

  for datasource in ${DATASOURCES_PATH}/*.json
  do
    if [[ -f "${datasource}" ]]; then
      echo "Installing datasource ${datasource}"
      if grafana_api POST /api/datasources "" "${datasource}"; then
        echo "installed ok"
      else
        echo "install failed"
      fi
    fi
  done
}

install_dashboards() {
  local dashboard

  for dashboard in ${DASHBOARDS_PATH}/*.json
  do
    if [[ -f "${dashboard}" ]]; then
      echo "Installing dashboard ${dashboard}"

      if grafana_api POST /api/dashboards/db "" "${dashboard}"; then
        echo "installed ok"
      else
        echo "install failed"
      fi

    fi
  done
}

configure_grafana() {
  wait_for_api
  install_datasources
  install_dashboards
}

echo "Running configure_grafana in the background..."
configure_grafana &
/run.sh
exit 0

希望这个答案可以帮助某人。