4、数据源基础:支持的数据源类型及添加数据源的通用流程
Grafana 的核心价值在于将分散在不同存储系统中的指标、日志和业务数据,通过统一的查询界面转化为可视化的仪表盘。而这一切的起点,就是“数据源(Data Source)”。如果把 Grafana 比作一个智能的“数据水龙头”,那么数据源就是连接各类后端存储的“水管接口”。本章将系统梳理 Grafana 支持的主流数据源类型,并深入拆解添加数据源的通用流程,帮助你建立对数据接入层的整体认知。
4.1 核心原理:数据源在 Grafana 架构中的定位
Grafana 本身并不存储监控数据,它更像是一个“查询代理”和“可视化引擎”。每个数据源插件都实现了统一的查询接口(Query API),将用户在面板中编写的查询语句(如 PromQL、InfluxQL、SQL 或 Lucene 语法)翻译成后端存储系统能够理解的原生请求。这种插件化架构带来了三个关键优势:
- 解耦存储与展示:无论底层是时序数据库、关系型数据库还是日志搜索引擎,Grafana 都通过统一的数据帧(DataFrame)结构返回结果,面板无需关心数据来源的具体实现。
- 多数据源混合查询:在同一个仪表盘中,可以同时引用多个数据源,甚至通过“混合数据源”功能将不同来源的数据合并到同一张图表中,便于对比分析。
- 扩展性极强:社区和官方提供了超过 100 种数据源插件,从常见的 Prometheus 到小众的物联网平台,几乎覆盖了所有主流存储系统。
理解这一原理后,你会发现添加数据源的本质就是“告诉 Grafana 如何连接到某个存储系统,以及如何认证和解析查询”。因此,配置数据源时最核心的三个要素是:连接地址(URL/端口)、认证凭据(/用户名密码)、查询语言适配。
4.2 主流数据源类型详解与选型对比
虽然 Grafana 支持的数据源种类繁多,但根据底层存储模型和查询语言的不同,可以归纳为四大类。每一类都有其典型的适用场景和配置要点。
| 数据源类型 | 代表产品 | 查询语言 | 典型场景 | 配置要点 |
|---|---|---|---|---|
| 时序数据库 | Prometheus、InfluxDB、Graphite | PromQL、InfluxQL/Flux、Graphite 函数 | 基础设施监控、应用性能监控(APM)、Kubernetes 监控 | HTTP URL、Access (Prometheus)、数据库名与认证(InfluxDB) |
| 关系型数据库 | MySQL、PostgreSQL、SQL Server | SQL(SELECT 语句) | 业务数据报表、财务分析、订单趋势 | 主机、端口、数据库名、用户名、密码、SSL 模式 |
| 日志与搜索 | Elasticsearch、Loki、Splunk | Lucene、LogQL、SPL | 日志分析、错误追踪、安全审计 | ES 节点 URL、索引名、时间字段、Loki 的 HTTP 地址 |
| 云服务与其它 | AWS CloudWatch、Azure Monitor、Google Cloud Monitoring | 各云厂商专有查询语法 | 云资源监控、混合云架构 | 云账号认证(Access Key/Secret)、区域、命名空间 |
在实际选型时,建议遵循“数据存在哪里,就从哪里接入”的原则。例如,如果你的监控体系已经基于 Prometheus 构建,那么直接添加 Prometheus 数据源即可,无需将数据复制到其他存储。对于需要关联业务数据的场景,可以同时添加 MySQL 数据源,利用 Grafana 的“按需关联”功能实现指标与业务数据的同屏展示。
4.3 添加数据源的通用流程:从入口到验证
尽管不同数据源的配置项各有差异,但 Grafana 提供了高度一致的添加流程。掌握这个通用流程,你可以在几分钟内接入任何新的数据源。
- 进入配置页面:登录 Grafana 后,点击左侧菜单栏的“配置”(齿轮图标)→ “数据源”(Data Sources)→ 点击右上角的“添加数据源”(Add data source)按钮。
- 选择数据源类型:在插件列表中搜索或滚动找到目标数据源,点击即可进入配置表单。Grafana 会为每个数据源渲染专属的配置界面。
- 填写基础连接信息:这是最核心的步骤。通常需要填写
URL(例如http://prometheus.example.com:9090)、Access(Server 或 Browser)、认证信息(、Basic Auth 或 )。对于 MySQL 等数据库,还需要指定数据库名称和用户权限。 - 配置高级选项(可选):包括超时时间(Timeout)、最大并发查询数、自定义 HTTP 头(用于携带额外的认证信息)、代理设置等。在调试阶段,建议开启“跳过 TLS 证书验证”以便快速连通,但生产环境必须关闭。
- 保存并测试:点击页面底部的“保存并测试”(Save & Test)按钮。Grafana 会向后端发送一个轻量级的探测请求(如 Prometheus 的
/api/v1/status/buildinfo),并返回“数据源已连接”或详细的错误信息。只有测试通过,数据源才能被面板使用。
实战提示:对于 Prometheus 数据源,建议在 URL 中直接使用完整路径(包含端口),并优先使用 Server 访问模式。这样 Grafana 后端会直接请求 Prometheus,避免浏览器跨域(CORS)问题。如果使用 Browser 模式,则需要确保 Prometheus 配置了允许 Grafana 域名的 CORS 规则。
4.4 案例拆解:从零接入 Prometheus 与 MySQL 双数据源
为了更直观地展示通用流程的应用,我们以一个典型的电商系统监控场景为例。假设你有一个运行在 Kubernetes 上的微服务应用,同时使用 Prometheus 采集应用指标(QPS、延迟、错误率),使用 MySQL 存储订单业务数据。现在需要在 Grafana 中同时接入这两个数据源,并制作一个“订单量 vs 应用负载”的关联仪表盘。
初始状态与目标:Grafana 已部署完成,但没有任何数据源。目标是在 10 分钟内完成两个数据源的接入,并验证连通性。
操作步骤:
- 接入 Prometheus:进入数据源添加页面,选择 Prometheus。填写 URL 为
http://prometheus-svc.monitoring.svc.cluster.local:9090(集群内访问地址)。访问模式选择Server,由于 Prometheus 未开启认证,留空认证信息。点击“保存并测试”,返回“Successfully queried the Prometheus API”即表示成功。 - 接入 MySQL:选择 MySQL 数据源。填写主机为
mysql-rw.business.svc.cluster.local:3306,数据库名为orders,用户名为grafana_reader,密码为****。在“数据库”选项卡中,可以设置最大连接数和连接超时。保存并测试,Grafana 会执行SELECT 1验证连接。 - 验证与排障:如果 MySQL 测试失败,常见原因是权限不足。需要在 MySQL 中执行
GRANT SELECT ON orders.* TO 'grafana_reader'@'%';授权。如果 Prometheus 测试失败,检查 URL 是否可访问,以及网络策略是否允许 Grafana 所在命名空间访问 monitoring 命名空间。
结果与复盘:两个数据源均显示“已连接”后,在新建仪表盘时,即可在面板的数据源下拉框中看到 Prometheus 和 MySQL 选项。通过混合数据源功能,可以将 Prometheus 的 QPS 曲线与 MySQL 的订单量柱状图叠加在同一时间轴上,从而直观分析促销活动对系统压力的影响。此案例中,关键的成功因素是提前规划了网络访问路径和最小权限的数据库账号。
常见误区提醒:不要在生产环境中使用 root 账号连接 MySQL 数据源。Grafana 面板的查询语句是用户可编辑的,如果权限过大,存在 SQL 注入或误操作删表的风险。建议为 Grafana 创建专用的只读账号,并仅授予所需数据库的 SELECT 权限。
4.5 常见误区与总结复盘
在配置数据源的过程中,初学者容易陷入以下几个误区,需要特别留意:
- 误区一:混淆访问模式(Access):
Server模式由 Grafana 后端发起请求,适合内网环境,可避免 CORS;Browser模式由浏览器直接请求,适合数据源可公网访问且支持 CORS 的场景。选错模式会导致请求失败。 - 误区二:忽略时间字段设置:对于 Elasticsearch 或 MySQL 数据源,必须正确指定时间字段(如
@timestamp或created_at),否则面板无法正确渲染时间范围。 - 误区三:过度配置自定义 HTTP 头:有些用户为了安全,在数据源中配置了自定义 Header,但忘记在反向代理或防火墙中放行这些 Header,导致连接时好时坏。
- 误区四:不测试直接使用:跳过“保存并测试”步骤,直接创建面板,往往会在查询阶段才暴露连接问题,增加排障难度。