fluent / fluent-bit

Fast and Lightweight Logs and Metrics processor for Linux, BSD, OSX and Windows
https://fluentbit.io
Apache License 2.0
5.82k stars 1.58k forks source link

TCP/TLS output should have connection persistence / keepalive and TLS session resumption #2272

Closed cameronkerrnz closed 4 years ago

cameronkerrnz commented 4 years ago

Is your feature request related to a problem? Please describe.

For performance reasons, particular those with a non-negligible round-trip time, I would expect that the TCP output should keep the connection alive (up to a configurable timeout). This would mean that it doesn't get penalised with TCP connection setup-teardown time and that it would retain the window size; negating TCP slow-start behaviour.

Similarly, I see no indication that TLS is using session-resumption; can this be clarified please? I'd hate for my servers to be spending unneccesary time negotiating handshakes. Hopefully the session state is housed in-process, but it would be useful to have this documented. (I am assuming that the client also needs to support resumption). This is significant on the server-side, as handshakes are where the bulk of the time is spent.

Describe the solution you'd like

I would expect to see that connections would stay open and be closed after some idle period, or other period (which might be useful for retaining some semblance of round-robin load-balancing for upstream nodes)

Describe alternatives you've considered

None.

Additional context

This is the behaviour I was accustomed to with nxlog, which I'm happily moving away from (in part because nxlog-ce doesn't work on RHEL8.... but I've been looking for a good excuse anyway). But the protocol I need to implement are json_lines over TLS, and I have all sorts of high-volume logs being sent in this way.

Thanks for your time and effort on fluent-bit; I love it already. Cheers, Cameron

edsiper commented 4 years ago

Starting from Fluent Bit v1.5.x keepalive is enabled by default:

https://docs.fluentbit.io/manual/administration/networking#tcp-keepalive