Receive
Read events from OpenTelemetry Collector and filter them using local/centralized receiver policy. This module is a component of the Receiver app.
Architecture
graph LR
A["<div style='font-size: 14px;'>📂 OTel Receivers</div><div style='font-size: 10px;'>filelog, otlp</div>"] --> B["<div style='font-size: 14px;'>📤 syslog</div><div style='font-size: 10px;'>exporter</div>"]
B --> C["<div style='font-size: 14px;'>🔌 Unix Socket</div><div style='font-size: 10px;'>RFC5424</div>"]
C --> D["<div style='font-size: 14px;'>⚡ 10x Receiver</div><div style='font-size: 10px;'>filter policy</div>"]
D --> E["<div style='font-size: 14px;'>🔌 Unix Socket</div><div style='font-size: 10px;'>Forward</div>"]
E --> F["<div style='font-size: 14px;'>📥 fluentforward</div><div style='font-size: 10px;'>receiver</div>"]
F --> G["<div style='font-size: 14px;'>📤 Final Exporters</div><div style='font-size: 10px;'>ES, Splunk, S3</div>"]
classDef receiver fill:#2563eb,stroke:#1d4ed8,color:#ffffff,stroke-width:2px,rx:8,ry:8
classDef exporter fill:#ea580c,stroke:#c2410c,color:#ffffff,stroke-width:2px,rx:8,ry:8
classDef socket fill:#0891b2,stroke:#0e7490,color:#ffffff,stroke-width:2px,rx:8,ry:8
classDef engine fill:#7c3aed,stroke:#6d28d9,color:#ffffff,stroke-width:2px,rx:8,ry:8
classDef output fill:#16a34a,stroke:#15803d,color:#ffffff,stroke-width:2px,rx:8,ry:8
class A receiver
class B,F exporter
class C,E socket
class D engine
class G output
Data Flow
- 📂 OTel Receivers - Collect logs from files, OTLP, or other sources
- 📤 Syslog Exporter - Sends ALL logs to Log10x via Unix socket (RFC5424 format)
- ⚡ 10x Receiver - Applies rate/policy-based filtering, drops noisy events
- 🔌 Forward Output - Returns FILTERED events via Forward protocol
- 📥 FluentForward Receiver - OTel Collector receives filtered events
- 📤 Final Exporters - Only filtered events ship to final destinations
Key Characteristics
| Feature | Description |
|---|---|
| 🚦 Rate Limiting | Filter events based on per-template rate limits |
| 📋 Policy-Based | Apply local or centralized filtering policies |
| 💰 Cost Control | Reduce log volume and costs by dropping noisy events |
| 🔄 Two Pipelines | logs/to-tenx sends all, logs/from-tenx receives filtered |
Sidecar Relay
This module configures a Unix socket input/output pair that receives syslog events from OpenTelemetry Collector, applies filter policy, and returns filtered events via Forward protocol. The sidecar relays received events back to OTel Collector to ship to outputs (e.g., Splunk, S3).
Install
See the Log10x Receiver OTel Collector run instructions
Deploy to k8s via Helm
See the Log10x Receiver OTel Collector deployment instructions
Config Files
To configure the OpenTelemetry Collector Receiver module, Edit these files.
Below is the default configuration from: receive/config.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJpbmNsdWRlIiA6IHsKICAgICAgInR5cGUiIDogImFycmF5IiwKICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICB9CiAgICB9LAogICAgInRlbngiIDogewogICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgfSwKICAgICJvdGVsQ29sbGVjdG9yT3V0cHV0IiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJmaWVsZHMiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTGlzdCBvZiBUZW5YT2JqZWN0IGZpZWxkIG5hbWVzIHRvIGluY2x1ZGUgYWxvbmdzaWRlIHRoZSBtYWluIGV2ZW50IGluIG91dHB1dFxuXG5TcGVjaWZpZXMgVGVuWE9iamVjdCBmaWVsZCBuYW1lcyB0byBlbWl0IGFsb25nc2lkZSB0aGUgbWFpbiBldmVudCB0ZXh0IHdoZW4gd3JpdGluZyBiYWNrIHRvIHRoZSBPcGVuVGVsZW1ldHJ5IENvbGxlY3RvciBmb3J3YXJkZXIuIFdoZW4gZW1wdHkgKGRlZmF1bHQpLCBvbmx5IHRoZSBtYWluIGV2ZW50IGZpZWxkIGlzIHdyaXR0ZW4uIEV4YW1wbGUgZmllbGRzOiBsZXZlbCwgZ3JvdXAsIHN5bWJvbE1lc3NhZ2UuIChEZWZhdWx0OiBbXSkiLAogICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgIH0sCiAgICAgICAgICAiZGVmYXVsdCIgOiBbIF0KICAgICAgICB9LAogICAgICAgICJlbmNvZGVUeXBlIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJPdXRwdXQgZm9ybWF0IHdoZW4gb3V0cHV0RmllbGRzIGFyZSBzZXQuIFBvc3NpYmxlIHZhbHVlczogW2pzb24sIGRlbGltaXRlZF1cblxuU3BlY2lmaWVzIGhvdyB0aGUgY29tYmluZWQgb3V0cHV0IChtYWluIGV2ZW50IGZpZWxkIHBsdXMgb3V0cHV0RmllbGRzKSBpcyBlbmNvZGVkIHdoZW4gd3JpdGluZyBiYWNrIHRvIHRoZSBPcGVuVGVsZW1ldHJ5IENvbGxlY3RvciBmb3J3YXJkZXIuIFBvc3NpYmxlIHZhbHVlczogLSAqKmpzb24qKjogZm9ybWF0cyBhbGwgZmllbGRzIGFzIGEgSlNPTiBvYmplY3QgLSAqKmRlbGltaXRlZCoqOiBmb3JtYXRzIGZpZWxkIHZhbHVlcyBzZXBhcmF0ZWQgYnkgdGhlIG91dHB1dCBkZWxpbWl0ZXIgT25seSB0YWtlcyBlZmZlY3Qgd2hlbiBvdGVsQ29sbGVjdG9yT3V0cHV0RmllbGRzIGlzIHNldC4gKERlZmF1bHQ6IGRlbGltaXRlZCkiLAogICAgICAgICAgImRlZmF1bHQiIDogImRlbGltaXRlZCIKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9LAogICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZQp9
# 🔟❎ 'run' OpenTelemetry Collector receiver configuration
#
# Configure an input that reads events from OpenTelemetry Collector via syslog
# and an output that writes received TenXObjects back via Forward protocol.
# When 'receiverOptimize' is enabled, events are encoded for volume reduction.
#
# Architecture:
# OTel Collector --[syslog/unix]--> Log10x Receiver --[forward/unix]--> OTel Collector --> Final destinations
#
# Usage:
# tenx run @run/input/forwarder/otel-collector/receive @apps/receiver
# Set the 10x pipeline to 'run'
tenx: run
# =============================== Dependencies ================================
include:
# Parent module declaring shared forwarder options (outputEncodeField, outputWriteTemplates, encodeObjects)
- run/modules/input/forwarder/module.yaml
- run/modules/input/forwarder/otel-collector/receive/module.yaml
# Read events from OTel Collector via Unix socket with syslog parsing
- run/modules/input/forwarder/otel-collector/input
# Write filtered events back to OTel Collector via Forward protocol
- run/modules/input/forwarder/otel-collector/output/unix
# =============================== Mode Options ================================
# See fluentbit/receive/config.yaml for the full explanation of this dispatch.
outputEncodeField: '$=yield TenXEnv.get("compactReceiverLookupFile") ? "encoded=shouldEncode() ? encode() : fullText" : (TenXEnv.get("receiverOptimize") ? "encoded=encode()" : "fullText")'
outputWriteTemplates: $=yield TenXEnv.get("receiverOptimize", false) || TenXEnv.get("compactReceiverLookupFile", false)
encodeObjects: $=yield TenXEnv.get("receiverOptimize", false) || TenXEnv.get("compactReceiverLookupFile", false)
# ========================= Configuration Options =============================
otelCollector:
# 'outputFields' specifies TenXObject field names to emit alongside the main event.
# When set, enrichment fields are included in the sidecar output for forwarder post-processing.
# Example: outputFields: [level, group, symbolMessage]
outputFields: []
# 'outputEncodeType' controls the output format when outputFields is set.
# Possible values: 'json' or 'delimited'
outputEncodeType: delimited
Options
Specify the options below to configure the OpenTelemetry Collector Receiver:
| Name | Description |
|---|---|
| otelCollectorOutputFields | List of TenXObject field names to include alongside the main event in output |
| otelCollectorOutputEncodeType | Output format when outputFields are set. Possible values: [json, delimited] |
otelCollectorOutputFields
List of TenXObject field names to include alongside the main event in output.
| Type | Default |
|---|---|
| List | [] |
Specifies TenXObject field names to emit alongside the main event text when writing back to the OpenTelemetry Collector forwarder. When empty (default), only the main event field is written. Example fields: level, group, symbolMessage.
otelCollectorOutputEncodeType
Output format when outputFields are set. Possible values: [json, delimited].
| Type | Default |
|---|---|
| String | delimited |
Specifies how the combined output (main event field plus outputFields) is encoded when writing back to the OpenTelemetry Collector forwarder. Possible values:
- json: formats all fields as a JSON object
- delimited: formats field values separated by the output delimiter Only takes effect when otelCollectorOutputFields is set.
This module is defined in receive/module.yaml.