文档文档

Kapacitor 常见问题解答

此页面解决了与 Kapacitor 相关的常见混淆点或需要了解的重要信息。在适用的情况下,它会链接到 Github 上的未解决问题。

管理

TICKscript

性能

管理

更新脚本时会丢失警报状态和警报数据吗?

Kapacitor 会记住警报的最后一个级别,但其他类似状态的数据,例如缓冲在窗口中的数据,将会丢失。

如何验证 Kapacitor 是否正在从 InfluxDB 接收数据?

有几种方法可以确定 Kapacitor 是否正在从 InfluxDB 接收数据。kapacitor stats ingress 命令会输出存储在 Kapacitor 数据库中的 InfluxDB 测量值以及通过 Kapacitor 服务器的数据点数量。

$ kapacitor stats ingress
Database   Retention Policy Measurement    Points Received
_internal  monitor          cq                        5274
_internal  monitor          database                 52740
_internal  monitor          httpd                     5274
_internal  monitor          queryExecutor             5274
_internal  monitor          runtime                   5274
_internal  monitor          shard                   300976
# ...

您还可以使用 Kapacitor 的/debug/vars API 端点来查看和监视摄取速率。使用此端点和Telegraf 的 Kapacitor 输入插件,您可以创建可视化来监视 Kapacitor 摄取速率。以下是使用 Telegraf 的 Kapacitor 输入插件将 Kapacitor 数据写入 InfluxDB 的示例查询

Kapacitor 摄取速率(点/秒)

SELECT sum(points_received_rate) FROM (SELECT non_negative_derivative(first("points_received"),1s) as points_received_rate FROM "_kapacitor"."autogen"."ingress" WHERE time > :dashboardTime: GROUP BY "database", "retention_policy", "measurement", time(1m)) WHERE time > :dashboardTime: GROUP BY time(1m)

按任务划分的 Kapacitor 摄取速率(点/秒)

SELECT non_negative_derivative("collected",1s) FROM "_kapacitor"."autogen"."edges" WHERE time > now() - 15m AND ("parent"='stream' OR "parent"='batch') GROUP BY task

TICKscript

批量数据可以运行,但流数据不行。为什么?

确保端口9092对入站连接是打开的。流数据会PUSH到端口9092,因此必须允许通过防火墙。

Kapacitor 可以处理的脚本数量有限制吗?

没有软件限制,但将受限于可用的服务器资源。

是什么原因导致具有相同时间戳的意外或额外值?

如果数据以不规则的间隔摄取,并且您看到具有相同时间戳的意外结果,请在使用 TICKscript 摄取数据时使用log 节点进行调试。这会暴露问题,例如,通过 httpOut 隐藏的重复数据。

性能

运行一个复杂的脚本可以获得更好的性能,还是并行运行多个脚本可以获得更好的性能?

极端情况下,最佳情况是有一个任务消耗所有数据并完成所有工作,因为管理多个任务会增加额外的开销。然而,已经付出了巨大的努力来减少每个任务的开销。以对您的项目和组织有逻辑意义的方式使用任务。如果您遇到多个任务的性能问题,请告诉我们作为最后的手段,将任务合并成更复杂的任务。

基于模板的脚本是否使用更少的资源,还是它们只是一个易于使用的工具?

模板只是一个易于使用的工具,在性能方面没有区别。

Kapacitor 如何处理高负载?

如果 Kapacitor 在收到新数据之前无法摄取和处理传入数据,Kapacitor 会在内存中排队传入数据,并在能够处理时进行处理。排队数据的内存需求取决于摄取速率和传入数据的形状。一旦 Kapacitor 能够处理所有排队的数据,它会随着内部垃圾收集器回收内存而缓慢释放内存。

长时间的高数据摄取可能会耗尽可用的系统资源,迫使操作系统停止kapacitord进程。避免此问题的主要方法是

  • 确保您的硬件提供足够的系统资源来处理额外的负载。
  • 优化您的 Kapacitor 任务。参见下文

当 Kapacitor 处理队列中的数据时,它可能会消耗其他系统资源,如 CPU、磁盘和网络 IO 等,这将影响您的 Kapacitor 服务器的整体性能。

如何优化 Kapacitor 任务?

在优化 Kapacitor 任务时,请考虑以下几点

“批量”传入数据

batch 从 InfluxDB 中批量查询数据。只要 Kapacitor 能够在查询下一个批次之前处理完当前批次,它就不需要排队任何东西。

stream 实时镜像所有 InfluxDB 写入 Kapacitor 的操作,并且更容易导致排队。如果使用stream,请使用window将传入数据分割成基于时间的批次。


此页面是否有帮助?

感谢您的反馈!


InfluxDB 3.8 新特性

InfluxDB 3.8 和 InfluxDB 3 Explorer 1.6 的主要增强功能。

查看博客文章

InfluxDB 3.8 现已适用于 Core 和 Enterprise 版本,同时发布了 InfluxDB 3 Explorer UI 的 1.6 版本。本次发布着重于操作成熟度,以及如何更轻松地部署、管理和可靠地运行 InfluxDB。

更多信息,请查看

InfluxDB Docker 的 latest 标签将指向 InfluxDB 3 Core

在 **2026 年 2 月 3 日**,InfluxDB Docker 镜像的 latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。

如果使用 Docker 来安装和运行 InfluxDB,latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。例如,如果使用 Docker 运行 InfluxDB v2,请将 latest 版本标签替换为 Docker pull 命令中的特定版本标签 — 例如

docker pull influxdb:2