# Fanning Out & In

The event stream fans out when a stage belongs to multiple downstream stages' input channels. The event stream fans in when a stage contains multiple stages in its input channels. This is useful to sprinkle in conditional logic in a more composable way. Otherwise, users would be required to either:

  • Run multiple instances. This approach can be prohibitively expensive, particularly at the ingest portion of the pipeline (eg reading files, kafka topics, opensearch indices).

  • Modify existing plugins or create new ones, which can be unnecessarily complex, more prone to error, and less maintainable.

# Use Cases

# Debugging

Can easily tap into the pipeline with debug logic with little risk to impacting the production flow. This debug flow can be as simple or as complex as needed:

  • Only want to log a sample of the events? Add a sample stage.
  • Only want to debug specific kinds of events? Add a js stage that filters accordingly.
  • Want the debugged events to go to a different destination? Add another output stage to ship those elsewhere.

# Aggregations / Roll-ups

One way to deal with noisy processes or processes that log in parser-unfriendly ways (eg multi-line tracebacks) is to aggegate those events into a single event. Allowing the event stream to be split into different roll-up logic and then merged back in for the common enriching & output stages can be useful.

For example, if a process starts spewing the same error repeatedly quickly, it is desirable to roll those up into a single event enriched with the number of times that error occurred. Another example is boot messages. All of those messages are better observed as a single multi-line "boot" event instead of individual per-line events.