From 3b496ab3d88553a8bffad5a48c50ab23005e1be9 Mon Sep 17 00:00:00 2001 From: Cameron Sparr Date: Tue, 1 Mar 2016 14:53:55 +0000 Subject: [PATCH] udp listener: add os buffer size notes & change default port - using 8092 as the default port because it's similar to the rest of the TICK stack (InfluxDB, for example, uses 8083, 8086, 8088, etc.). didn't want to use 8125 because that conflicts with statsd. closes #758 --- plugins/inputs/udp_listener/README.md | 62 ++++++++++++++++++++- plugins/inputs/udp_listener/udp_listener.go | 4 +- 2 files changed, 63 insertions(+), 3 deletions(-) diff --git a/plugins/inputs/udp_listener/README.md b/plugins/inputs/udp_listener/README.md index e2fe846f9..724ae43ae 100644 --- a/plugins/inputs/udp_listener/README.md +++ b/plugins/inputs/udp_listener/README.md @@ -12,7 +12,7 @@ This is a sample configuration for the plugin. ```toml [[inputs.udp_listener]] ## Address and port to host UDP listener on - service_address = ":8125" + service_address = ":8092" ## Number of UDP messages allowed to queue up. Once filled, the ## UDP listener will start dropping packets. @@ -29,3 +29,63 @@ This is a sample configuration for the plugin. ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md data_format = "influx" ``` + +## A Note on UDP OS Buffer Sizes + +Some OSes (most notably, Linux) place very restricive limits on the performance +of UDP protocols. It is _highly_ recommended that you increase these OS limits to +at least 8MB before trying to run large amounts of UDP traffic to your instance. +8MB is just a recommendation, and can be adjusted higher. + +### Linux +Check the current UDP/IP receive buffer limit & default by typing the following +commands: + +``` +sysctl net.core.rmem_max +sysctl net.core.rmem_default +``` + +If the values are less than 8388608 bytes you should add the following lines to +the /etc/sysctl.conf file: + +``` +net.core.rmem_max=8388608 +net.core.rmem_default=8388608 +``` + +Changes to /etc/sysctl.conf do not take effect until reboot. +To update the values immediately, type the following commands as root: + +``` +sysctl -w net.core.rmem_max=8388608 +sysctl -w net.core.rmem_default=8388608 +``` + +### BSD/Darwin + +On BSD/Darwin systems you need to add about a 15% padding to the kernel limit +socket buffer. Meaning if you want an 8MB buffer (8388608 bytes) you need to set +the kernel limit to `8388608*1.15 = 9646900`. This is not documented anywhere but +happens +[in the kernel here.](https://github.com/freebsd/freebsd/blob/master/sys/kern/uipc_sockbuf.c#L63-L64) + +Check the current UDP/IP buffer limit by typing the following command: + +``` +sysctl kern.ipc.maxsockbuf +``` + +If the value is less than 9646900 bytes you should add the following lines +to the /etc/sysctl.conf file (create it if necessary): + +``` +kern.ipc.maxsockbuf=9646900 +``` + +Changes to /etc/sysctl.conf do not take effect until reboot. +To update the values immediately, type the following commands as root: + +``` +sysctl -w kern.ipc.maxsockbuf=9646900 +``` diff --git a/plugins/inputs/udp_listener/udp_listener.go b/plugins/inputs/udp_listener/udp_listener.go index c6d483d48..7aac3160c 100644 --- a/plugins/inputs/udp_listener/udp_listener.go +++ b/plugins/inputs/udp_listener/udp_listener.go @@ -32,7 +32,7 @@ var dropwarn = "ERROR: Message queue full. Discarding line [%s] " + const sampleConfig = ` ## Address and port to host UDP listener on - service_address = ":8125" + service_address = ":8092" ## Number of UDP messages allowed to queue up. Once filled, the ## UDP listener will start dropping packets. @@ -40,7 +40,7 @@ const sampleConfig = ` ## UDP packet size for the server to listen for. This will depend ## on the size of the packets that the client is sending, which is - ## usually 1500 bytes. + ## usually 1500 bytes, but can be as large as 65,535 bytes. udp_packet_size = 1500 ## Data format to consume. This can be "json", "influx" or "graphite"