最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Grafana 如何使用 SQL 查询方式连接数据源
时间:2026-08-27 08:12:49 编辑:袖梨 来源:一聚教程网
Grafana 通过配置支持 SQL 的数据源(如 MySQL、PostgreSQL 等)直接执行 SQL 查询,无需中间同步组件或时序数据限制;关键前提是数据源必须原生支持 SQL。
Grafana 使用 SQL 查询方式连接数据源,本质是通过配置支持 SQL 的数据源(如 MySQL、PostgreSQL、SQL Server、Oracle 等),然后在面板查询中直接编写标准或方言适配的 SQL 语句获取数据。它不依赖中间同步组件,也不要求数据必须是时序型——只要数据库能响应 SQL,Grafana 就能查、能展示。
关键前提:数据源本身要支持原生 SQL 查询
Grafana 最新插件中,MySQL、PostgreSQL、Microsoft SQL Server、Oracle、TDengine、ClickHouse 等都内置了 SQL 查询能力;而 Prometheus、InfluxDB 等则使用各自专属查询语言(PromQL / Flux),不能写 SQL。
配置支持 SQL 的数据源
- 进入 Grafana → 左侧菜单 Configuration → Data Sources → Add data source
- 搜索并选择对应数据库类型(例如 “MySQL”)
- 填写连接参数:
- Host(如
127.0.0.1:3306) - Database(目标库名)
- User / Password(建议用最小权限只读账号)
- 其他可选:SSL 模式、时区、连接池参数(如
maxOpen,但注意 PostgreSQL 场景下 Grafana 实际不复用连接)
- Host(如
- 点击 Save & Test,绿色提示即表示连通成功
⚠️ 生产环境务必避免使用 root 或高权限账号;应单独创建 grafana_ro 类只读用户,并 GRANT SELECT ON your_db.your_table TO 'grafana_ro'@'%'
在面板中写 SQL 查询
- 新建 Dashboard → Add new panel → Query 标签页
- 选择刚配置好的 SQL 类型数据源(如 MySQL)
- 在查询编辑器中输入 SQL,例如:
SELECT DATE(create_time) AS day,COUNT(*) AS total_orders,ROUND(AVG(amount), 2) AS avg_amountFROM orders WHERE create_time >= $__timeFilter(create_time)GROUP BY dayORDER BY day
-
$__timeFilter(create_time)是 Grafana 内置宏,会自动替换成当前时间范围筛选条件(如create_time BETWEEN '2026-08-12 00:00:00' AND '2026-08-13 00:00:00'),无需手动拼接 - 其他常用宏:
$__timeGroup(time_col, '1h')(按小时分组)、$__timeEpoch(time_col)(转毫秒时间戳)、$__timeFrom()/$__timeTo()(起止时间)
✅ 查询结果列名将直接作为表格字段或图表坐标轴标签;时间列需显式别名为 time 或用 ($__time) 宏标记,才能被时序图识别
选择合适的可视化类型
- Table(表格):适合展示明细、统计汇总、状态列表(如订单状态分布、错误码 TOP10)
- Time series(折线/柱状图):要求至少一列是时间类型(且已用 time 相关宏处理),另一列是数值
- Stat / Pie chart / Bar gauge:适合聚合指标(如总订单数、成功率百分比、各状态占比)
? 注意:SQL 查询返回的列数和类型决定可视化是否可用。例如折线图需要 time + value 两列;饼图需要 name + value 两列;表格则无此限制
进阶技巧提升实用性
- 使用模板变量动态切换条件
例如定义变量
region,SQL 中写WHERE region = '$region',即可下拉切换地区查看不同数据 - 多表 JOIN 查询完全支持
SELECT u.name, COUNT(o.id) FROM users u LEFT JOIN orders o ON u.id = o.user_id GROUP BY u.id - 支持子查询、窗口函数(取决于底层数据库能力)
如 PostgreSQL 可用
ROW_NUMBER() OVER (PARTITION BY ...),MySQL 8.0+ 同样支持 - 开启查询缓存(v9.1+)
在数据源设置中启用 Cache mode: Enabled,对相同时间范围+变量组合的查询自动复用结果,减轻 DB 压力
不复杂但容易忽略
相关文章
- 云崩坏星穹铁道官网入口-云崩坏星穹铁道网页版链接 08-27
- 长城H9力魂版有何升级-三把锁和越野配置 08-27
- poki小游戏免费秒玩官网入口-poki宝玩网页版直接进入地址 08-27
- 小米路由器mesh怎么初始化(小米路由器mesh初始化方法) 08-27
- 各地如何培养自己的“宇树科技”-主要信息和内容重点 08-27
- 华数传媒等成立具身智能数据运营公司 产业化运营讲了什么-主要信息 08-27