grafana api官方地址

grafana api认证方式

  • 基本认证
  • API Tokens

基本认证之curl示例

1
2
# curl http://admin:Passwd@grafanaIP:3000/api/org
{"id":1,"name":"Main Org.","address":{"address1":"","address2":"","city":"","zipCode":"","state":"","country":""}}

API Token认证之curl示例

前提条件,事先在grafana创建如下两个token:

  • viewer权限: eyJrIjoibWgzUHI1dnhhRU9LUTZXbm13cndXbXBzMTVEM2hxTVciLCJuIjoidmlld2VyIiwiaWQiOjF9
  • admin权限: eyJrIjoiSXhhcVk3ZUNIUkVmNldObFhhNWNHTWRTcTd3MUhqd0IiLCJuIjoiaGVqeCIsImlkIjoxfQ==
1
2
3
4
5
# curl -H "Authorization: Bearer eyJrIjoibWgzUHI1dnhhRU9LUTZXbm13cndXbXBzMTVEM2hxTVciLCJuIjoidmlld2VyIiwiaWQiOjF9" http://grafanaIP:3000/api/dashboards/home
{"meta":{"isHome":true,"canSave":false,"canEdit":false,"canAdmin":false,"canStar":false,"slug":"","url":"","expires":"0001-01-01T00:00:00Z","created":"0001-01-01T00:00:00Z","updated":"0001-01-01T00:00:00Z","updatedBy":"","createdBy":"","version":0,"hasAcl":false,"isFolder":false,"folderId":0,"folderTitle":"General","folderUrl":"","provisioned":false,"provisionedExternalId":""},"dashboard":{"links":[],"panels":[{"content":"\u003cdiv class=\"dashboard-header\"\u003e\n \u003cspan\u003eWelcome to Grafana\u003c/span\u003e\n\u003c/div\u003e","datasource":null,"editable":true,"gridPos":{"h":2,"w":24,"x":0,"y":0},"id":1,"links":[],"mode":"html","options":{},"style":{},"title":"","transparent":true,"type":"text"},{"datasource":null,"folderId":0,"gridPos":{"h":15,"w":11,"x":0,"y":4},"headings":true,"id":3,"limit":30,"links":[],"options":{},"query":"","recent":true,"search":false,"starred":true,"tags":[],"title":"Dashboards","type":"dashlist"},{"datasource":null,"gridPos":{"h":15,"w":8,"x":11,"y":4},"id":4,"links":[],"options":{"feedUrl":"https://grafana.com/blog/news.xml"},"title":"Latest from the blog","type":"news"},{"datasource":null,"gridPos":{"h":15,"w":5,"x":19,"y":4},"id":123124,"links":[],"options":{},"title":"Useful links","type":"homelinks"}],"schemaVersion":22,"tags":[],"templating":{"list":[]},"time":{"from":"now-6h","to":"now"},"timepicker":{"hidden":true,"refresh_intervals":["5s","10s","30s","1m","5m","15m","30m","1h","2h","1d"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"],"type":"timepicker"},"timezone":"browser","title":"Home"}}

# curl http://api_key:eyJrIjoibWgzUHI1dnhhRU9LUTZXbm13cndXbXBzMTVEM2hxTVciLCJuIjoidmlld2VyIiwiaWQiOjF9@grafanaIP:3000/api/dashboards/home
{"meta":{"isHome":true,"canSave":false,"canEdit":false,"canAdmin":false,"canStar":false,"slug":"","url":"","expires":"0001-01-01T00:00:00Z","created":"0001-01-01T00:00:00Z","updated":"0001-01-01T00:00:00Z","updatedBy":"","createdBy":"","version":0,"hasAcl":false,"isFolder":false,"folderId":0,"folderTitle":"General","folderUrl":"","provisioned":false,"provisionedExternalId":""},"dashboard":{"links":[],"panels":[{"content":"\u003cdiv class=\"dashboard-header\"\u003e\n \u003cspan\u003eWelcome to Grafana\u003c/span\u003e\n\u003c/div\u003e","datasource":null,"editable":true,"gridPos":{"h":2,"w":24,"x":0,"y":0},"id":1,"links":[],"mode":"html","options":{},"style":{},"title":"","transparent":true,"type":"text"},{"datasource":null,"folderId":0,"gridPos":{"h":15,"w":11,"x":0,"y":4},"headings":true,"id":3,"limit":30,"links":[],"options":{},"query":"","recent":true,"search":false,"starred":true,"tags":[],"title":"Dashboards","type":"dashlist"},{"datasource":null,"gridPos":{"h":15,"w":8,"x":11,"y":4},"id":4,"links":[],"options":{"feedUrl":"https://grafana.com/blog/news.xml"},"title":"Latest from the blog","type":"news"},{"datasource":null,"gridPos":{"h":15,"w":5,"x":19,"y":4},"id":123124,"links":[],"options":{},"title":"Useful links","type":"homelinks"}],"schemaVersion":22,"tags":[],"templating":{"list":[]},"time":{"from":"now-6h","to":"now"},"timepicker":{"hidden":true,"refresh_intervals":["5s","10s","30s","1m","5m","15m","30m","1h","2h","1d"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"],"type":"timepicker"},"timezone":"browser","title":"Home"}}

查询Api Keys信息

GET /api/auth/keys

1
2
3
4
5
# curl -H "Authorization: Bearer eyJrIjoibWgzUHI1dnhhRU9LUTZXbm13cndXbXBzMTVEM2hxTVciLCJuIjoidmlld2VyIiwiaWQiOjF9" http://grafanaIP:3000/api/auth/keys
{"message":"Permission denied"}

# curl -H "Authorization: Bearer eyJrIjoiSXhhcVk3ZUNIUkVmNldObFhhNWNHTWRTcTd3MUhqd0IiLCJuIjoiaGVqeCIsImlkIjoxfQ==" http://grafanaIP:3000/api/auth/keys
[{"id":2,"name":"hejx","role":"Admin"},{"id":1,"name":"viewer","role":"Viewer","expiration":"2020-04-04T22:04:41+08:00"}]

获取dashboard数据

GET /api/dashboards/uid/:uid

Will return the dashboard given the dashboard unique identifier (uid).

说明: uid为唯一标识

uid查询方法:

Example Request:

1
2
3
4
GET /api/dashboards/uid/cIBgcSjkk HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk

“mysql表信息-bak”仪表板的udi为1Ui-CiCWk,查询命令如下:

1
# curl -X GET --insecure -H "Authorization: Bearer eyJrIjoiSXhhcVk3ZUNIUkVmNldObFhhNWNHTWRTcTd3MUhqd0IiLCJuIjoiaGVqeCIsImlkIjoxfQ==" -H "Content-Type: application/json" -H "Accept: application/json" http://grafanaIP:3000/api/dashboards/uid/1Ui-CiCWk

结果如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
{
"meta": {
"type": "db",
"canSave": true,
"canEdit": true,
"canAdmin": true,
"canStar": true,
"slug": "mysqlbiao-xin-xi-bak",
"url": "/d/1Ui-CiCWk/mysqlbiao-xin-xi-bak",
"expires": "0001-01-01T00:00:00Z",
"created": "2020-04-03T21:57:50+08:00",
"updated": "2020-04-04T13:09:36+08:00",
"updatedBy": "admin",
"createdBy": "admin",
"version": 4,
"hasAcl": false,
"isFolder": false,
"folderId": 0,
"folderTitle": "General",
"folderUrl": "",
"provisioned": false,
"provisionedExternalId": ""
},
"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": 12,
"links": [],
"panels": [
{
"columns": [],
"datasource": "MySQL",
"fontSize": "100%",
"gridPos": {
"h": 9,
"w": 14,
"x": 0,
"y": 0
},
"id": 2,
"options": {},
"pageSize": null,
"showHeader": true,
"sort": {
"col": 0,
"desc": true
},
"styles": [
{
"alias": "Time",
"align": "auto",
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"pattern": "Time",
"type": "date"
},
{
"alias": "",
"align": "right",
"colorMode": null,
"colors": [
"rgba(245, 54, 54, 0.9)",
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
"decimals": 2,
"pattern": "/.*/",
"thresholds": [],
"type": "number",
"unit": "short"
}
],
"targets": [
{
"format": "table",
"group": [],
"metricColumn": "none",
"rawQuery": true,
"rawSql": "select TABLE_NAME, CREATE_TIME from information_schema.tables;",
"refId": "A",
"select": [
[
{
"params": [
"value"
],
"type": "column"
}
]
],
"timeColumn": "time",
"where": [
{
"name": "$__timeFilter",
"params": [],
"type": "macro"
}
]
}
],
"timeFrom": null,
"timeShift": null,
"title": "mysql\u8868\u4fe1\u606f",
"transform": "table",
"type": "table"
}
],
"schemaVersion": 22,
"style": "dark",
"tags": [],
"templating": {
"list": []
},
"time": {
"from": "now-6h",
"to": "now"
},
"timepicker": {
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
]
},
"timezone": "",
"title": "mysql\u8868\u4fe1\u606f-bak",
"uid": "1Ui-CiCWk",
"version": 4
}
}

仔细看返回的json数据,只是dashboard的结构,并没有具体数据.
此时就需要用到chrome的开发模式了,对照query参数传递参数即可得到数据.

拼凑POST参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# curl -X POST --insecure -H "Authorization: Bearer eyJrIjoiSXhhcVk3ZUNIUkVmNldObFhhNWNHTWRTcTd3MUhqd0IiLCJuIjoiaGVqeCIsImlkIjoxfQ==" -H "Content-Type: application/json" -H "Accept: application/json" -d '{
"from": "1585988609888",
"to": "1586010209888",
"queries": [
{
"refId": "A",
"intervalMs": 60000,
"maxDataPoints": 787,
"datasourceId": 1,
"rawSql": "select TABLE_NAME, CREATE_TIME from information_schema.tables;",
"format": "table"
}
]
}' http://grafanaIP:3000/api/tsdb/query

结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
{
"results": {
"A": {
"refId": "A",
"meta": {
"rowCount": 224,
"sql": "select TABLE_NAME, CREATE_TIME from information_schema.tables;"
},
"series": null,
"tables": [
{
"columns": [
{
"text": "TABLE_NAME"
},
{
"text": "CREATE_TIME"
}
],
"rows": [
[
"CHARACTER_SETS",
"2020-04-04T23:09:08Z"
],
[
"users",
"2020-02-20T21:09:47Z"
],
[
...省略...
],
[
"teacher_up",
"2020-03-07T23:20:24Z"
]
]
}
],
"dataframes": null
}
}
}

最后再推荐下postman工具

Postman是一种网页调试与发送网页http请求的工具。可用来很方便的模拟get或者post或者其他方式的请求来调试接口。

postman亮点:可将http请求转换为python shell java等代码,如图: