在 InfluxDB 3 中构建时间序列预测管道,无需编写代码
作者:Anais Dotis-Georgiou / 开发者
2025 年 4 月 17 日
导航至
想知道时间序列预测如何融入您的 InfluxDB 3 工作流程吗?让我们一起使用 InfluxDB 3 Core 的 Python 处理引擎和 Facebook 的 Prophet 库构建一个完整的预测管道。
InfluxDB 3 Core 的 Python 处理引擎大大降低了入门门槛——不仅对于经验丰富的开发者,而且对于任何对时间序列数据和 Python 有基本了解的人来说都是如此。它将过去复杂的多天任务变成您可以在几个小时内完成原型设计的事情,使高级预测和数据处理更加易于访问,并加速从想法到洞察的路径。
这个项目最令人兴奋的方面之一是它使用大型语言模型 (LLM) 快速完成。通过简单地向 InfluxDB 3 Core 的 Python 处理引擎提供文档和 FB Prophet 快速入门指南,LLM 生成了可用的插件代码,连接了整个管道,甚至提出了改进建议。
现在,让我们构建一个管道,预测维基百科上关于 Peyton Manning 文章全年每日的页面浏览量,从历史数据开始,到交互式 Plotly 可视化结束。要与本项目一起构建,请下载 InfluxDB 3 Core 或 Enterprise。本项目将涵盖
- 关于我向 LLM (ChatGPT-4o) 提供了哪些信息来执行此操作的详细信息
- 运行此端到端预测管道示例所需的要求和设置
- 创建必要的 InfluxDB 3 Core 和 Enterprise 资源
- 写入数据、进行预测和可视化结果
预测管道包括三个专门构建的插件:一个用于加载历史数据,另一个用于生成每日预测,一个用于按需可视化结果
- load_peyton (load_peyton_data.py):一个 HTTP 触发的插件,用于从 CSV 加载示例维基百科页面浏览量数据并将其写入 peyton_views 表。
- peyton_forecast (forecast_peyton.py):一个计划插件(例如,every:1d),用于查询 peyton_views 表,拟合 Prophet 模型,并将完整的 365 天预测写入 prophet_forecast 表。
- forecast_plot (plot_forecast_http.py):一个 HTTP 触发的插件,用于查询 peyton_views 和 prophet_forecast,合并它们,并返回一个交互式 Plotly 图表作为 HTML。
历史页面浏览量数据(蓝色)和预测页面浏览量数据(绿色)的可视化,您可以通过遵循本教程生成。可以通过访问 http://localhost:8181/api/v3/engine/plot_forecast 访问。
从编码到 AI 验证
我通过向 ChatGPT-4o 提供以下资源生成了此项目的代码:处理引擎和 Python 插件文档 以及 Prophet 快速入门示例。从那里,我给它提供了一些自然语言提示,以迭代地构建我需要的组件。以下是我使用的核心提示
- “你能为 InfluxDB 3 编写一个使用 Facebook Prophet 预测时间序列数据的插件吗?” 这开始了对话,并帮助 ChatGPT 理解了目标用例和库。
- “创建一个插件,从公共 CSV(如 Peyton Manning 维基百科浏览量)加载历史数据并将其写入 InfluxDB。” 这成为了 HTTP 触发的加载器插件,用于填充 peyton_views 表。
- “现在,编写一个计划插件,查询该表,拟合 Prophet 模型,并将预测写入另一个表。确保逻辑写入所有预测行。” 这成为了每日预测插件,它将 yhat、yhat_lower 和 yhat_upper 输出到 prophet_forecast。
- “你能构建第三个插件,读取历史数据和预测数据,使用 Plotly 绘制它,并通过 HTTP 以 HTML 页面的形式返回结果吗?” 这个插件允许我在浏览器中可视化整个管道,而无需设置外部仪表板。
通过分层上述提示,我在 InfluxDB 内部构建了一个功能齐全的交互式预测管道,而无需手动编写任何代码。最初的传统编码迅速变成了一个提示工程和 AI 验证的过程。
最初的传统编码迅速变成了一个提示工程和 AI 验证的过程。我描述了意图,审查了生成的代码,并迭代直到一切端到端地工作。
也就是说,使用处理引擎的 test 命令 非常有帮助——不仅对于这个项目,而且对于构建和验证任何插件都很有帮助。test 命令 可以使用 cURL 快速触发插件或使用 SQL 查询验证结果。它使反馈循环紧密而高效,尤其是在与 AI 生成的代码配对时。
要求和设置
您可以本地运行此示例,也可以在 Docker 容器中运行。请遵循 InfluxDB 3 Core 或 Enterprise 安装指南,因为这篇文章适用于这两种产品。我建议使用 Docker,因此这篇文章将假设您在容器化环境中运行 InfluxDB 3,以便于设置、隔离和清理。确保您的系统上安装了 Docker,并且您已为您选择的版本拉取了最新的 InfluxDB 3 镜像。我将使用 InfluxDB 3 Core,因为它是 OSS 版本。Enterprise 也可免费用于本地开发和测试,如果您选择在家使用。
一旦您拉取了这个 repo,将文件保存在您配置的插件目录中(例如,/path/to/plugins/)。然后运行以下命令
docker run -it --rm --name test_influx -v ~/influxdb3/data:/var/lib/influxdb3 -v /path/to/plugins/:/plugins -p 8181:8181 quay.io/influxdb/influxdb3-core:latest serve --node-id my_host --object-store file --data-dir /var/lib/influxdb3 --plugin-dir /plugin
此命令运行一个名为 test_influx
的临时 InfluxDB 3 Core 容器,使用最新镜像。它挂载您的本地数据目录以持久化数据库文件和包含死信检查插件的插件目录。它还暴露了端口 8181,以便您可以在本地访问数据库,并使用 serve 命令 和基于文件的对象存储(您也可以轻松地使用 S2 存储桶进行基于文件的存储)、自定义节点 ID 和挂载的插件目录来启动服务器。
写入数据、进行预测和可视化我们的数据
在我们创建和启用任何使用上述插件的触发器之前,我们需要安装所有依赖项。本项目依赖于 Plotly 和 Prophet。使用以下命令安装它们
influxdb3 install package plotly
influxdb3 install package prophet
接下来,创建一个数据库以写入页面浏览量数据
influxdb3 create database prophet
现在,我们可以创建我们的触发器。首先,我们将创建插件 1 并通过 HTTP 加载数据
influxdb3 create trigger \
--trigger-spec "request:load_peyton" \
--plugin-filename "load_peyton_data.py" \
--database prophet \
load_peyton
load_peyton 插件
- 是一个 HTTP 触发的插件
- 下载每日维基百科浏览量的公共 CSV
- 将行写入 InfluxDB 3 Core 中的 peyton_views 表
然后我们可以执行以下 cURL 命令来触发 load_peyton 插件的执行
curl http://localhost:8181/api/v3/engine/load_peyton
您应该看到以下输出,这确认数据已成功写入
{"status": "success", "rows_written": 2905}
接下来,我们可以按计划创建预测
influxdb3 create trigger \
--trigger-spec "every:1m" \
--plugin-filename "forecast_peyton.py" \
--database prophet \
peyton_forecast
peyton_forecast 插件
- 计划插件(每天或按您的计划运行)
- 从 peyton_views 表读取数据
- 拟合 Prophet 模型
- 预测未来 365 天
- 将摘要预测结果写入 prophet_forecast 表
我已经将 peyton_forecast 插件设置为每分钟运行一次,以便快速获得预测。但是,由于我们正在查看每日数据,因此您更可能在每日间隔运行此类管道。在您成功生成并写入预测后,您应该看到以下输出
processing engine: Running Prophet forecast on 'peyton_views'INFO - Chain [1] start processing
INFO - Chain [1] done processing
为了防止插件无限期运行并重复相同的预测工作负载,请使用以下命令禁用它
inflxudb3 disable trigger --database prophet peyton_forecast
最后,我们可以通过启用最终插件来可视化我们的数据
influxdb3 create trigger \
--trigger-spec "request:plot_forecast" \
--plugin-filename "plot_forecast_http.py" \
--database prophet \
forecast_plot
forecast_plot 插件
- 是一个 HTTP 触发的插件
- 从 peyton_views 和 prophet_forecast 读取数据
- 创建一个交互式 Plotly 图表,结合历史数据和预测
- 将图表作为 HTML 返回,以便在浏览器中查看
访问 http://localhost:8181/api/v3/engine/plot_forecast 以查看本教程第一节中共享的历史数据和预测。
最终想法和注意事项
这组用于 InfluxDB 3 Core 和 Enterprise 的插件提供了一个基本示例,说明如何使用 InfluxDB 3 Python 处理引擎构建端到端的数据收集、预测和可视化管道。虽然本项目侧重于基于简单 FB Prophet 的预测,但它可以轻松扩展为更强大和生产就绪的系统。例如,您可以从 Hugging Face 加载预训练的预测模型以加快推理速度,监控预测准确性以检测模型漂移,并在性能下降时安排自动重新训练。
将此管道与 InfluxDB 3 的处理引擎警报功能配对,您可以主动响应异常或漂移事件,方法是发送通知或触发补救工作流程。借助这些构建块,您可以创建针对您的用例量身定制的智能、自愈时间序列管道。
我鼓励您查看 InfluxData/influxdb3_plugins,因为我们会添加示例和插件。此外,请贡献您自己的插件!要了解有关构建插件的更多信息,请查看以下资源
此外,请查看以下资源以获取更多信息和其他警报插件示例
- 使用 InfluxDB 3 的处理引擎缓存防止警报风暴
- 如何使用 InfluxDB 3 处理引擎设置实时 SMS/WhatsApp 警报
- 使用 InfluxDB 3 Core 和 Enterprise 发出警报
我邀请您贡献您创建的任何插件。查看我们的 Core 入门指南 和 Enterprise,并在 Discord 的 #influxdb3_core 频道、Slack 的 #influxdb3_core 频道或我们的 社区论坛 上与我们的开发团队分享您的反馈。