ToolJet 集成 InfluxDB 数据源:从连接配置到 Flux 查询与 Bucket 管理的完整指南
【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 🚀项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet
InfluxDB 是专为时序数据(time-series data)设计的开源数据库,广泛用于监控指标、传感器数据、IoT 设备与业务分析等场景。ToolJet 通过内置的 InfluxDB 数据源插件(plugins/packages/influxdb/lib/index.ts),让开发者可以在可视化应用中以 Token 认证方式连接 InfluxDB 2.x 的 HTTP API,直接执行 Flux 查询、写入时序数据,并完成 Bucket 的全生命周期管理。读完本文,你将掌握如何在 ToolJet 中配置 InfluxDB 连接、使用 11 种内置操作读写与治理数据,并理解这些操作在底层如何映射到 InfluxDB v2 REST API。
连接配置
ToolJet 通过 InfluxDB 的 v2 HTTP API 进行通信,认证方案为API Token(Token authentication scheme)。创建数据源时需要填写以下四项:
| 配置项 | 说明 | 默认值 |
|---|---|---|
| API Token | 访问 InfluxDB API 所需的令牌,创建后在表单中以密码框呈现,存储时会被加密(见 manifest.json 中api_token的"encrypted": true) | 空 |
| Host | InfluxDB 服务所在主机地址 | 空 |
| Port | InfluxDB HTTP API 端口 | 8086 |
| Protocol | 连接协议,下拉选择HTTP或HTTPS | http |
API Token 的生成方式请参考 InfluxDB 官方文档(在 ToolJet 连接表单的帮助文本中同样提供了该链接)。Token 需要具备目标 Bucket 的读写权限,建议按最小权限原则创建专用 Token。
从源码角度看,这四个配置项被定义为SourceOptions(lib/types.ts),连接建立后,插件会据此拼接出完整的 API 基地址${protocol}://${host}:${port},并将 Token 以Authorization: Token <api_key>请求头携带(lib/index.ts)。
ToolJet 还提供连接测试功能:点击测试后,插件会向${protocol}://${host}:${port}/influxdb/cloud/api//ping发起 GET 请求,请求成功即判定连接可用(lib/index.ts)。
支持的查询操作总览
InfluxDB 数据源在查询编辑器的 Operation 下拉中提供 11 种操作(定义见 operations.json):
| 操作 | 作用 | 底层 API |
|---|---|---|
| Write data | 向 Bucket 写入时序数据 | POST /api/v2/write |
| Query data | 执行 Flux 查询并读取数据 | POST /api/v2/query |
| Generate an Abstract Syntax Tree (AST) from a query | 解析 Flux 查询并生成查询规范(AST) | POST /api/v2/query/ast |
| Retrieve query suggestions | 获取 Flux 函数建议列表 | GET /api/v2/query/suggestions |
| Retrieve query suggestions for a branching suggestion | 获取某个分支建议的 Flux 函数建议 | GET /api/v2/query/suggestions/{name} |
| Analyze a Flux query | 分析 Flux 查询,返回错误与函数调用信息 | POST /api/v2/query/analyze |
| List buckets | 列出数据库中所有 Bucket | GET /api/v2/buckets |
| Create a bucket | 新建 Bucket | POST /api/v2/buckets |
| Retrieve a bucket | 按 ID 查询单个 Bucket | GET /api/v2/buckets/{bucket_id} |
| Update a bucket | 更新 Bucket(如改名、调整保留策略) | PATCH /api/v2/buckets/{bucket_id} |
| Delete a bucket | 删除 Bucket | DELETE /api/v2/buckets/{bucket_id} |
下面按“数据读写 → 查询辅助 → Bucket 管理”三个层次逐项说明。
数据读写
Write Data(写入数据)
向指定 Bucket 写入一条或多条时序数据点,对应POST /api/v2/write。
必填参数:
- Bucket:目标 Bucket 名称
- Organization name or ID:InfluxDB 组织名称或组织 ID
- Data:要写入的数据,按 InfluxDB Line Protocol 文本格式书写
可选参数:
- Precision:时间戳精度,如
ns(纳秒)、us(微秒)、ms(毫秒)、s(秒),不填则使用 InfluxDB 默认精度
写入示例(Line Protocol 格式):
sensor_data,device=thermo-01 temperature=22.5,humidity=41.2 1694563200000000000从源码看,Write 操作将 Bucket、Organization、Precision 拼入 URL 查询参数,请求体以text/plain类型原样发送(lib/index.ts),因此 Data 字段应直接填写符合 Line Protocol 规范的行文本。
Query Data(查询数据)
使用 Flux 脚本从 InfluxDB Bucket 中检索数据,对应POST /api/v2/query。
必填参数:
- Organization name or ID:组织名称或 ID
- Flux query:完整的 Flux 查询脚本
示例 Flux 查询(查询最近 1 小时temperature测量值):
from(bucket: "sensor_data") |> range(start: -1h) |> filter(fn: (r) => r["_measurement"] == "temperature")该操作在源码中通过Content-Type: application/vnd.flux发送 Flux 脚本本体,并将org作为查询参数附带(lib/index.ts),返回结果为 InfluxDB 的 CSV 文本响应,可直接绑定到表格、图表等组件上进行可视化。
查询辅助与解析
这组操作面向 Flux 脚本的编写辅助与调试,在 ToolJet 查询编辑器中均可直接调用。
Generate an Abstract Syntax Tree (AST) from a Query
对 Flux 查询进行词法与语法解析,生成结构化查询规范(Abstract Syntax Tree),对应POST /api/v2/query/ast。
必填参数:
- Query:Flux 查询脚本
示例:
from(bucket: "website_metrics") |> range(start: -7d) |> filter(fn: (r) => r["_measurement"] == "page_views") |> group(columns: ["url"]) |> sum(column: "_value") |> sort(columns: ["_value"], desc: true)Retrieve Query Suggestions
获取 InfluxDB 提供的 Flux 函数建议列表(即 Flux 标准库中可用的函数名与简介),无参数,对应GET /api/v2/query/suggestions。返回结果可用于在编辑器中辅助提示可用的 Flux 函数。
Retrieve Query Suggestions for a Branching Suggestion
按函数名获取某个分支建议对应的 Flux 函数建议详情,对应GET /api/v2/query/suggestions/{name}。
必填参数:
- Name:分支建议的名称(即上一操作返回列表中的函数名)
Analyze a Flux Query
对 Flux 查询做静态分析,返回脚本中的语法错误、位置信息及调用的函数列表,对应POST /api/v2/query/analyze,适合在运行查询前先校验脚本。
必填参数:
- Query:Flux 查询脚本
示例:
from(bucket: "sensor_data") |> range(start: -1d) |> filter(fn: (r) => r["_measurement"] == "humidity") |> mean(column: "_value")Bucket 管理
Bucket 是 InfluxDB 中数据组织与保留策略的基本单元。ToolJet 提供从列查到增删改的完整管理能力,操作返回的响应体(JSON)会以data形式暴露给后续查询与组件使用。
List Buckets
列出数据库中的所有 Bucket,无参数,对应GET /api/v2/buckets。
Create a Bucket
创建新的 Bucket,对应POST /api/v2/buckets。
必填参数:
- Query:JSON 请求体,包含 Bucket 名称、组织 ID 与保留规则
示例请求体:
POST http://localhost:8086/api/v2/buckets Content-Type: application/json Authorization: Token your_auth_token { "name": "new_bucket", "orgID": "your_org_id", "retentionRules": [ { "everySeconds": 3600 } ] }其中retentionRules.everySeconds指定数据保留时长(秒),示例中3600表示数据保留 1 小时。
Retrieve a Bucket
按 Bucket ID 查询单个 Bucket 的详细信息,对应GET /api/v2/buckets/{bucket_id}。
必填参数:
- Bucket ID:目标 Bucket 的唯一标识
Update a Bucket
更新 Bucket 的名称或保留策略,对应PATCH /api/v2/buckets/{bucket_id}。
必填参数:
- Bucket ID:目标 Bucket 的唯一标识
- Query:JSON 请求体,仅包含需要修改的字段
示例请求体(重命名并将保留时长改为 2 小时):
{ "name": "updated_bucket_name", "retentionRules": [ { "everySeconds": 7200 } ] }Delete a Bucket
删除指定 Bucket(该操作不可恢复,Bucket 内数据将一并删除),对应DELETE /api/v2/buckets/{bucket_id}。
必填参数:
- Bucket ID:目标 Bucket 的唯一标识
底层实现:插件如何工作
InfluxDB 数据源以 ToolJet 插件体系中的独立包形式存在(plugins/packages/influxdb),核心执行逻辑集中在 lib/index.ts 的run方法中:
- 认证方式:所有请求统一携带
Authorization: Token <api_token>头,Token 通过数据源配置的api_token字段注入,存储时加密、传输时仅用于内存中的请求组装; - 操作分发:根据查询的
operation字段走switch分支,每个分支对应一个 InfluxDB v2 REST 端点(见上文表格),其中query_data与write使用application/vnd.flux与text/plain内容类型分别发送 Flux 脚本与 Line Protocol 数据,其余 JSON 交互类操作统一使用application/json; - 参数拼接:
org、bucket、precision等动态参数通过searchParams按需附加到 URL(仅当值非空时携带),避免产生无效查询串; - 响应解析:JSON 响应通过
JSON5.parse解析(lib/index.ts),可容忍注释与宽松语法,而查询类的文本响应则直接透传原始 CSV 内容; - 错误处理:任何请求异常都会被捕获并包装为
QueryError,在查询运行器中呈现错误信息,便于在构建应用时快速定位连接或脚本问题。
插件包同时提供 manifest.json(定义数据源表单字段与默认值)与 operations.json(定义 11 种操作的 UI 表单),这两份 schema 与运行时代码共同决定了你在 ToolJet 界面中看到的所有配置项与参数输入框。数据源暴露的变量包括isLoading、data、rawData与customTesting,方便在应用逻辑中监听查询状态与结果。
典型应用场景
将以上能力组合起来,可以在 ToolJet 中快速搭建时序数据应用,例如:
- 监控看板:用 Query Data 拉取近 N 小时/天的指标(
range(start: -1h)),绑定图表组件实时呈现温度、流量等时序曲线; - 数据采集入口:用 Write Data 接收表单或上游 Webhook 传来的传感器读数,按 Line Protocol 格式写入对应 Bucket;
- 存储治理:用 List Buckets 概览所有 Bucket,配合 Create / Update 调整保留策略,或用 Delete 清理废弃 Bucket;
- 查询调试:在把 Flux 脚本接入正式查询前,先用 Analyze a Flux Query 校验语法,用 AST 生成确认解析结果。
注意事项
- 本文所述连接方式与操作均基于 InfluxDB 2.x 的 v2 API(默认端口 8086);若使用 1.x 版本,接口路径与认证机制不同,需要先完成版本升级或适配。
- API Token 是唯一认证凭据,请勿在应用定义或查询中明文硬编码;ToolJet 会对其加密存储。
- Delete a Bucket 为不可逆操作,建议在正式环境使用前先在测试环境验证 Bucket ID 与数据影响范围。
- Write 与 Query 操作中的 Organization 参数既支持名称也支持 ID,二者由 InfluxDB 服务端解析,保持一致即可。
【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 🚀项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考