首页

InfluxDB中的UDP协议支持

UDP 输入

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

一些操作系统(尤其是Linux)对UDP协议的性能设置了非常严格的限制,强烈建议您在尝试向实例运行UDP流量之前,将这些操作系统限制至少增加到25Mb,

25Mb只是一个建议,应该进行调整以符合"读取缓冲区"插件设置

Linux

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

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

如果值小于24214400字节(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所做的更改要等到重新启动后才能生效。要立即更新值,请以超级用户身份键入以下命令

sysctl -w kern.ipc.maxsockbuf=30146560

使用 read-bufferUDP侦听的选项

read-buffer选项允许用户设置侦听器的缓冲区大小,它设置与UDP流量关联的操作系统的接受缓冲区大小,请记住,操作系统必须能够处理此处设置的数字,否则UDP侦听器将出错退出 设置会read-buffer =0 导致使用操作系统默认值,并且通常对于太高的UDP性能而言太小

组态

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

每个UDP输入还对其接收的Point执行内部批处理,因为对数据库的批处理写入效率更高。默认批处理大小为1000,挂起的批处理因子为5,批处理超时为1秒。这意味着输入将写入最大大小为1000的批次,但是如果批次在添加到批次中的第一个Point后的1秒内未达到1000点,则它将发出该批次,而不管大小如何。待处理的批次因子控制一次可以在内存中存储多少批次,从而允许输入传输批次,同时仍建立其他批次

处理

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

UDP 无连接

由于UDP是无连接协议,因此如果发生任何错误,甚至无法成功索引数据,则无法向数据源发出信号。在决定是否以及何时使用UDP输入时应牢记这一Point。内置的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](https://github.com/influxdata/influxdb/tree/1.8/services/udp/README.md)

InfluxDB OSS 2.0 release candidate

InfluxDB OSS v2.0.rc includes breaking changes that require a manual upgrade from all alpha and beta versions. For information, see:

Upgrade to InfluxDB OSS v2.0.rc