SQL查询驱动报警规则与Grafana仪表盘调优 - 第2节
2.1 Grafana 整体架构与核心组件
Grafana 采用前后端分离的插件化架构,核心分为 数据源层、服务层 与 展示层。理解这一分层是后续配置报警与调优仪表盘的基础。
架构要点: Grafana 本身不存储时序数据,所有数据通过数据源插件实时查询;报警规则评估由内置的 Alerting Engine 独立调度,与面板渲染线程隔离。
2.2 数据源配置详解
Grafana 支持超过 30 种数据源。在生产监控场景中,Prometheus、MySQL 与 PostgreSQL 是最常用的三类。配置入口位于 Configuration → Data Sources → Add data source。
2.2.1 Prometheus 数据源
| 配置项 | 推荐值 / 说明 |
|---|---|
| URL | http://prometheus-server:9090(容器内)或 http://localhost:9090(本地) |
| Access | 推荐 Server(由 Grafana 后端代理请求,避免 CORS 问题) |
| Scrape interval | 与 Prometheus 全局 scrape_interval 保持一致,通常为 15s |
| HTTP Method | 默认 POST(支持复杂查询参数) |
调优提示: 在 Prometheus 数据源中启用 Prometheus 2.x 流式解析(
version: 2.x),可减少大范围时间查询时的内存开销。
2.2.2 MySQL / PostgreSQL 数据源
关系型数据库作为数据源时,Grafana 通过 SQL 查询直接拉取指标。配置时需注意:
- Host:格式
host:port,例如db.internal:3306或10.0.1.5:5432 - Database:指定要查询的库名,如
metrics_db - User / Password:建议使用只读账号,最小权限原则
- Max open / Max idle:生产环境建议
Max open: 10,Max idle: 5,防止仪表盘刷新压垮数据库
安全警告: 切勿在 Grafana 数据源中使用具有 DDL/DML 权限的数据库账号。SQL 数据源支持原生 SQL 查询,存在注入风险,务必通过参数化查询或只读视图隔离。
2.3 面板类型与选型指南
Grafana 提供 20+ 种原生面板。根据监控数据的性质选择合适的可视化类型,是仪表盘可读性的关键。
| 面板类型 | 适用场景 | 数据要求 | 典型用例 |
|---|---|---|---|
| Time series | 连续时序数据展示 | 时间戳 + 数值 | CPU 使用率、QPS 曲线 |
| Stat | 单个关键指标突出显示 | 单值或聚合值 | 当前连接数、错误率 |
| Gauge | 阈值范围可视化 | 单值 + 上下界 | 内存使用百分比、磁盘空间 |
| Table | 多维度明细数据 | 多列结构化数据 | 慢查询列表、Top N 主机 |
| Bar chart | 分类对比 | 类别 + 数值 | 各服务请求量对比 |
| Pie chart | 占比分布(需插件) | 类别 + 占比 | 错误类型分布 |
| Logs | 日志流实时查看 | 日志行 + 时间戳 | 应用错误日志追踪 |
| Node Graph | 服务依赖拓扑 | 节点 + 边关系 | 微服务调用链 |
选型原则: 趋势用 Time series,聚合用 Stat,对比用 Bar chart,明细用 Table。避免在同一个仪表盘混用超过 3 种面板类型,保持视觉一致性。
2.4 面板查询与转换基础
每个面板的核心是 Query 与 Transform。Query 负责从数据源拉取原始数据,Transform 负责在 Grafana 内存中进行二次处理(如合并、过滤、重命名)。
2.4.1 查询编辑器(Query Editor)
不同数据源的查询语法不同,但 Grafana 提供了统一的 UI 抽象:
- PromQL:
rate(http_requests_total[5m])—— 适合 Prometheus - SQL(MySQL/PostgreSQL):
SELECT time, value FROM metrics WHERE $__timeFilter(time)—— 使用宏$__timeFilter自动绑定时间范围 - 宏变量:
$__interval(自动计算采样间隔)、$__timeFilter、$__from/$__to
SQL 数据源最佳实践: 始终使用 Grafana 提供的宏变量(如
$__timeFilter)代替硬编码时间条件,确保面板在任意时间范围内都能正确查询。
2.4.2 数据转换(Transform)
Transform 是面板调优的利器,常用转换包括:
| 转换名称 | 功能 | 典型场景 |
|---|---|---|
| Merge | 合并多个查询结果 | 将 CPU 用户态与内核态合并为总使用率 |
| Filter by name | 按字段名过滤 | 只保留 status=5xx 的指标 |
| Group by | 按维度聚合 | 按 host 分组求平均值 |
| Rename by regex | 正则重命名 | 将 job="api" 改为 API Service |
| Calculate field | 基于已有字段计算新字段 | 计算 error_rate = errors / total * 100 |
2.5 本章小结
本章覆盖了 Grafana 的三大基础支柱:
- 架构:三层分离 + 插件体系,报警引擎独立运行
- 数据源:Prometheus 适合时序,MySQL/PostgreSQL 适合结构化业务指标,配置时注意只读权限与连接池
- 面板类型:根据数据形态选择 Time series / Stat / Table / Bar chart,配合 Transform 实现灵活的数据加工