随着云原生和实时数据分析的兴起,InfluxDB 3 成为了一个轻量、高性能的时间序列数据库解决方案。它支持 SQL 查询语言,并且可以很好地与 Prometheus 配合使用,实现高效的监控数据写入与可视化分析。
本文将基于实际操作经验,带你一步步了解如何在 InfluxDB 3 中查询 Prometheus 写入的数据,并解决常见的查询问题。
🧩 一、环境准备与基本概念
✅ 1. InfluxDB 3 的核心组件
- IOx 引擎:基于 Apache Arrow 的列式存储引擎。
- PostgreSQL wire 协议支持:兼容 PostgreSQL 客户端。
- SQL 查询接口:支持标准 SQL 查询语句。
- Prometheus Remote Write 接口:用于接收 Prometheus 的远程写入数据。
✅ 2. 常用命令
# 查看所有数据库(namespace)
influxdb3 show databases
# 查看指定数据库中的表
influxdb3 query --database prometheus "SHOW TABLES"
# 查询某个表的数据
influxdb3 query --database prometheus "SELECT * FROM \"ALERTS\" LIMIT 3"
🔍 二、为什么 FROM 'ALERTS'
能查到数据,而 FROM ALERTS
查不到?
这是一个典型的 SQL 标识符大小写与引号使用问题。
❗ 错误示例:
SELECT * FROM ALERTS LIMIT 3
这个查询会尝试查找名为 alerts
(小写)的表,因为未加引号时 SQL 引擎默认将其转为小写。
✅ 正确方式:
SELECT * FROM "ALERTS" LIMIT 3
使用双引号包裹标识符,保留原始大小写,确保匹配实际存在的表名。
📊 三、查看数据库结构与表信息
✅ 查看所有数据库:
influxdb3 show databases
输出示例:
+---------------+
| iox::database |
+---------------+
| _internal |
| prometheus |
+---------------+
✅ 查看数据库中有哪些表:
influxdb3 query \
--database prometheus \
"SELECT DISTINCT TABLE_NAME FROM information_schema.columns WHERE TABLE_SCHEMA = 'iox'"
输出示例:
+---------------------------------------------+
| TABLE_NAME |
+---------------------------------------------+
| "ALERTS" |
| "flink_jobmanager_Status_JVM_CPU_Load" |
| "up" |
+---------------------------------------------+
这些表名大多来自 Prometheus 的远程写入指标名称。
📈 四、查询 Prometheus 监控数据
假设你已经通过 Prometheus 远程写入了 Flink 的 JVM 指标,例如:
flink_jobmanager_Status_JVM_CPU_Load
你可以使用以下 SQL 查询进行聚合统计:
示例:查询 CPU Load 并按时间分组
SELECT DATE_BIN(INTERVAL '30 seconds', time, NOW()) AS bucket, mean(value) AS cpu_load FROM 'flink_jobmanager_Status_JVM_CPU_Load' WHERE time >= now() - INTERVAL '6 hours' GROUP BY bucket ORDER BY bucket
对应命令行:
influxdb3 query \
--database prometheus \
"SELECT DATE_BIN(INTERVAL '30 seconds', time, NOW()) AS bucket, mean(value) AS cpu_load FROM \"flink_jobmanager_Status_JVM_CPU_Load\" WHERE time >= now() - INTERVAL '6 hours' GROUP BY bucket ORDER BY bucket"
🧪 五、常见问题与排查技巧
❓ 问题1:查询返回空结果或报错?
解决方法:
-
使用双引号包裹表名,如
"ALERTS"
。 -
确认表名是否真实存在(通过
SHOW TABLES
)。 -
检查 Prometheus 是否正确配置远程写入地址:
remote_write: - url: http://localhost:8181/api/v3/write?bucket=prometheus
❓ 问题2:Grafana 报 MIME 类型错误?
原因:
InfluxDB 3 不再支持 InfluxQL,但 Grafana 的 InfluxDB 插件默认使用的是 InfluxQL。
🚀 六、完整工作流程示例
1. 启动 InfluxDB 3
/root/.influxdb/influxdb3 serve \
--node-id=node1 \
--http-bind=0.0.0.0:8181 \
--object-store=file \
--data-dir=/root/.influxdb/data
2. Prometheus 配置远程写入
remote_write:
- url: http://localhost:8181/api/v3/write?bucket=prometheus
3. 查询数据
influxdb3 query \
--database prometheus \
"SELECT * FROM \"ALERTS\" LIMIT 3"
📘 七、结语:InfluxDB 3 + Prometheus 是未来的趋势
InfluxDB 3 结合了 IOx 引擎的高性能与 PostgreSQL 的生态兼容性,是未来构建监控系统的一个强大选择。它不仅支持 Prometheus 的远程写入,还允许我们使用熟悉的 SQL 进行灵活查询。
如果你正在寻找一个轻量、快速、可扩展的时间序列数据库来替代传统 InfluxDB 或 VictoriaMetrics,InfluxDB 3 绝对值得尝试!