SQL查询与Grafana仪表盘数据报表模板部署 - 第2节

2.1 Grafana 是什么

Grafana 是一款开源的、跨平台的度量分析与可视化平台。它能够将来自不同数据源(如 Prometheus、MySQL、InfluxDB、Elasticsearch 等)的时序数据或日志数据,通过丰富的图表、表格、仪表盘等形式进行统一展示。Grafana 的核心价值在于“数据聚合与可视化”,它本身不存储数据,而是作为数据展示层,将后端存储的数据转化为直观的图形界面。

关键特性:
  • 统一视图: 将多个数据源的数据汇聚到同一个仪表盘,消除数据孤岛。
  • 丰富的面板类型: 支持折线图、柱状图、热力图、仪表盘、表格、日志面板等。
  • 灵活的查询编辑器: 针对不同数据源提供专用的查询构建器(如 PromQL、SQL、Lucene 语法)。
  • 告警与通知: 基于面板数据设置告警规则,通过邮件、钉钉、Slack 等渠道发送通知。
  • 权限与团队协作: 支持组织、团队、用户分级权限管理,支持仪表盘分享与嵌入。
Grafana 在数据链路中的位置 数据源层 Prometheus / MySQL Grafana 核心 查询 / 聚合 / 渲染 展示层 仪表盘 / 面板 Grafana 不存储数据,只负责查询与展示 数据源可以是时序数据库、关系型数据库、日志系统等 Grafana 通过插件机制支持超过 50 种数据源 用户通过仪表盘(Dashboard)组织面板(Panel)

2.2 核心概念详解

2.2.1 数据源(Data Source)

数据源是 Grafana 连接外部存储系统的桥梁。每个数据源对应一个具体的后端服务,Grafana 通过数据源插件与后端通信。配置数据源时需要指定类型、地址、认证信息等参数。

数据源类型 典型用途 查询语言 适用场景
Prometheus 时序指标监控 PromQL 云原生、Kubernetes 监控
MySQL / PostgreSQL 业务数据查询 SQL 数据库报表、业务分析
Elasticsearch 日志与全文搜索 Lucene / ES DSL 日志分析、APM
InfluxDB 时序数据存储 InfluxQL / Flux IoT、系统监控
Loki 日志聚合 LogQL 日志查询与告警
实战提示: 在 Grafana 中,一个数据源可以被多个仪表盘和面板复用。建议在数据源配置中开启“默认”选项,方便快速创建面板。

2.2.2 仪表盘(Dashboard)

仪表盘是 Grafana 中组织和展示面板的容器。一个仪表盘可以包含多个面板,这些面板可以按照行(Row)进行分组。仪表盘支持变量(Variable)机制,允许用户通过下拉菜单动态切换查询条件(如时间范围、服务器名称、数据库名称等)。

  • 行(Row): 仪表盘内的逻辑分组单元,用于将相关面板放在同一水平区域。
  • 变量(Variable): 定义在仪表盘级别的动态参数,可在查询中引用,实现交互式筛选。
  • 时间范围: 每个仪表盘都有全局时间选择器,支持相对时间(如最近 6 小时)和时间。
  • 刷新策略: 支持自动刷新(如每 30 秒),适用于实时监控场景。
仪表盘结构示意图 仪表盘(Dashboard) 行 1:系统概览 面板:CPU 使用率 | 内存使用率 | 磁盘 IO 行 2:业务指标 面板:订单量趋势 | 支付成功率 | 用户活跃数 变量:$server / $database / $time

2.2.3 面板(Panel)

面板是 Grafana 中最基本的可视化单元。每个面板绑定一个数据源,通过查询语句获取数据,然后以图表、表格、仪表盘等形式渲染。面板类型决定了数据的呈现方式。

面板类型 适用数据 典型用途
Time series(时序图) 时序数据 趋势分析、性能监控
Stat(统计值) 单值或聚合值 当前值展示、阈值告警
Table(表格) 结构化数据 明细查询、数据对比
Bar chart(柱状图) 分类数据 排名、分布分析
Gauge(仪表盘) 单值百分比 饱和度、完成率
Logs(日志面板) 日志行 实时日志查看

2.2.4 查询(Query)

查询是面板获取数据的核心步骤。Grafana 为每种数据源提供了专用的查询编辑器,用户可以在编辑器中编写查询语句,并通过“查询检查器”实时预览返回的数据。查询结果会经过 Grafana 的转换和聚合,最终渲染到面板上。

常见误区: 初学者容易混淆“数据源查询”和“面板转换”。数据源查询负责从后端获取原始数据,面板转换(如聚合、过滤、重命名)是在 Grafana 内存中进行的二次处理。建议尽量在查询阶段完成数据筛选,减少面板转换的负担。
-- 示例:MySQL 数据源查询语句(用于表格面板)
SELECT
  DATE_FORMAT(create_time, '%Y-%m-%d') AS 日期,
  COUNT(*) AS 订单数,
  ROUND(SUM(amount), 2) AS 总金额
FROM orders
WHERE create_time BETWEEN '$__timeFrom' AND '$__timeTo'
GROUP BY DATE_FORMAT(create_time, '%Y-%m-%d')
ORDER BY 日期;

2.3 Grafana 架构与组件

Grafana 采用前后端分离的架构,主要由以下核心组件构成:

  • Grafana Server(后端服务): 基于 Go 语言编写,负责处理 HTTP 请求、数据源代理、告警引擎、用户认证、仪表盘存储等核心逻辑。
  • Grafana Frontend(前端界面): 基于 React 和 TypeScript 构建,提供仪表盘编辑、面板配置、数据源管理等交互界面。
  • 数据库(Database): 用于存储 Grafana 的元数据,包括用户信息、仪表盘定义、数据源配置、告警规则等。默认使用 SQLite,生产环境建议切换为 MySQL 或 PostgreSQL。
  • 插件系统(Plugin System): 支持数据源插件、面板插件、应用插件三种类型。插件可以独立安装、升级,扩展 Grafana 的功能边界。
  • 告警引擎(Alerting Engine): 独立于面板渲染的模块,负责定时评估告警规则,并在触发时发送通知。
Grafana 架构组件图 用户浏览器 Grafana 前端 (React) Grafana 后端 (Go) 元数据库 (SQLite/MySQL) 告警引擎 数据源代理 Prometheus MySQL Elasticsearch
架构要点:
  • Grafana 后端通过数据源代理与外部存储通信,避免前端直接暴露数据库连接信息。
  • 告警引擎独立于面板渲染,即使面板未打开,告警规则也会按计划执行。
  • 元数据库建议使用 MySQL 或 PostgreSQL,支持高可用和备份恢复。
  • 插件系统是 Grafana 生态的核心,社区提供了大量高质量的数据源和面板插件。

2.4 本章小结