本篇目录7 节

05数据源Data Sources

SQL 数据源:MySQL 与 PostgreSQL

把 MySQL 或 PostgreSQL 接进 Grafana 并不难,难的是让 SQL 跟上仪表盘的时间范围——宏(macro)正是为此而生。本文覆盖连接配置、常用宏速查、示例查询与只读账号实践。

约 2 分钟/677 字/GRAFANA 12.X

什么时候用 SQL 数据源

订单、用户、账单这类业务数据往往就躺在关系库里,不值得为它们再同步一份到时序数据库。Grafana 内置 MySQL 与 PostgreSQL 数据源插件(同族的还有 MSSQL、SQLite、Oracle 等),支持直接写 SQL,也提供可视化查询构建器(Query builder)给不熟悉 SQL 的同事用。

连接配置

  1. 打开 Connections → Data sources → Add data source,选择 PostgreSQLMySQL
  2. Host主机:端口,如 localhost:5432localhost:3306;MySQL 与 PostgreSQL 也都支持填 Unix socket 路径。
  3. DatabaseUserPassword;PostgreSQL 可按需选择 SSL 模式并配置证书。
  4. 建议顺手设置 Row limit(返回行数上限),防止失控查询拖垮数据库。
  5. 点击 Save & test

宏速查

Grafana 在执行前把「宏」展开成 SQL 片段,这是仪表盘时间范围、刷新粒度与查询联动的关键:

展开为 典型用法
$__timeFilter(col) col BETWEEN '起' AND '止' WHERE 里跟随仪表盘时间范围
$__timeFrom() / $__timeTo() 时间范围的起止值 自定义边界条件
$__timeGroup(col, '5m') 按 5 分钟做时间分桶 把行数据聚成时间序列
$__timeGroupAlias(col, $__interval) 分桶并输出 AS time 时间序列面板的第一列
$__interval / $__interval_ms 当前步长(秒/毫秒) 分桶粒度随时间范围自适应
$__unixEpochFilter(col) 针对 Unix 秒级时间戳列的过滤 表里没有 TIMESTAMP 类型时

MySQL 与 PostgreSQL 的宏同名但展开语法略有差异,个别参数(如分桶间隔的引号写法)以查询报错提示为准。

示例查询

一个标准的「按时间桶统计订单状态」时间序列查询(PostgreSQL 写法,MySQL 基本一致):

SELECT
  $__timeGroupAlias(created_at, $__interval),
  status AS metric,
  count(*) AS value
FROM orders
WHERE $__timeFilter(created_at)
GROUP BY 1, 2
ORDER BY 1;

要点:第一列必须是时间类型,第二、三列构成 metric/value 的序列结构,Grafana 的时间序列面板才能正确画线。

安全:给 Grafana 一个只读账号

Grafana 只需要查询,绝不要用应用的写账号。以 PostgreSQL 为例:

CREATE ROLE grafana_ro LOGIN PASSWORD 'change-me';
GRANT SELECT ON ALL TABLES IN SCHEMA public TO grafana_ro;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO grafana_ro;

最后一行让未来新建的表自动对只读账号可见。敏感列若必须展示,优先在数据库侧建只暴露脱敏列的视图,再让 Grafana 读视图。

注意: 在 SQL 里拼接仪表盘变量有注入风险,务必使用 Grafana 提供的宏或变量格式化选项,别手写 '${var}' 直连字符串。

常见坑

  • 查询结果只出表格不出曲线:第一列不是时间类型,或面板没按时间序列格式组织——检查 GROUP BY 分桶与列别名。
  • 大表查询慢:先确认 WHERE 里时间列有索引,再用 $__interval 放宽分桶粒度,最后才考虑加长超时。
  • 连接失败但数据库命令行正常:多半是 Host 写成了 http:// 前缀(SQL 数据源不需要协议头)或 Grafana 所在网络到数据库的端口不通。

下一步

本页为学习整理的中文改写,依据Grafana 官方文档最新版本编写(以 Grafana 12.x 为基准),操作路径请以实际产品界面为准。

Data Sources