SQL查询驱动报警规则与Grafana仪表盘调优 - 第2节

2.1 Grafana 整体架构与核心组件

Grafana 采用前后端分离的插件化架构,核心分为 数据源层、服务层 与 展示层。理解这一分层是后续配置报警与调优仪表盘的基础。

架构要点: Grafana 本身不存储时序数据,所有数据通过数据源插件实时查询;报警规则评估由内置的 Alerting Engine 独立调度,与面板渲染线程隔离。
Grafana 核心架构(三层 + 插件体系) 展示层(Frontend) React 面板渲染 · Dashboard 状态管理 · 查询编辑器 · 报警规则 UI 服务层(Backend) HTTP API · 用户认证(OAuth/LDAP) · 报警引擎(Alerting Engine) 仪表盘版本管理 · 注解(Annotations) · 团队与权限控制 数据源层(Data Sources) Prometheus · MySQL · PostgreSQL · Elasticsearch · Loki · Graphite · InfluxDB · 自定义插件 面板插件 报警通道插件 数据源插件

2.2 数据源配置详解

Grafana 支持超过 30 种数据源。在生产监控场景中,Prometheus、MySQL 与 PostgreSQL 是最常用的三类。配置入口位于 Configuration → Data Sources → Add data source。

2.2.1 Prometheus 数据源

配置项推荐值 / 说明
URLhttp://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 查询,存在注入风险,务必通过参数化查询或只读视图隔离。
数据源配置流程(以 MySQL 为例) 1. 创建只读用户 2. 配置连接参数 3. 测试连通性 4. 保存并验证 关键 SQL(MySQL 只读用户创建) CREATE USER 'grafana_ro'@'%' IDENTIFIED BY 'strong_pass'; GRANT SELECT ON metrics_db.* TO 'grafana_ro'@'%';

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 种面板类型,保持视觉一致性。
面板类型快速决策树 数据是什么类型? 时序数据 非时序数据 Time series Stat / Gauge Table / Bar Pie / Logs

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 的三大基础支柱:

  1. 架构:三层分离 + 插件体系,报警引擎独立运行
  2. 数据源:Prometheus 适合时序,MySQL/PostgreSQL 适合结构化业务指标,配置时注意只读权限与连接池
  3. 面板类型:根据数据形态选择 Time series / Stat / Table / Bar chart,配合 Transform 实现灵活的数据加工