Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement fluent forward protocol for input/sink #3332

Open
sandervandegeijn opened this issue Sep 14, 2023 · 6 comments
Open

Implement fluent forward protocol for input/sink #3332

sandervandegeijn opened this issue Sep 14, 2023 · 6 comments
Labels
plugin - source A plugin to receive data from a service or location.

Comments

@sandervandegeijn
Copy link

Is your feature request related to a problem? Please describe.
The forward protocol is used in fluentd/fluent-bit setup to forward logs between instances. This is very useful for larger architectures. It would be nice to implement this for data prepper as well so data prepper can be used as an intermediate or endpoint before sending the data to Opensearch

Describe the solution you'd like
Implement input/sink

Describe alternatives you've considered (Optional)
http - overhead might be an issue

Additional context
none

@KarstenSchnitter
Copy link
Collaborator

It would be nice to have something like this. However, the http_source should be able to provide the use-case, probably with the help of some processors to adjust timestamps. I do not see support for http headers in the http_source though, that might be used by FluentBit to indicate the event "tag". Maybe providing a simple configuration example would be enough? Mapping the "date" to "@timestamp" could be one of the exemplary transformations. Comments on batching and compression would also be beneficial.

@sandervandegeijn
Copy link
Author

You could use http, but for resource intensive workloads http can be quite intensive. This is why you see other logforwarders implementing custom protocols. A _bulk endpoint could be an alternative as well. But for interoperability supporting the forward protocol would be nice.

Headers would be useful to provide metadata to be able to route the data, but it won't solve the overhead of using http.

@KarstenSchnitter
Copy link
Collaborator

Do you have a performance comparison between the two protocols?

@dlvenable
Copy link
Member

@ict-one-nl , Are you suggesting that Data Prepper have a source to support the FluentBit Forward output? I understand that this is more of an internal protocol. Would having a general TCP source such as requested in #2162 provide what you are looking for? Or do you specifically want FluentBit Forward?

@KarstenSchnitter
Copy link
Collaborator

@dlvenable, I think, that support for the both data formats JSON and MessagePack would be required along with additional features.

There is a better description for the protocol in the Fluentd docs. The full protocol definition is available at the Fluentd Wiki. You will find, that the server side of the protocol must support MessagePack and JSON message types and also must respond to heartbeat messages received via UDP, although the client can opt to not send those. All of this leads me to believe, that a specific plugin would be required. With a general TCP source, you can only address JSON message format without handshake and heartbeats. I presume, that this would decrease the overall maximum performance of the solution.

IMHO, Fluent Forward is a nice format for (semi-)local application, where routing the TCP and UDP connections is easy. When you have more complex network setups, e.g. providing DataPrepper as a service, it is much more complicated to support the protocol, regardless whether DataPrepper or Fluentd/Fluent Bit would be the server side.

@sandervandegeijn
Copy link
Author

@ict-one-nl , Are you suggesting that Data Prepper have a source to support the FluentBit Forward output? I understand that this is more of an internal protocol. Would having a general TCP source such as requested in #2162 provide what you are looking for? Or do you specifically want FluentBit Forward?

I think not, for me it's about interoperability between the different logforwarders and being able to mix/match to make use of the strengths of each one while maintaining performance/interoperability.

Sometimes you have to deal with existing infrastructure which is based on another forwarding infrastructure. Having common protocols help, i.e. I'm using kafka which is supported by most log forwarders (but I can't put kafka between everything as an abstraction layer).

@dlvenable dlvenable added plugin - source A plugin to receive data from a service or location. and removed untriaged labels Oct 24, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
plugin - source A plugin to receive data from a service or location.
Projects
Development

No branches or pull requests

3 participants