Log Forwarder Inputs
Runs the 10x Engine as a forwarder sidecar to process collected log events before they ship to output destinations (e.g., Splunk, Elasticsearch, S3).
The design enables 10x apps — the Reporter (DaemonSet alongside the forwarder) and the Receiver (sidecar, Filter and Compact modes) — to process events at the source while integrating with existing log forwarders (e.g., Fluentd/Bit).
Extensibility
All forwarder input modules utilize core IPC I/O modules (e.g., stdin, Unix) as building blocks for integrating with bundled forwarders (e.g., Fluentd/Bit) and to serve as a reference for supporting additional forwarder types.
Modules
-
Fluent Bit
Receive and optimize events collected by Fluent Bit via the Fluent Forward protocol.
-
Fluentd
Receive and optimize events collected by Fluentd via the Fluent Forward protocol.
-
OpenTelemetry Collector
Receive and optimize events collected by the OpenTelemetry Collector via OTLP/gRPC (both directions).
-
Vector
Receive and optimize events collected by Vector via the socket sink and fluent source.
-
Filebeat
Report, receive, and optimize events collected by Filebeat forwarders.
-
Logstash
Receive and optimize events collected by Logstash via newline-delimited JSON.
-
Splunk UF Input
Receive and optimize events before shipping to Splunk via Universal Forwarder.
-
Datadog Agent Input
Receive and optimize events before shipping to Datadog via Datadog Agent.
Config Files
To configure the Log Forwarder inputs module, Edit these files.
Below is the default configuration from: forwarder/config.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJpbmNsdWRlIiA6IHsKICAgICAgInR5cGUiIDogImFycmF5IiwKICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICB9CiAgICB9LAogICAgInRlbngiIDogewogICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgfSwKICAgICJvdXRwdXQiIDogewogICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgImVuY29kZUZpZWxkIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaGUgc2luZ2xlIGZpZWxkIGV4cHJlc3Npb24gZWFjaCBmb3J3YXJkZXIncyBvdXRwdXQgc3RyZWFtIHdyaXRlcyBwZXIgZXZlbnRcblxuU2VsZWN0ZWQgcGVyIGZvcndhcmRlciBtb2RlIGJ5IHRoZSB1c2VyLWZhY2luZyBjb25maWcueWFtbDogLSAqKnJlY2VpdmUqKiAoZGVmYXVsdCk6IGBmdWxsVGV4dGAg4oCUIHBsYWluIHBhc3N0aHJvdWdoLCBubyBlbmNvZGluZyAtICoqY29tcGFjdC1hbGwqKjogYGVuY29kZWQ9ZW5jb2RlKClgIOKAlCBldmVyeSBldmVudCBjb21wYWN0ZWQgLSAqKmNvbXBhY3QtbG9va3VwKio6IGBlbmNvZGVkPXNob3VsZEVuY29kZSgpID8gZW5jb2RlKCkgOiBmdWxsVGV4dGAg4oCUIHBlci1wYXR0ZXJuICAgZGVjaXNpb24gdmlhIHRoZSBjb21wYWN0UmVjZWl2ZXIgbW9kdWxlIChyZXF1aXJlcyBgY29tcGFjdFJlY2VpdmVyTG9va3VwRmlsZWApICBBZHZhbmNlZCB1c2VycyBjYW4gb3ZlcnJpZGUgZGlyZWN0bHkgdG8gY3VzdG9taXplIHRoZSBvdXRwdXQgZmllbGQgZXhwcmVzc2lvbi4gKERlZmF1bHQ6IGZ1bGxUZXh0KSIsCiAgICAgICAgICAiZGVmYXVsdCIgOiAiZnVsbFRleHQiCiAgICAgICAgfSwKICAgICAgICAid3JpdGVUZW1wbGF0ZXMiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIldoZXRoZXIgdGhlIGZvcndhcmRlciBlbWl0cyBuZXcgVGVuWFRlbXBsYXRlcyBhbG9uZ3NpZGUgZW5jb2RlZCBldmVudHNcblxuVHJ1ZSBmb3IgZW5jb2RpbmcgbW9kZXMgKGNvbXBhY3QtYWxsLCBjb21wYWN0LWxvb2t1cCkgc28gZGVjb2RlcnMgY2FuIHJlY29uc3RydWN0IGV2ZW50cyBmcm9tIHRlbXBsYXRlSGFzaCArIHZhcnMuIEZhbHNlIGZvciByZWNlaXZlIG1vZGUgKG5vIGVuY29kaW5nIOKGkiBubyB0ZW1wbGF0ZXMgbmVlZGVkKS4gKERlZmF1bHQ6IGZhbHNlKSIsCiAgICAgICAgICAiZGVmYXVsdCIgOiAiZmFsc2UiCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogdHJ1ZQp9
# 🔟❎ 'run' shared forwarder configuration
#
tenx: run
# =============================== Dependencies ================================
include:
# Shared forwarder options (mode dispatch, output encoding)
- run/modules/input/forwarder/module.yaml
# =============================== Mode Options ================================
#
# The Receiver app picks the encoding mode based on user flags:
# default → emit events verbatim (`fullText`)
# receiverOptimize=true → compact-all (lossless compaction of every event)
# compactReceiverLookupFile=… → compact-lookup (per-pattern decision)
#
output:
encodeField: $=yield TenXReceiver.encodeField()
writeTemplates: $=yield TenXReceiver.writeTemplates()
Options
Specify the options below to configure the Log Forwarder inputs:
| Name | Description |
|---|---|
| outputEncodeField | The single field expression each forwarder's output stream writes per event |
| outputWriteTemplates | Whether the forwarder emits new TenXTemplates alongside encoded events |
outputEncodeField
The single field expression each forwarder's output stream writes per event.
| Type | Default |
|---|---|
| String | fullText |
Selected per forwarder mode by the user-facing config.yaml:
- receive (default):
fullText— plain passthrough, no encoding - compact-all:
encoded=encode()— every event compacted - compact-lookup:
encoded=shouldEncode() ? encode() : fullText— per-pattern decision via the compactReceiver module (requirescompactReceiverLookupFile)
Advanced users can override directly to customize the output field expression.
outputWriteTemplates
Whether the forwarder emits new TenXTemplates alongside encoded events.
| Type | Default |
|---|---|
| String | false |
True for encoding modes (compact-all, compact-lookup) so decoders can reconstruct events from templateHash + vars. False for receive mode (no encoding → no templates needed).
This module is defined in forwarder/module.yaml.