使用 api 创建 grafana 仪表板
Create grafana dashboards with 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 的一些变体,但我总是得到这样的响应,并且在 Internet 上我找不到有效的示例。有人给我一个工作示例吗?我喜欢这个工作,所以我可以从 ansible 创建仪表板。
谢谢!
我昨晚弄明白了,网站上的示例在 "schemaVersion"
之前缺少一个逗号
正确的json应该是:
{
"dashboard": {
"id": null,
"title": "Production Overview",
"tags": [ "templated" ],
"timezone": "browser",
"rows": [
{
}
],
"schemaVersion": 6,
"version": 0
},
"overwrite": false
}
如果您将 json 复制到此 json 验证器中,它会准确显示问题所在:
要对文件中的数据使用 curl post,请在文件名前加上 @,如下所示:
curl -i -H "Authorization: Bearer eyJrIobfuscatedlkIjoxfQ==" -d @/tmp/simpledash http://localhost:3000/api/dashboards/db
失败的原因是 API 需要知道负载是 json。
使用 cURL
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 }}"
和包含仪表板的 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"
}
]
}
有用 ONE-LINER 从您的计算机导入 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。
我是这样解决问题的:
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-然后复制dashboard json文件到/var/lib/grafana/dashboards(需要重启服务)
我正在添加另一种使用 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)
我正在尝试使用来自 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 的一些变体,但我总是得到这样的响应,并且在 Internet 上我找不到有效的示例。有人给我一个工作示例吗?我喜欢这个工作,所以我可以从 ansible 创建仪表板。
谢谢!
我昨晚弄明白了,网站上的示例在 "schemaVersion"
之前缺少一个逗号正确的json应该是:
{
"dashboard": {
"id": null,
"title": "Production Overview",
"tags": [ "templated" ],
"timezone": "browser",
"rows": [
{
}
],
"schemaVersion": 6,
"version": 0
},
"overwrite": false
}
如果您将 json 复制到此 json 验证器中,它会准确显示问题所在:
要对文件中的数据使用 curl post,请在文件名前加上 @,如下所示:
curl -i -H "Authorization: Bearer eyJrIobfuscatedlkIjoxfQ==" -d @/tmp/simpledash http://localhost:3000/api/dashboards/db
失败的原因是 API 需要知道负载是 json。
使用 cURL
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 }}"
和包含仪表板的 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"
}
]
}
有用 ONE-LINER 从您的计算机导入 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。
我是这样解决问题的:
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-然后复制dashboard json文件到/var/lib/grafana/dashboards(需要重启服务)
我正在添加另一种使用 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)