Optimize
Losslessly compact events collected by OpenTelemetry Collector before they ship to output (e.g., ElasticSearch, S3). This module is a component of the Edge Optimizer 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 Optimizer</div><div style='font-size: 10px;'>encode()</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 logs to Log10x via Unix socket (RFC5424 format)
- β‘ 10x Optimizer - Losslessly compacts events to reduce log volume 50-80%
- π Forward Output - Returns COMPACT events via Forward protocol
- π₯ FluentForward Receiver - OTel Collector receives compact events
- π€ Final Exporters - Compact events ship to final destinations at reduced size
Key Characteristics
| Feature | Description |
|---|---|
| π¦ Lossless Compact | Compacts events to reduce log volume 50-80% |
| π Template Extraction | Repetitive structures become reusable templates |
| π° Cost Savings | Reduced storage and transfer costs |
| π Two Pipelines | logs/to-tenx sends original, logs/from-tenx receives compact |
Sidecar Relay
This module configures a Unix socket input/output pair that receives syslog events from OpenTelemetry Collector, losslessly compacts events, and returns compact events via Forward protocol. The sidecar relays compact events back to OTel Collector to ship to outputs (e.g., Splunk, S3).
Install
See the Log10x Edge Optimizer OTel Collector run instructions
Deploy to k8s via Helm
See the Log10x Edge Optimizer OTel Collector deployment instructions
Config Files
To configure the OpenTelemetry Collector optimizer module, Edit these files.
Below is the default configuration from: optimize/config.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJpbmNsdWRlIiA6IHsKICAgICAgInR5cGUiIDogImFycmF5IiwKICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICB9CiAgICB9LAogICAgInRlbngiIDogewogICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgfSwKICAgICJvdGVsQ29sbGVjdG9yIiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJlbmNvZGVPYmplY3RzIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImJvb2xlYW4iLAogICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDb250cm9scyB3aGV0aGVyIGV2ZW50cyB3cml0dGVuIHRvIGFuIE9wZW5UZWxlbWV0cnkgQ29sbGVjdG9yIGZvcndhcmRlciBhcmUgZW5jb2RlZCBvciB3cml0dGVuIGluIHJhdyBmb3JtXG5cblNldHMgdGhlIGZvcm1hdCBpbiB3aGljaCB0byBzZXJpYWxpemUgVGVuWE9iamVjdHMgYmFjayB0byB0aGUgT3BlblRlbGVtZXRyeSBDb2xsZWN0b3IgZm9yd2FyZGVyLiBJZiB0cnVlLCB3cml0ZSBldmVudHMgdXNpbmcgdGhlIFtlbmNvZGVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YT2JqZWN0K2VuY29kZSkgZnVuY3Rpb24uIElmIGZhbHNlLCB3cml0ZSBldmVudHMgaW4gdGhlaXIgb3JpZ2luYWwgZm9ybSBhcyByZWFkIGZyb20gdGhlIE9wZW5UZWxlbWV0cnkgQ29sbGVjdG9yIGZvcndhcmRlciB1c2luZyB0aGUgW2Z1bGxUZXh0XShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9qcy8jVGVuWEJhc2VPYmplY3QrZnVsbFRleHQpIGZpZWxkLiAoQWNjZXB0cyBib29sZWFuIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogdHJ1ZSkiLAogICAgICAgICAgImRlZmF1bHQiIDogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIm91dHB1dEZpZWxkcyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIFRlblhPYmplY3QgZmllbGQgbmFtZXMgdG8gaW5jbHVkZSBhbG9uZ3NpZGUgdGhlIG1haW4gZXZlbnQgaW4gb3V0cHV0XG5cblNwZWNpZmllcyBUZW5YT2JqZWN0IGZpZWxkIG5hbWVzIHRvIGVtaXQgYWxvbmdzaWRlIHRoZSBtYWluIGV2ZW50IHRleHQgd2hlbiB3cml0aW5nIGJhY2sgdG8gdGhlIE9wZW5UZWxlbWV0cnkgQ29sbGVjdG9yIGZvcndhcmRlci4gV2hlbiBlbXB0eSAoZGVmYXVsdCksIG9ubHkgdGhlIG1haW4gZXZlbnQgZmllbGQgaXMgd3JpdHRlbi4gRXhhbXBsZSBmaWVsZHM6IGxldmVsLCBncm91cCwgc3ltYm9sTWVzc2FnZS4gKERlZmF1bHQ6IFtdKSIsCiAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgfSwKICAgICAgICAgICJkZWZhdWx0IiA6IFsgXQogICAgICAgIH0sCiAgICAgICAgIm91dHB1dEVuY29kZVR5cGUiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk91dHB1dCBmb3JtYXQgd2hlbiBvdXRwdXRGaWVsZHMgYXJlIHNldC4gUG9zc2libGUgdmFsdWVzOiBbanNvbiwgZGVsaW1pdGVkXVxuXG5TcGVjaWZpZXMgaG93IHRoZSBjb21iaW5lZCBvdXRwdXQgKG1haW4gZXZlbnQgZmllbGQgcGx1cyBvdXRwdXRGaWVsZHMpIGlzIGVuY29kZWQgd2hlbiB3cml0aW5nIGJhY2sgdG8gdGhlIE9wZW5UZWxlbWV0cnkgQ29sbGVjdG9yIGZvcndhcmRlci4gUG9zc2libGUgdmFsdWVzOiAtICoqanNvbioqOiBmb3JtYXRzIGFsbCBmaWVsZHMgYXMgYSBKU09OIG9iamVjdCAtICoqZGVsaW1pdGVkKio6IGZvcm1hdHMgZmllbGQgdmFsdWVzIHNlcGFyYXRlZCBieSB0aGUgb3V0cHV0IGRlbGltaXRlciBPbmx5IHRha2VzIGVmZmVjdCB3aGVuIG90ZWxDb2xsZWN0b3JPdXRwdXRGaWVsZHMgaXMgc2V0LiAoRGVmYXVsdDogZGVsaW1pdGVkKSIsCiAgICAgICAgICAiZGVmYXVsdCIgOiAiZGVsaW1pdGVkIgogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlCn0=
# πβ 'run' OpenTelemetry Collector optimizer configuration
#
# Configure an input that reads events from OpenTelemetry Collector via syslog
# and an output that writes encoded (optimized) TenXObjects back via Forward protocol.
#
# Architecture:
# OTel Collector --[syslog/unix]--> Log10x Optimizer --[forward/unix]--> OTel Collector --> Final destinations
#
# Events are encoded using 10x-encoding to reduce log volume by 50-80%.
#
# Usage:
# tenx run @run/input/forwarder/otel-collector/optimize @apps/edge/optimizer
# Set the 10x pipeline to 'run'
tenx: run
# =============================== Dependencies ================================
include:
# Include optimizer output options (encodeObjects, outputFields, outputEncodeType)
- run/modules/input/forwarder/otel-collector/optimize/module.yaml
# Read events from OTel Collector via Unix socket with syslog parsing
- run/modules/input/forwarder/otel-collector/input
# Write encoded events back to OTel Collector via Forward protocol
- run/modules/input/forwarder/otel-collector/output/unix
# ========================= Configuration Options =============================
otelCollector:
# Write TenXObjects using encode() function for compression
encodeObjects: true
# 'outputFields' specifies TenXObject field names to emit alongside the encoded 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 optimizer:
| Name | Description |
|---|---|
| otelCollectorEncodeObjects | Controls whether events written to an OpenTelemetry Collector forwarder are encoded or written in raw form |
| 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] |
otelCollectorEncodeObjects
Controls whether events written to an OpenTelemetry Collector forwarder are encoded or written in raw form.
| Type | Default |
|---|---|
| Boolean | true |
Sets the format in which to serialize TenXObjects back to the OpenTelemetry Collector forwarder. If true, write events using the encode function. If false, write events in their original form as read from the OpenTelemetry Collector forwarder using the fullText field.
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 optimize/module.yaml.