首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法通过grafana API导入Grafana仪表板

无法通过grafana API导入Grafana仪表板
EN

Stack Overflow用户
提问于 2018-06-14 14:16:17
回答 2查看 4.9K关注 0票数 6

我正在尝试通过以下Grafana使用HTTP API导入Grafana仪表板

Grafana版本: 5.1.3 OS -Windows 10

这就是我尝试过的

代码语言:javascript
复制
curl --user admin:admin "http://localhost:3000/api/dashboards/db" -X POST -H "Content-Type:application/json;charset=UTF-8" --data-binary @c:/Users/Mahadev/Desktop/Dashboard.json

下面是我的python代码

代码语言:javascript
复制
import requests

headers = {
'Content-Type': 'application/json;charset=UTF-8',
}

data = open('C:/Users/Mahadev/Desktop/Dashboard.json', 'rb').read()
response = requests.post('http://admin:admin@localhost:3000/api/dashboards/db', headers=headers, data=data)
print (response.text)

两者的输出都是:

代码语言:javascript
复制
[{"fieldNames":["Dashboard"],"classification":"RequiredError","message":"Required"}]

它在我的json有效负载中请求名为dashboard的根属性。有没有人能建议我如何使用这个特性,我应该提供什么数据。

如果任何人想深入挖掘,这里有一些链接。

代码语言:javascript
复制
https://github.com/grafana/grafana/issues/8193
https://github.com/grafana/grafana/issues/2816
https://github.com/grafana/grafana/issues/8193
https://community.grafana.com/t/how-can-i-import-a-dashboard-from-a-json-file/669
https://github.com/grafana/grafana/issues/273
https://github.com/grafana/grafana/issues/5811
https://stackoverflow.com/questions/39968111/unable-to-post-to-grafana-using-python3-module-requests
https://stackoverflow.com/questions/39954475/post-request-works-in-postman-but-not-in-python/39954514#39954514
https://www.bountysource.com/issues/44431991-use-api-to-import-json-file-error
https://github.com/grafana/grafana/issues/7029
EN

回答 2

Stack Overflow用户

发布于 2018-06-15 22:48:22

也许你应该试着从API下载你的仪表板,这样你就可以有一个“合适的”json模型来进行推送了?

您可以使用以下命令进行下载:

代码语言:javascript
复制
curl -H "Authorization: Bearer $TOKEN" https://grafana.domain.tld/api/dashboards/uid/$DASHBOARD_UID

另一种方法是,您可以在grafana网站=> grafana a.com/ dashboard上下载仪表板JSON,并尝试将其与当前代码一起上载?;)

仪表板字段包含将显示、警报、图表等所有内容。

以下是dashboard.json的一个示例:

