文档文档

InfluxDB中的UDP协议支持

本页面记录了InfluxDB OSS的早期版本。 InfluxDB OSS v2 是最新稳定版本。

UDP输入

关于UDP/IP操作系统缓冲区大小的说明

一些操作系统(尤其是Linux)对UDP协议的性能施加了非常严格的限制。在尝试向实例运行UDP流量之前,强烈建议您将这些操作系统限制增加到至少25MB。25MB只是一个建议,应根据您的 read-buffer 插件设置进行调整。

Linux

通过输入以下命令检查当前的UDP/IP接收缓冲区默认值和限制

sysctl net.core.rmem_max
sysctl net.core.rmem_default

如果值小于26214400字节(25MB),则应将以下行添加到 /etc/sysctl.conf 文件中

net.core.rmem_max=26214400
net.core.rmem_default=26214400

/etc/sysctl.conf 的更改不会立即生效,直到重新启动。要立即更新值,请以root用户身份输入以下命令

sysctl -w net.core.rmem_max=26214400
sysctl -w net.core.rmem_default=26214400

BSD/Darwin

在BSD/Darwin系统上,您需要将内核限制套接字缓冲区的大小增加约15%。例如,如果您想要25MB的缓冲区(26214400字节),则需要将内核限制设置为 26214400*1.15 = 30146560。这一点没有在文档中记录,但发生在 内核此处

检查当前的UDP/IP缓冲区限制

要检查当前的UDP/IP缓冲区限制,请输入以下命令

sysctl kern.ipc.maxsockbuf

如果值小于30146560字节,则应将以下行添加到 /etc/sysctl.conf 文件中(如果需要,请创建它)

kern.ipc.maxsockbuf=30146560

/etc/sysctl.conf 的更改不会立即生效,直到重新启动。要立即更新值,请以root用户身份输入以下命令

sysctl -w kern.ipc.maxsockbuf=30146560

为UDP监听器使用 read-buffer 选项

read-buffer 选项允许用户设置UDP监听器的缓冲区大小。它设置与UDP流量关联的操作系统接收缓冲区的大小。请注意,操作系统必须能够处理此处设置的数值,否则UDP监听器将出现错误并退出。

read-buffer = 0 设置为使用操作系统默认值,这通常对于高UDP性能来说太小。

配置

每个UDP输入允许设置绑定地址、目标数据库和目标保留策略。如果数据库不存在,则在初始化输入时自动创建。如果没有配置保留策略,则使用数据库的默认保留策略。但是,如果设置了保留策略,则必须显式创建保留策略。输入不会自动创建它。

每个UDP输入还对其接收到的点进行内部批量处理,因为批量写入数据库更高效。默认的批量大小为1000,挂起批量系数为5,批量超时为1秒。这意味着输入将写入最大大小为1000的批次,但如果一个批次在第一个点被添加到批次的1秒内没有达到1000个点,它将无论大小都会发出该批次。挂起批量系数控制内存中可以同时有多少个批次,允许输入传输一个批次,同时构建其他批次。

处理

UDP输入每次读取最多可接收64KB,并按换行符拆分接收到的数据。然后,每个部分被解释为行协议编码的点,并相应地解析。

UDP是无连接的

由于UDP是无连接的协议,因此无法向数据源发出任何错误发生的信号,也无法确定数据是否已成功索引。在决定是否以及何时使用UDP输入时,应牢记这一点。内置的UDP统计信息对于监控UDP输入很有用。

配置示例

一个UDP监听器

# influxd.conf
...
[[udp]]
  enabled = true
  bind-address = ":8089" # the bind address
  database = "telegraf" # Name of the database that will be written to
  batch-size = 5000 # will flush if this many points get buffered
  batch-timeout = "1s" # will flush at least this often even if the batch-size is not reached
  batch-pending = 10 # number of batches that may be pending in memory
  read-buffer = 0 # UDP read buffer, 0 means to use OS default
...

多个UDP监听器

# influxd.conf
...
[[udp]]
  # Default UDP for Telegraf
  enabled = true
  bind-address = ":8089" # the bind address
  database = "telegraf" # Name of the database that will be written to
  batch-size = 5000 # will flush if this many points get buffered
  batch-timeout = "1s" # will flush at least this often even if the batch-size is not reached
  batch-pending = 10 # number of batches that may be pending in memory
  read-buffer = 0 # UDP read buffer size, 0 means to use OS default

[[udp]]
  # High-traffic UDP
  enabled = true
  bind-address = ":8189" # the bind address
  database = "mymetrics" # Name of the database that will be written to
  batch-size = 5000 # will flush if this many points get buffered
  batch-timeout = "1s" # will flush at least this often even if the batch-size is not reached
  batch-pending = 100 # number of batches that may be pending in memory
  read-buffer = 8388608 # (8*1024*1024) UDP read buffer size
...

内容来自 README


这个页面有帮助吗?

感谢您的反馈!


Flux的未来

Flux正在进入维护模式。您可以在不更改代码的情况下继续按当前方式使用它。

阅读更多

InfluxDB v3增强功能和InfluxDB Clustered现在已普遍可用

新功能,包括更快的查询性能和管理工具,推动了InfluxDB v3产品线的进步。InfluxDB Clustered现在已普遍可用。

InfluxDB v3性能和功能

InfluxDB v3产品线在查询性能方面取得了显著提升,并提供了新的管理工具。这些改进包括一个操作仪表板来监控您的InfluxDB集群健康状况、InfluxDB Cloud Dedicated中的单点登录(SSO)支持,以及用于令牌和数据库的新管理API。

了解v3的新增强功能


InfluxDB集群版已正式发布

InfluxDB集群版现已正式发布,为您提供在自托管堆栈中使用InfluxDB v3的能力。

与我们讨论InfluxDB集群版