Создавайте дашборды Grafana с api

Я пытаюсь создать информационные панели Grafana из шаблона с api из Grafana. На данный момент использую grafana v2.0.2.

У меня есть ключ api, и я могу получить информационные панели с помощью curl, но я не могу создавать информационные панели.

Когда я выполняю следующий запрос: curl -i -H "Authorization: Bearer eyJrIobfuscatedlkIjoxfQ==" http://localhost:3000/api/dashboards/db/webserver2, я возвращаю json для панели инструментов.

Когда я пытаюсь создать простейшую панель инструментов, которую я нашел в примерах api, она не работает: curl -i -H "Authorization: Bearer eyJrIobfuscatedlkIjoxfQ==" -d /tmp/simpledash http://localhost:3000/api/dashboards/db где /tmp/simpledash содержит:

{
  "dashboard": {
    "id": null,
    "title": "Production Overview",
    "tags": [ "templated" ],
    "timezone": "browser",
    "rows": [
      {
      }
    ]
    "schemaVersion": 6,
    "version": 0
  },
  "overwrite": false
 }

Получаю такой ответ:

HTTP/1.1 422 status code 422
Content-Type: application/json; charset=utf-8
Date: Wed, 01 Jul 2015 16:16:48 GMT
Content-Length: 84

[{"fieldNames":   ["Dashboard"],"classification":"RequiredError","message":"Required"}]

Я пробовал несколько вариантов json, но всегда получаю такой ответ, а в Интернете не нашел рабочего примера. У кого-нибудь есть рабочий пример для меня? Мне нравится, когда это работает, поэтому я могу создавать панель инструментов из ansible.

Спасибо!


person Vincent    schedule 01.07.2015    source источник
comment
Я обнаружил, что у меня есть ошибки JS, если в массиве строк есть пустой объект [{}] внутри, отправка [] сама по себе, похоже, исправила это. Кажется, JS видит объект и пытается извлечь из него значения.   -  person Rebs    schedule 01.02.2016


Ответы (6)


Причина сбоя в том, что API должен знать, что полезная нагрузка - это json.

с cURL

curl -XPOST -i http://localhost:3000/api/dashboards/db --data-binary @./test.json -H "Content-Type: application/json"

с анзиблем

- name: postinstall::dashsetups
  uri:
    url: http://{{grafana.ip}}:{{grafana.bind}}/api/dashboards/db
    method: POST
    user: "{{ admin_usr }}"
    password: "{{ admin_pwd }}"
    body: "{{ lookup('template', item.file) }}"
    status_code: 200
    body_format: raw
    force_basic_auth: yes
    HEADER_Content-Type: "application/json"
  with_items: "{{ grafana.dashboards }}"

и файл vars, содержащий информационные панели,

"grafana":{"dashboards": [
          {
            "name": "t1",
            "file": "./dashboards/filename.json.j2",
            "dash_name": "Test 1"
          },
          {
            "name": "t2",
            "file": "./dashboards/filename2.json.j2",
            "dash_name": "Test 2"
          },
          {
            "name": "t3",
            "file": "./dashboards/template3.json.j2",
            "dash_name": "Test 3"
          }
        ]
}
person Danie    schedule 24.02.2016

Я понял это вчера вечером, в примере на веб-сайте отсутствует запятая непосредственно перед "schemaVersion"

правильный json должен быть:

{
  "dashboard": {
    "id": null,
    "title": "Production Overview",
    "tags": [ "templated" ],
    "timezone": "browser",
    "rows": [
      {
      }
    ],
    "schemaVersion": 6,
    "version": 0
  },
  "overwrite": false
 }

если вы скопируете свой json в этот валидатор json, он точно покажет вам, в чем проблема:

http://jsonlint.com/

person Alex Laverty    schedule 09.07.2015

Чтобы использовать curl для публикации данных из файла, поставьте @ перед именем файла, например:

curl -i -H "Authorization: Bearer eyJrIobfuscatedlkIjoxfQ==" -d @/tmp/simpledash http://localhost:3000/api/dashboards/db
person solipsistnation    schedule 25.08.2015

Решил проблему так:

1- сначала создайте свой источник данных, подобный этому (в моем случае я использовал комбинацию collectd, prometheus и grafana)

curl --user admin:admin 'http://IPADDR:3000/api/datasources' -X  POST -H 'Content-Type: application/json;charset=UTF-8'  --data-binary '{"name":"test","type":"prometheus","url":"http://localhost:9090","access":"proxy","basicAuth":false}'

2-Для добавления настраиваемой панели инструментов json отредактируйте файл grafana.ini и включите раздел файла json панели инструментов, как показано ниже:

;##################### Dashboard JSON files #####################
 [dashboards.json]
 enabled = true
 path = /var/lib/grafana/dashboards

3- затем скопируйте файл json панели инструментов в / var / lib / grafana / dashboards (вам необходимо перезапустить службу)

person mojdeh    schedule 01.01.2018
comment
У меня это тоже сработало. Мне пришлось изменить аннотацию экспортированного исходного файла Json на панели мониторинга, чтобы она была буквальным именем источника данных, например: Замена $ {DATASOURCE} на test - person Leo; 08.11.2018

Удобный ОДИН ЛАЙНЕР для импорта панелей мониторинга JSON с вашего компьютера

for i in `ls *.json` ;do curl -i -u GRAFANA_USERNAME:GRAFANA_PASSWORD -H "Content-Type: application/json" -X POST http://GRAFANA_HOST/api/dashboards/db -d @$i ; done

Измените GRAFANA_USERNAME, GRAFANA_PASSWORD и GRAFANA_HOST из приведенной выше команды.

person Karan Singh    schedule 02.02.2017

Я добавляю еще один способ использования скрипта Python

import requests
url='http://admin:admin@localhost:3000/api/dashboards/db'
data='''{
  "dashboard": {
    "id": null,
    "uid": "mahadev",
    "title": "scriptedDashboard",
    "tags": [ "templated" ],
    "timezone": "browser",
    "schemaVersion": 16,
    "version": 0
  },
  "folderId": 48,
  "overwrite": false
}'''
headers={"Content-Type": 'application/json'}
response = requests.post(url, data=data,headers=headers)
print (response.text)
person Mahadev Gouda    schedule 03.07.2018