代码语言:javascript
复制
{
  "meta": {
    "type": "db",
    "canSave": true,
    "canEdit": true,
    "canAdmin": false,
    "canStar": true,
    "slug": "status-app",
    "url": "/d/lOy3lIImz/status-app",
    "expires": "0001-01-01T00:00:00Z",
    "created": "2018-06-04T11:40:20+02:00",
    "updated": "2018-06-14T17:51:23+02:00",
    "updatedBy": "jean",
    "createdBy": "jean",
    "version": 89,
    "hasAcl": false,
    "isFolder": false,
    "folderId": 0,
    "folderTitle": "General",
    "folderUrl": "",
    "provisioned": false
  },
  "dashboard": {
    "annotations": {
      "list": [
        {
          "builtIn": 1,
          "datasource": "-- Grafana --",
          "enable": true,
          "hide": true,
          "iconColor": "rgba(0, 211, 255, 1)",
          "name": "Annotations & Alerts",
          "type": "dashboard"
        }
      ]
    },
    "editable": true,
    "gnetId": null,
    "graphTooltip": 0,
    "id": 182,
    "links": [],
    "panels": [
      {
        "alert": {
          "conditions": [
            {
              "evaluator": {
                "params": [
                  1
                ],
                "type": "lt"
              },
              "operator": {
                "type": "and"
              },
              "query": {
                "params": [
                  "A",
                  "5m",
                  "now"
                ]
              },
              "reducer": {
                "params": [],
                "type": "avg"
              },
              "type": "query"
            }
          ],
          "executionErrorState": "alerting",
          "frequency": "60s",
          "handler": 1,
          "name": "Status of  alert",
          "noDataState": "alerting",
          "notifications": [
            {
              "id": 7
            }
          ]
        },
        "aliasColors": {},
        "bars": false,
        "dashLength": 10,
        "dashes": false,
        "datasource": "Collectd",
        "fill": 1,
        "gridPos": {
          "h": 7,
          "w": 8,
          "x": 0,
          "y": 0
        },
        "id": 4,
        "legend": {
          "alignAsTable": true,
          "avg": true,
          "current": true,
          "max": false,
          "min": false,
          "rightSide": false,
          "show": true,
          "total": false,
          "values": true
        },
        "lines": true,
        "linewidth": 1,
        "links": [],
        "nullPointMode": "connected",
        "percentage": false,
        "pointradius": 5,
        "points": false,
        "renderer": "flot",
        "seriesOverrides": [],
        "spaceLength": 10,
        "stack": false,
        "steppedLine": false,
        "targets": [
          {
            "alias": "Status",
            "groupBy": [
              {
                "params": [
                  "$__interval"
                ],
                "type": "time"
              },
              {
                "params": [
                  "null"
                ],
                "type": "fill"
              }
            ],
            "measurement": "processes_processes",
            "orderByTime": "ASC",
            "policy": "default",
            "query": "SELECT mean(value) FROM \"processes_processes\" WHERE (\"instance\" = '' AND \"host\" = 'Webp01') AND $timeFilter GROUP BY time($interval) fill(null)",
            "rawQuery": true,
            "refId": "A",
            "resultFormat": "time_series",
            "select": [
              [
                {
                  "params": [
                    "value"
                  ],
                  "type": "field"
                },
                {
                  "params": [],
                  "type": "mean"
                }
              ]
            ],
            "tags": [
              {
                "key": "instance",
                "operator": "=",
                "value": ""
              },
              {
                "condition": "AND",
                "key": "host",
                "operator": "=",
                "value": "Webp01"
              }
            ]
          }
        ],
        "thresholds": [
          {
            "colorMode": "critical",
            "fill": true,
            "line": true,
            "op": "lt",
            "value": 1
          }
        ],
        "timeFrom": null,
        "timeShift": null,
        "title": "Status of ",
        "tooltip": {
          "shared": true,
          "sort": 0,
          "value_type": "individual"
        },
        "type": "graph",
        "xaxis": {
          "buckets": null,
          "mode": "time",
          "name": null,
          "show": true,
          "values": []
        },
        "yaxes": [
          {
            "format": "short",
            "label": null,
            "logBase": 1,
            "max": null,
            "min": null,
            "show": true
          },
          {
            "format": "short",
            "label": null,
            "logBase": 1,
            "max": null,
            "min": null,
            "show": true
          }
        ],
        "yaxis": {
          "align": false,
          "alignLevel": null
        }
      }
    ],
    "refresh": "5m",
    "schemaVersion": 16,
    "style": "dark",
    "tags": [
      "web",
      "nodejs"
    ],
    "templating": {
      "list": []
    },
    "time": {
      "from": "now/d",
      "to": "now"
    },
    "timepicker": {
      "hidden": false,
      "refresh_intervals": [
        "5s",
        "10s",
        "30s",
        "1m",
        "5m",
        "15m",
        "30m",
        "1h",
        "2h",
        "1d"
      ],
      "time_options": [
        "5m",
        "15m",
        "1h",
        "6h",
        "12h",
        "24h",
        "2d",
        "7d",
        "30d"
      ]
    },
    "timezone": "",
    "title": "Status APP",
    "uid": "lOy3lIImz",
    "version": 89
  },
}

编辑:

这是一个JSON剪贴器,用于为仪表板创建模板:

代码语言:javascript
复制
  "templating": {
    "list": [
      {
        "allValue": null,
        "current": {
          "text": "PRD_Web01",
          "value": "PRD_Web01"
        },
        "datasource": "Collectd",
        "hide": 0,
        "includeAll": false,
        "label": null,
        "multi": false,
        "name": "host",
        "options": [],
        "query": "SHOW TAG VALUES WITH KEY=host",
        "refresh": 1,
        "regex": "",
        "sort": 0,
        "tagValuesQuery": "",
        "tags": [],
        "tagsQuery": "",
        "type": "query",
        "useTags": false
      },
      {
        "allValue": null,
        "current": {
          "text": "sda",
          "value": "sda"
        },
        "datasource": "Collectd",
        "hide": 0,
        "includeAll": false,
        "label": null,
        "multi": false,
        "name": "device",
        "options": [],
        "query": "SHOW TAG VALUES FROM \"disk_read\" WITH KEY = \"instance\"",
        "refresh": 1,
        "regex": "",
        "sort": 0,
        "tagValuesQuery": "",
        "tags": [],
        "tagsQuery": "",
        "type": "query",
        "useTags": false
      }
    ]
  },

当我读到你的答案时,我猜你会对此感到满意;)。我会试着更好地关注这个帖子。

票数 3
EN

Stack Overflow用户

发布于 2018-12-19 20:15:46

你能展示一下你的仪表板json是什么样子的吗?json必须包含一个按键仪表板,其值中包含所有详细信息,如下所示:

代码语言:javascript
复制
{
  "dashboard": {
    "id": null,
    "uid": null,
    "title": "Production Overview",
    "tags": [ "templated" ],
    "timezone": "browser",
    "schemaVersion": 16,
    "version": 0
  },
  "folderId": 0,
  "overwrite": false
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50850767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档