2015-07-01 103 views
5

我正嘗試使用grafana的api模板創建grafana儀表板。我目前使用grafana v2.0.2。使用api創建grafana儀表板

我有一個API密鑰,我可以用curl獲得儀表板,但我無法創建儀表板。

當我做了以下的請求:curl -i -H "Authorization: Bearer eyJrIobfuscatedlkIjoxfQ==" http://localhost:3000/api/dashboards/db/webserver2 然後我得到的JSON回到dasboard。

當我嘗試創建我的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的一些變體,但我總是得到這種反應,並在互聯網上找不到一個工作的例子。任何人都有我的例子嗎?我喜歡這個工作,所以我可以從可靠的方面創建儀表板。

謝謝!

+0

我發現我有JS如果「rows」數組裏面有一個空對象'[{}]',發送'[]'似乎已經糾正了這個錯誤。 JS似乎看到了這個對象,並試圖從中提取值。 – Rebs

回答

7

它失敗的原因是API需要知道有效負載是json。

與捲曲

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

與ansible

- 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 }}" 

和VAR文件,其中包含儀表板,

"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" 
      } 
     ] 
} 
4

昨晚我想通了這一點,網站上的例子只是「schemaVersion」前缺少一個逗號

正確的JSON應該是:

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

如果您複製的JSON到這個JSON驗證它會告訴你究竟在何處的問題是:

http://jsonlint.com/

3

要使用curl從文件發佈的數據,把一個@之前的文件名,如下所示:

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

的Userful的一行從您的機器導入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。

0

我解決了這樣的問題:

1先創建數據源這樣的(在我來說,我使用collectd,普羅米修斯與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 /儀表板(需要重新啓動該服務)