搭建Grafana自定义数据源需在协议、结构、认证三层面适配,核心是让非标准后端返回JSON或时间序列格式并符合Grafana查询协议,通过插件或代理服务完成查询与元数据接口对接,确保安全与格式契约对齐。

搭建 Grafana 自定义数据源,核心在于让 Grafana 能“听懂”非标准数据后端的语言。它不是简单填个 URL 就完事,而是需要在协议、结构、认证三个层面完成适配。只要数据能以 JSON 或时间序列格式返回,Grafana 就能展示——关键是怎么把它“翻译”过去。
确认数据源类型与接入路径
先明确你的数据来自哪里:是自研 API、私有数据库、还是某种小众时序引擎?不同来源决定适配方式:
- 如果已有 HTTP 接口(如返回 JSON 的监控 API),可直接用 Grafana 内置的 JSON Data Source 插件(需安装)或通用 HTTP 数据源(部分版本支持)
- 如果是关系型数据库(PostgreSQL/Oracle 等),使用对应官方插件,配置连接串、用户名、密码即可
- 若数据格式不规范(如无时间字段、指标嵌套过深),需前置加一层轻量代理服务(如用 Python Flask 封装查询逻辑,统一输出符合 Grafana 查询协议的结构化响应)
编写或配置适配层(重点)
Grafana 不直接解析原始数据,而是依赖数据源插件定义的查询协议。适配通常分两步:
-
查询适配:Grafana 发送类似
{"range": {"from": "now-1h", "to": "now"}, "targets": [{"target": "cpu_usage"}]}的请求;你的后端需识别target字段,转换为实际查询(如 SQL 或内部 API 调用),并按 Grafana 要求返回标准格式(含refId、series或values数组) -
元数据适配:支持变量下拉(如主机名列表)、自动发现指标名等,需实现
/search和/label-values类接口,返回字符串数组
例如,对接一个返回 {"data": [{"ts": 1718435040, "value": 62.3}]} 的 API,适配服务需将其转为:{"results": {"A": {"frames": [{"schema": {"fields": [{"name": "time", "type": "time"}, {"name": "value", "type": "number"}]}, "data": {"values": [[1718435040000], [62.3]]}}]}}}
处理认证与安全边界
自定义数据源常部署在内网或带权限控制,必须保障通信安全:
- 若后端需 Token 或 API Key,可在 Grafana 数据源配置中启用 Basic Auth 或 Bearer Token,填写凭证;避免硬编码在适配服务里
- 跨域问题常见于前端直连场景:确保后端响应头含
Access-Control-Allow-Origin,或让 Grafana 后端以proxy模式转发请求(推荐,更安全) - 敏感凭证(如数据库密码)不要写在 Grafana UI 配置中,改用环境变量注入 + Grafana 的
secureJsonData字段存储(需配合插件支持)
验证与调试技巧
配置完成后,别急着建面板,先做最小闭环验证:
- 点击数据源页面的 Save & Test,看是否返回 “Data source is working” —— 这仅检测连通性,不校验数据结构
- 在 Explore 页面手动输入查询语句(如
SELECT cpu FROM metrics WHERE time > now() - 1h),观察返回 JSON 是否含results、frames、values等关键字段 - 打开浏览器开发者工具 → Network 标签,筛选
api/ds/query请求,对比请求体与你后端日志中的入参,快速定位字段映射错误
适配的本质是契约对齐:你提供 Grafana 认得的数据格式,它负责渲染和交互。不复杂但容易忽略细节。

















