SQL查询与Grafana仪表盘数据报表模板部署 - 第2节
2.1 Grafana 是什么
Grafana 是一款开源的、跨平台的度量分析与可视化平台。它能够将来自不同数据源(如 Prometheus、MySQL、InfluxDB、Elasticsearch 等)的时序数据或日志数据,通过丰富的图表、表格、仪表盘等形式进行统一展示。Grafana 的核心价值在于“数据聚合与可视化”,它本身不存储数据,而是作为数据展示层,将后端存储的数据转化为直观的图形界面。
关键特性:
- 统一视图: 将多个数据源的数据汇聚到同一个仪表盘,消除数据孤岛。
- 丰富的面板类型: 支持折线图、柱状图、热力图、仪表盘、表格、日志面板等。
- 灵活的查询编辑器: 针对不同数据源提供专用的查询构建器(如 PromQL、SQL、Lucene 语法)。
- 告警与通知: 基于面板数据设置告警规则,通过邮件、钉钉、Slack 等渠道发送通知。
- 权限与团队协作: 支持组织、团队、用户分级权限管理,支持仪表盘分享与嵌入。
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 秒),适用于实时监控场景。
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 后端通过数据源代理与外部存储通信,避免前端直接暴露数据库连接信息。
- 告警引擎独立于面板渲染,即使面板未打开,告警规则也会按计划执行。
- 元数据库建议使用 MySQL 或 PostgreSQL,支持高可用和备份恢复。
- 插件系统是 Grafana 生态的核心,社区提供了大量高质量的数据源和面板插件。