4. Grafana 数据源配置:Prometheus、InfluxDB、Elasticsearch、MySQL、Loki 等数据源添加与测试
数据源是 Grafana 的“感知层”,决定了仪表盘能读取哪些监控数据。本章将逐一演示 Prometheus、InfluxDB、Elasticsearch、MySQL 和 Loki 五种主流数据源的添加流程、关键参数与连通性测试方法。
4.1 数据源配置入口与通用流程
所有数据源的添加入口统一,后续配置因协议和认证方式而异。
- 导航:左侧菜单 → Connections → Data sources → Add data source。
- 搜索:在过滤框中输入数据源类型(如 Prometheus)。
- 填写连接信息:URL、端口、认证凭据、数据库名等。
- 保存 & 测试:点击 Save & test,Grafana 会返回连通性结果。
最佳实践:生产环境建议为每个数据源创建独立的 Grafana 服务账号,并限制 IP 白名单,避免凭证泄露。
4.2 五种数据源配置详解
| 数据源类型 | 默认端口 | 核心配置项 | 认证方式 | 测试命令/指标 |
|---|---|---|---|---|
| Prometheus | 9090 | HTTP URL | Basic Auth / 无 | up |
| InfluxDB | 8086 | URL、Database、User、Password | / Basic Auth | SHOW DATABASES |
| Elasticsearch | 9200 | URL、Index、Time field | Basic Auth / | GET /_cluster/health |
| MySQL | 3306 | Host、Database、User、Password | User/Password | SELECT 1 |
| Loki | 3100 | HTTP URL | Basic Auth / 无 | label_names |
4.2.1 Prometheus 数据源
Prometheus 是 Grafana 最常用的时序数据源,配置最简单。
# 配置示例
URL: http://prometheus.example.com:9090
Access: Server (default)
Skip TLS Verify: false (生产环境建议 true 仅限测试)
测试要点:点击 Save & test 后,Grafana 会查询
up 指标。若返回 up{job="..."} 1 表示连通成功。
4.2.2 InfluxDB 数据源
支持 InfluxQL 和 Flux 两种查询语言,配置时需指定数据库名。
# InfluxDB v1.x 配置
URL: http://influxdb.example.com:8086
Database: telegraf
User: admin
Password: ******
# InfluxDB v2.x 配置(使用 Flux)
URL: http://influxdb.example.com:8086
Organization: my-org
: my-super-secret-
Default Bucket: telegraf
版本注意:InfluxDB v2.x 默认使用 Flux 查询,若需兼容旧版 InfluxQL,需在数据源设置中手动切换查询语言。
4.2.3 Elasticsearch 数据源
适用于日志和全文搜索数据的可视化,必须指定索引名和时间字段。
# 配置示例
URL: http://elasticsearch.example.com:9200
Index: logstash-*
Time field name: @timestamp
Version: 7.x+
索引模式:支持通配符
* 匹配多个索引,如 nginx-access-*。建议使用 Index pattern 而非固定索引名,以自动包含新索引。
4.2.4 MySQL 数据源
通过 SQL 查询直接读取关系型数据库,适合业务指标监控。
# 配置示例
Host: mysql.example.com:3306
Database: myapp
User: grafana_reader
Password: ******
Max open: 10
Max idle: 2
权限最小化:建议创建只读用户:
GRANT SELECT ON myapp.* TO 'grafana_reader'@'%';
4.2.5 Loki 数据源
Loki 是 Grafana Labs 的日志聚合系统,与 Prometheus 共享标签体系。
# 配置示例
URL: http://loki.example.com:3100
Maximum lines: 1000
Derived fields: (可选) 从日志中提取指标
联动调试:Loki 数据源常与 Prometheus 配合使用,通过 Derived fields 功能从日志行中提取 traceID 或 metric 标签,实现日志→指标跳转。
4.3 数据源连通性测试流程
以下 SVG 展示了从添加数据源到验证成功的完整链路。
4.4 多数据源混合调试技巧
在实际监控场景中,一个仪表盘往往需要同时查询多个数据源。Grafana 支持在同一个面板内通过 混合数据源 模式实现。
- 混合查询:在面板编辑器中,将数据源切换为
-- Mixed --,然后为每个查询单独指定数据源。 - 变量联动:使用 Query 类型的变量从 Prometheus 获取标签值,再传递给 Loki 或 MySQL 作为过滤条件。
- 时间对齐:不同数据源的时间戳精度可能不同(如 Prometheus 毫秒级 vs MySQL 秒级),建议在查询时使用
$__timeFilter宏自动对齐。
实战案例:在同一个仪表盘上,左侧面板使用 Prometheus 展示 CPU 使用率,右侧面板使用 Loki 展示对应时间窗口的应用错误日志,通过
job 标签实现关联。
4.5 数据源配置常见问题排查
| 错误现象 | 可能原因 | 解决步骤 |
|---|---|---|
| “HTTP Error Bad Gateway” | Grafana 无法连接数据源地址 | 检查网络、防火墙、DNS 解析;确认数据源服务是否运行 |
| “401 Unauthorized” | 认证凭据错误或过期 | 重新生成 或更新密码;检查用户权限 |
| “index not found” (ES) | 索引名不匹配或不存在 | 使用 GET _cat/indices 确认索引名;检查通配符 |
| “database does not exist” (InfluxDB) | 指定的数据库名不存在 | 执行 SHOW DATABASES 确认可用数据库 |
| “connection refused” (MySQL) | 端口未开放或 MySQL 未绑定远程 IP | 修改 bind-address 为 0.0.0.0;检查安全组 |
安全提醒:切勿在 Grafana 数据源配置中使用 root 或 admin 级别账号。始终为每个数据源创建专用的只读用户,并定期轮换密码或 。