目的: 尽量通过API'自动化'完成,增加'效率'
Grafana HTTP API
官方Dashboard操作
① 创建API Keys
说明: 可以通过'UI'创建,也可以通过'命令行'创建,两种方式都会'创建'
(1) 图形化
用grafana的api'需要鉴权',可以进去'grafana页面',按照'下面方式'申请api key
说明: 可以通过'Role'和'Date'进行'更细'粒度的控制
(2)API自动创建
说明: 利用'user:passwd'进行'API Keys'的创建
curl -s -X POST -H "Content-Type: application/json" \
-d '{"name":"loki"}' \
http://admin:admin@localhost:3000/api/auth/keys | jq -r .key
备注: '-r'去除两边的"双引号"
② 创建数据源
案例:删除'loki'的数据源,然后'非交互创建'数据源
使用'API Keys':保存'响应'中的key值,前面'拼接好'固定的Bearer
+++++++++++ '查看有哪些数据源头' +++++++++++
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # -u 'user:passwd'也可
-d '{"name":"loki_pro","type":"loki","url":"http://127.0.0.1:","access":"proxy","basicAuth":false}'
"http://127.0.0.1:3001/api/datasources"
细节点: 重点是'type(数据源的类型)'和'url' --> 'prometheus'
删除数据源 创建数据源
③ dashboard api
掌握: 'API' 创建'fold(多层级)',并在对应'fold'创建'Dashboard'
创建'Dashboard':
1)首先在grafana中通过json model来'导出'我们的dashboard
2)curl -H "Content-Type: application/json" -X POST \
-H "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-d @/usr/local/dashboards/dashboard.json \
"http://127.0.0.1:3001/api/dashboards/db"
注意: grafana创建dashboard需要一个'固定'的格式,注意'panels'和'templating'
grafana创建dashboard需要一个固定的格式,否则报错
查询所有的 Fold 创建Fold
④ 先通过UI创建一个Dashoard
说明: 针对'loki'数据源的
⑤ loki的数据模型
二 API案例
说明: '自动化'创建一个Dashoard
关注: '创建 API Keys'、查询'fold'、'查询和导出Dashboard'、在'fold'下新建'Dashoard'
补充: 每个'Dashoard'对应一个'service(微服务)'
① Authentication HTTP API
1)查询'API keys' --> GET /api/auth/keys
2)创建'API Keys' --> POST /api/auth/keys
3)删除'API Keys' --> DELETE /api/auth/keys/:id
② 配置数据源
1)查询'所有的'数据源 --> GET /api/datasources
2)查询'某一个'数据源 --> GET /api/datasources/:datasourceId -->通过'id'
3)查询'某一个'数据源 --> GET /api/datasources/uid/:uid -->通过'uid'
4)查询'某一个'数据源 --> GET /api/datasources/name/:name -->通过'name'
5)查询'某一个'数据源 --> GET /api/datasources/id/:name
6)创建'特定类型'数据源 --> POST /api/datasources -->注意'-d'参数
7)更新'数据源' --> PUT /api/datasources/:datasourceId -->注意'-d'参数
8)删除'数据源' --> DELETE /api/datasources/:datasourceId
9)'检查'数据源 --> GET /api/datasources/uid/:uid/health
10)获取数据源'资源' --> GET /api/datasources/:datasourceId/resources/*
掌握'常见数据源(小写)'类型: Elasticsearch、'Loki'、MySQL、PostgreSQL、'Prometheus'
创建数据源
③ Folder API操作
按照'一定的标准'把dashboard分类,放到'不同'的folder中,'默认'处于General中
1) 查询'所有'的Folder --> GET /api/folders
2) 基于'uid'查询Folder --> GET /api/folders/:uid
3) 创建'Folder' --> POST /api/folders -->"重点!!!"
4) 更新'Folder' --> PUT /api/folders/:uid
5) 删除'Folder' --> DELETE /api/folders/:uid
6) 基于'id'查询Folder --> GET /api/folders/id/:id
补充: 'POST、PUT'需要传'json'格式的请求体
创建Folder
④ Dashboard API操作
1)'创建/更新'一个'Dashboard' --> POST /api/dashboards/db -->注意'-d'的参数
重要: panels'定义的各种panel信息'、templating'定义的variable'
2) 查询'某一个'Dashboard --> GET /api/dashboards/uid/:uid
3) 删除'某一个'Dashoard --> DELETE /api/dashboards/uid/:uid
4) 查询'Home'的Dashboard --> GET /api/dashboards/home
5) 获取'Dashboard'的tags -->GET /api/dashboards/tags
Dashboard API Search
Panel面板介绍
1) 没有'API'创建'panels',需要先通过dashboard'手动的创建出'所需要展示的'图标'
2) 然后'复制json model',将其'保存'成dashboard.json',然后使用API'来创建'Dashboard'
3) curl -H "Content-Type: application/json" -X POST \
-d @/usr/local/dashboards/dashboard.json \
-H "Authorization: Bearer TOKEN值" \
"http://127.0.0.1:3001/api/dashboards/db"
++++++++++++++ '复制其它Dashboard的panels和templating' ++++++++++++++
+++++++++++ '分割线(案例讲解)' +++++++++++
应用场景: '新服务上线'基于'已有的环境(fold)','自动'创建'Dashbaord'
Dashbboard常见的字段
{
"dashboard": {
"id": null,
"title": "mysql",
"timezone": "",
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"panels": [
{
"datasource": null,
"gridPos": {
"h": 18,
"w": 21,
"x": 1,
"y": 0
},
"id": 2,
"options": {
"dedupStrategy": "none",
"enableLogDetails": true,
"prettifyLogMessage": false,
"showCommonLabels": false,
"showLabels": false,
"showTime": false,
"sortOrder": "Descending",
"wrapLogMessage": false
},
"pluginVersion": "8.1.5",
"targets": [
{
"expr": "{service_name=\"mysql\"}"
}
],
"title": "mysql",
"type": "logs"
}
],
"style": "dark",
"schemaVersion": 30
},
"folderId": 3,
"folderUid": "_08iugcVk",
"overwrite": false
}