Add keep alive support to the TCP mode of statsd (#3781)

This commit is contained in:
Jorge Canha 2018-02-16 04:04:49 +00:00 committed by Daniel Nelson
parent f567be3d0f
commit b8a4eae583
3 changed files with 41 additions and 0 deletions

View File

@ -3045,6 +3045,13 @@
# #
# ## MaxTCPConnection - applicable when protocol is set to tcp (default=250) # ## MaxTCPConnection - applicable when protocol is set to tcp (default=250)
# max_tcp_connections = 250 # max_tcp_connections = 250
# ## Enable TCP keep alive probes (default=false)
# tcp_keep_alive = false
#
# ## Specifies the keep-alive period for an active network connection.
# ## Only applies to TCP sockets and will be ignored if tcp_keep_alive is false.
# ## Defaults to the OS configuration.
# # tcp_keep_alive_period = "2h"
# #
# ## Address and port to host UDP listener on # ## Address and port to host UDP listener on
# service_address = ":8125" # service_address = ":8125"

View File

@ -11,6 +11,14 @@
## MaxTCPConnection - applicable when protocol is set to tcp (default=250) ## MaxTCPConnection - applicable when protocol is set to tcp (default=250)
max_tcp_connections = 250 max_tcp_connections = 250
## Enable TCP keep alive probes (default=false)
tcp_keep_alive = false
## Specifies the keep-alive period for an active network connection.
## Only applies to TCP sockets and will be ignored if tcp_keep_alive is false.
## Defaults to the OS configuration.
# tcp_keep_alive_period = "2h"
## Address and port to host UDP listener on ## Address and port to host UDP listener on
service_address = ":8125" service_address = ":8125"
@ -157,6 +165,8 @@ metric type:
- **protocol** string: Protocol used in listener - tcp or udp options - **protocol** string: Protocol used in listener - tcp or udp options
- **max_tcp_connections** []int: Maximum number of concurrent TCP connections - **max_tcp_connections** []int: Maximum number of concurrent TCP connections
to allow. Used when protocol is set to tcp. to allow. Used when protocol is set to tcp.
- **tcp_keep_alive** boolean: Enable TCP keep alive probes
- **tcp_keep_alive_period** internal.Duration: Specifies the keep-alive period for an active network connection
- **service_address** string: Address to listen for statsd UDP packets on - **service_address** string: Address to listen for statsd UDP packets on
- **delete_gauges** boolean: Delete gauges on every collection interval - **delete_gauges** boolean: Delete gauges on every collection interval
- **delete_counters** boolean: Delete counters on every collection interval - **delete_counters** boolean: Delete counters on every collection interval

View File

@ -113,6 +113,9 @@ type Statsd struct {
MaxTCPConnections int `toml:"max_tcp_connections"` MaxTCPConnections int `toml:"max_tcp_connections"`
TCPKeepAlive bool `toml:"tcp_keep_alive"`
TCPKeepAlivePeriod *internal.Duration `toml:"tcp_keep_alive_period"`
graphiteParser *graphite.GraphiteParser graphiteParser *graphite.GraphiteParser
acc telegraf.Accumulator acc telegraf.Accumulator
@ -177,6 +180,14 @@ const sampleConfig = `
## MaxTCPConnection - applicable when protocol is set to tcp (default=250) ## MaxTCPConnection - applicable when protocol is set to tcp (default=250)
max_tcp_connections = 250 max_tcp_connections = 250
## Enable TCP keep alive probes (default=false)
tcp_keep_alive = false
## Specifies the keep-alive period for an active network connection.
## Only applies to TCP sockets and will be ignored if tcp_keep_alive is false.
## Defaults to the OS configuration.
# tcp_keep_alive_period = "2h"
## Address and port to host UDP listener on ## Address and port to host UDP listener on
service_address = ":8125" service_address = ":8125"
@ -361,6 +372,18 @@ func (s *Statsd) tcpListen() error {
return err return err
} }
if s.TCPKeepAlive {
if err = conn.SetKeepAlive(true); err != nil {
return err
}
if s.TCPKeepAlivePeriod != nil {
if err = conn.SetKeepAlivePeriod(s.TCPKeepAlivePeriod.Duration); err != nil {
return err
}
}
}
select { select {
case <-s.accept: case <-s.accept:
// not over connection limit, handle the connection properly. // not over connection limit, handle the connection properly.
@ -863,6 +886,7 @@ func init() {
Protocol: defaultProtocol, Protocol: defaultProtocol,
ServiceAddress: ":8125", ServiceAddress: ":8125",
MaxTCPConnections: 250, MaxTCPConnections: 250,
TCPKeepAlive: false,
MetricSeparator: "_", MetricSeparator: "_",
AllowedPendingMessages: defaultAllowPendingMessage, AllowedPendingMessages: defaultAllowPendingMessage,
DeleteCounters: true, DeleteCounters: true,