Grafana 连接核心数据源详解:Prometheus、Loki、MySQL/PostgreSQL
Grafana 的强大之处在于它能统一接入多种数据源,将监控、日志、业务数据融合在一个可视化平台中。掌握如何连接和使用核心数据源,是构建完整可观测性系统的基石。
本文将详细讲解如何在 Grafana 中配置三大核心数据源:
- ✅ Prometheus(指标监控)
- ✅ Loki(日志聚合)
- ✅ MySQL / PostgreSQL(业务数据)
一、连接 Prometheus:指标监控的黄金组合
Prometheus + Grafana 是云原生监控的事实标准组合。
1. 前提条件
- Prometheus 正在运行(如
http://localhost:9090) - 已采集指标(如
up,http_requests_total)
2. 添加 Prometheus 数据源
步骤:
- ⚙️ Configuration → Data Sources → Add data source
- 搜索并选择 Prometheus
- 配置连接信息:
| 字段 | 示例值 | 说明 |
|---|---|---|
| Name | Prometheus | 数据源名称 |
| URL | http://prometheus:9090 | Prometheus Server 地址 |
| Access | Server(推荐) | Grafana 代理请求 |
| Scrape interval | 15s | 与 Prometheus 保持一致 |
- 点击 Save & Test,显示 “Data source is working” 即成功。
✅ 如果 Prometheus 在 Docker 中,确保网络可达(如
--network共享)。
3. 使用 PromQL 查询指标
在 Dashboard 的 Panel 中:
- 选择数据源:
Prometheus - 在 Query 编辑器中输入 PromQL:
# HTTP 请求速率
rate(http_requests_total[5m])
# P99 延迟
histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))
# JVM 堆内存使用率
jvm_memory_used_bytes{area="heap"} / jvm_memory_max_bytes{area="heap"}
- 选择图表类型(如 Time series、Stat)
- 点击 Apply 查看结果
✅ 推荐:导入官方 Dashboard(如 Node Exporter ID: 1860,JVM ID: 4701)
二、连接 Loki:日志可视化神器
Loki 是由 Grafana Labs 开发的水平可扩展、高可用、多租户日志聚合系统,专为 Prometheus 和 Grafana 设计。
1. 前提条件
- Loki 正在运行(如
http://loki:3100) - 已配置 Promtail 或其他日志采集器
2. 添加 Loki 数据源
步骤:
- Add data source → 搜索 Loki
- 配置:
| 字段 | 示例值 |
|---|---|
| URL | http://loki:3100 |
| Max lines | 1000 |
- Save & Test
3. 使用 LogQL 查询日志
LogQL 是 Loki 的查询语言,类似 PromQL。
基本语法
{<label filter>} | <pipeline>
示例查询
# 所有来自 job="api" 的日志
{job="api"}
# 过滤特定级别
{job="api"} |= "error"
# 排除健康检查日志
{job="api"} != "/health"
# JSON 日志字段过滤
{job="api"} | json | level="error"
# 统计日志数量
count_over_time({job="api"}[5m])
在 Panel 中使用
- 选择 Logs 可视化类型
- 可结合 Bar chart 显示日志量趋势
- 支持点击日志跳转到上下文
✅ 优势:日志与指标在同一平台关联分析。
三、连接关系型数据库:MySQL / PostgreSQL
Grafana 不仅能监控系统,还能将业务数据可视化,用于生成报表、分析趋势。
1. 前提条件
- MySQL / PostgreSQL 正在运行
- 有只读用户权限(安全最佳实践)
2. 添加 MySQL 数据源
步骤:
- Add data source → 搜索 MySQL
- 配置连接信息:
| 字段 | 示例值 |
|---|---|
| Host | mysql:3306 |
| Database | analytics |
| User | grafana_reader |
| Password | xxx |
- Save & Test
✅ PostgreSQL 配置类似,选择 PostgreSQL 数据源。
3. 使用 SQL 查询业务数据
在 Panel 中:
- 选择数据源:
MySQL - 编写 SQL 查询:
-- 订单数量趋势
SELECT
UNIX_TIMESTAMP(created_at) as time_sec,
COUNT(*) as orders
FROM orders
WHERE $__timeFilter(created_at)
GROUP BY time_sec
ORDER BY time_sec
-- 支付成功率
SELECT
DATE(created_at) as time,
SUM(CASE WHEN status = 'success' THEN 1 ELSE 0 END) / COUNT(*) as success_rate
FROM payments
WHERE $__timeFilter(created_at)
GROUP BY time
$__timeFilter() 说明
- Grafana 自动替换为当前时间范围过滤条件
- 如:
created_at BETWEEN '2023-01-01' AND '2023-01-02'
4. 可视化业务指标
- Time series:显示趋势曲线
- Stat:显示当前值(如“今日订单数”)
- Table:展示明细数据
- Gauge:显示完成率、达标率
✅ 适用场景:
- 业务日报/周报
- 用户增长趋势
- 支付转化率
- 库存预警
四、多数据源联动:打造统一可观测平台
Grafana 的最大优势是支持混合数据源查询,实现跨维度分析。
示例:指标 + 日志 + 业务数据联动
实战场景:分析支付失败
- Panel 1(Prometheus):
rate(http_requests_total{handler="/pay", status="500"}[5m]) - Panel 2(Loki):
{job="payment"} |= "Payment failed" | json - Panel 3(MySQL):
SELECT COUNT(*) as failed_payments FROM payments WHERE status = 'failed' AND $__timeFilter(created_at)
✅ 三个 Panel 共享同一时间范围,一键分析根因。
五、数据源配置最佳实践
| 实践 | 说明 |
|---|---|
| ✅ 使用只读账号连接数据库 | 避免误操作 |
| ✅ 为数据源添加描述 | 便于团队理解 |
| ✅ 合理设置查询超时 | 避免长时间阻塞 |
| ✅ 使用变量动态切换数据库/表 | 提升灵活性 |
| ✅ 定期测试连接 | Save & Test |
| ✅ 敏感信息使用Secrets管理 | 如密码 |
六、总结
Grafana 通过连接三大核心数据源,构建了可观测性的完整闭环:
| 数据源 | 用途 | 查询语言 |
|---|---|---|
| Prometheus | 指标监控 | PromQL |
| Loki | 日志聚合 | LogQL |
| MySQL/PostgreSQL | 业务报表 | SQL |
核心价值:
“一个平台,看尽系统、日志、业务。”
掌握这些数据源的连接与查询方法,你就能:
- ✅ 监控系统健康
- ✅ 分析日志上下文
- ✅ 展示业务趋势
- ✅ 实现跨维度根因定位
这是构建现代可观测性系统的核心技能,建议逐一实践,熟练掌握。
2795

被折叠的 条评论
为什么被折叠?



