本篇目录6 节

05数据源Data Sources

InfluxDB 时序数据源

InfluxDB 数据源横跨两个时代:v1 与 v2 在认证方式、数据组织与查询语言上都不相同。本文讲清版本差异、Flux 与 InfluxQL 怎么选,附示例与高频坑。

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

v1 与 v2:先分清你在接哪一代

InfluxDB v2 重做了认证与 API,并引入了函数式的查询语言 Flux,但保留了 v1 的兼容接口。接数据源前先把版本对齐:

维度 v1 v2
认证 用户名/密码(按 database 授权) API Token,配合 org
数据组织 database + retention policy org + bucket
查询语言 InfluxQL(类 SQL) Flux(管道式函数语言)
端口 8086 8086,兼容 v1 的 /query 接口

Grafana 的 InfluxDB 数据源同时支持两代:添加时选择对应的 InfluxDB API 版本,再填各自的连接字段。给 v2 环境配 v1 模式是「连上了却没有数据」的经典原因。

添加数据源

以 v2 为例:

  1. 打开 Connections → Data sources → Add data source,选择 InfluxDB
  2. URLhttp://localhost:8086(以 Grafana 服务器可达为准)。
  3. 查询方式选择 Flux,填 Org 与默认 Bucket
  4. API Token 填入具读权限的令牌,点击 Save & test

v1 模式则填 Database 加用户名/密码;细节以配置界面实际字段为准。

Flux 还是 InfluxQL

  • Flux:v2 的正统选择。管道式语法适合多流拼接、透视等复杂处理,能引用 Grafana 注入的内置变量(时间范围、步长)。
  • InfluxQL:类 SQL、上手快,老仪表盘资产大多用它;v2 也可通过兼容 API 继续执行 InfluxQL。

同一实例里可以各建一个数据源分别指向两种查询方式,逐步迁移。

示例

Flux 查询——取某 bucket 里 CPU 使用率并按面板步长聚合,这是时间序列面板的标准骨架:

from(bucket: "metrics")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "cpu")
  |> filter(fn: (r) => r["_field"] == "usage_user")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> yield(name: "mean")

InfluxQL 的对应写法,注意 $timeFilter$__interval 是 Grafana 在执行前展开的宏:

SELECT mean("usage_user") FROM "cpu"
WHERE "host" =~ /^$host$/ AND $timeFilter
GROUP BY time($__interval), "host" fill(null)

提示: v.timeRangeStartv.windowPeriod 只在 Grafana 的查询环境里存在;把 Flux 复制回 InfluxDB 自己的 UI 执行时,要自行导入时间范围变量。

常见坑

  • 图表空白但查询无报错_field 与 tag 混淆——度量值存在 field 里,维度才是 tag;过滤条件写错列名时结果就是空流。
  • 曲线出现断点或补零aggregateWindowcreateEmptyfill 策略不一致,对照上面的示例统一处理。
  • 401/403:v1/v2 认证方式用混了,或令牌缺少目标 bucket 的读权限。
  • 查询越来越慢:InfluxDB 本身对高基数 tag 敏感,先治理标签设计,再谈调超时。

下一步

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

Data Sources