Aggregator
Groups TenXObjects by specified field values and generates TenXSummary instances for metric outputs (Prometheus, Datadog, CloudWatch).
How It Works
Each configured aggregator maintains an in-memory table where each row correlates to a unique combination of field values extracted from input TenXObjects.
When the number of TenXObjects upserted into the table exceeds a target threshold (e.g., 1000) or a specified interval (e.g., 2s) elapses, the aggregator creates a TenXSummary instance for each of the table's rows and flushes it to output. Once summaries are flushes, in-memory table is cleared for the next set of TenXObjects to aggregate, and so on.
Workflow
The aggregation process follows these key steps:
graph LR
A["<div style='font-size: 14px;'>📥 Receive</div><div style='font-size: 10px; text-align: center;'>TenXObjects</div>"] --> B["<div style='font-size: 14px;'>🔍 Extract</div><div style='font-size: 10px; text-align: center;'>Field Values</div>"]
B --> C["<div style='font-size: 14px;'>🗃️ Group</div><div style='font-size: 10px; text-align: center;'>In-Memory Table</div>"]
C --> D{"<div style='font-size: 14px;'>⏰ Trigger</div><div style='font-size: 10px; text-align: center;'>Threshold/Interval</div>"}
D -->|Yes| E["<div style='font-size: 14px;'>📊 Generate</div><div style='font-size: 10px; text-align: center;'>TenXSummaries</div>"]
D -->|No| C
E --> F["<div style='font-size: 14px;'>📤 Flush</div><div style='font-size: 10px; text-align: center;'>To Output</div>"]
F --> G["<div style='font-size: 14px;'>🧹 Clear</div><div style='font-size: 10px; text-align: center;'>Table</div>"]
G --> A
classDef receive fill:#7c3aed88,stroke:#6d28d9,color:#ffffff,stroke-width:2px,rx:8,ry:8
classDef extract fill:#9333ea88,stroke:#7c3aed,color:#ffffff,stroke-width:2px,rx:8,ry:8
classDef group fill:#2563eb88,stroke:#1d4ed8,color:#ffffff,stroke-width:2px,rx:8,ry:8
classDef trigger fill:#059669,stroke:#047857,color:#ffffff,stroke-width:2px,rx:8,ry:8
classDef generate fill:#dc2626,stroke:#b91c1c,color:#ffffff,stroke-width:2px,rx:8,ry:8
classDef flush fill:#ea580c88,stroke:#c2410c,color:#ffffff,stroke-width:2px,rx:8,ry:8
classDef clear fill:#7c2d12,stroke:#9a3412,color:#ffffff,stroke-width:2px,rx:8,ry:8
class A receive
class B extract
class C group
class D trigger
class E generate
class F flush
class G clear
📥 Receive TenXObjects: Receives TenXObjects from the processing pipeline
🔍 Extract Field Values: Extracts configured field values from each TenXObject for grouping
🗃️ Group in Table: Maintains in-memory table where rows correspond to unique field value combinations
⏰ Check Triggers: Monitors flush threshold and flush interval conditions
📊 Generate Summaries: Creates TenXSummary instances from each table row when triggered
📤 Flush to Output: Sends TenXSummaries to configured outputs for metric publishing
🧹 Clear Table: Resets in-memory table to begin next aggregation cycle
Grouped Instances
Aggregators operate on grouped instances (e.g., stack traces) as a single logical unit allowing them to be reported collectively vs. aggregating each element. b (e.g., tallying stack traces jointly vs. generating a metric for each separate line) .
Summary Fields
Each generated TenXSummary instance provides access to the following intrinsic fields:
| Field | Description |
|---|---|
| summaryVolume | Number of TenXObjects aggregated into this summary instance |
| summaryBytes | Accumulative number of bytes in the text field value of TenXObjects aggregated into this instance |
| summaryValues | Array of values by which TenXObjects were aggregated into this instance. This value commonly specifies metric tags when writing TenXSummaries to time-series outputs. |
| summaryTotals | The sum values of the aggregatorTotalFields value of TenXObjects aggregated into this instance. This value commonly specifies metric counter values when writing TenXSummaries to time-series outputs. |
| summaryValuesHash | Hash value of the summaryValues field, providing a concise alphanumeric hash representation of the values of TenXObjects aggregated into this TenXSummary instance. |
Configuration
To configure the Aggregator unit, Edit these settings:
Dev
Dev
Below is the default configuration from: dev/config.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYWdncmVnYXRvciIgOiB7CiAgICAgICJ0eXBlIiA6ICJhcnJheSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICJuYW1lIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTG9naWNhbCBuYW1lIG9mIGFnZ3JlZ2F0b3JcblxuUHJvdmlkZXMgYSBsb2dpY2FsIG5hbWUgZm9yIHRoaXMgYWdncmVnYXRvciAoZS5nLiwgJ2Vycm9ycycpLiBUaGlzIHZhbHVlIGlzIGFjY2Vzc2libGUgYXQgcnVuLXRpbWUgdmlhIHRoZSBpbnRyaW5zaWMgJ2lucHV0TmFtZScgZmllbGQgdG8gaWRlbnRpZnkgVGVuWFN1bW1hcmllcyBvcmlnaW5hdGluZyBmcm9tIHRoaXMgYWdncmVnYXRvci4iCiAgICAgICAgICB9LAogICAgICAgICAgImVuYWJsZWQiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJFbmFibGUvZGlzYWJsZSB0aGlzIGFnZ3JlZ2F0b3JcblxuU2V0cyB3aGV0aGVyIHRvIG9wZW4gdGhlIGlucHV0IHN0cmVhbS4gVG8gZW5hYmxlIHRoaXMgaW5wdXQgb25seSB3aGVuIGFuICdhZ2dyZWdhdGVFcnJvcnMnIHN0YXJ0dXAgYXJndW1lbnQgdmFsdWUgaXMgdHJ1dGh5OiAgYGBgIHlhbWwgLi4uIGFnZ3JlZ2F0b3I6ICAgZW5hYmxlZDogJD1UZW5YRW52LmdldChcImFnZ3JlZ2F0ZUVycm9yc1wiKSBgYGAgKERlZmF1bHQ6IHRydWUpIiwKICAgICAgICAgICAgImRlZmF1bHQiIDogInRydWUiCiAgICAgICAgICB9LAogICAgICAgICAgImZpZWxkcyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAiYXJyYXkiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIGZpZWxkIG5hbWVzIGJ5IHdoaWNoIHRvIGFnZ3JlZ2F0ZSBUZW5YT2JqZWN0c1xuXG5Qcm92aWRlcyBhIGxpc3Qgb2YgaW50cmluc2ljL2V4dHJhY3RlZC9jYWxjdWxhdGVkIFtUZW5YT2JqZWN0XShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9qcy8jVGVuWE9iamVjdCkgZmllbGQgbmFtZXMgYnkgd2hpY2ggdG8gYWdncmVnYXRlIGluc3RhbmNlcy4gIFdoZW4gdGhlIGFnZ3JlZ2F0b3IgZmx1c2hlcyB0aGUgaW4tbWVtIHRhYmxlIHRvIHByb2R1Y2VkIFRlblhTdW1tYXJpZXMsIGVhY2ggZ2VuZXJhdGVkIFRlblhTdW1tYXJ5IGluc3RhbmNlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgdG90YWwgdmFsdWVzIHZpYSBpdHMgW3N1bW1hcnlUb3RhbHNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YU3VtbWFyeStzdW1tYXJ5VmFsdWVzKSBhcnJheSBmaWVsZC4iLAogICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiZGVmYXVsdFZhbHVlIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQSBjb25zdGFudCB2YWx1ZSB0byBkZWZhdWx0IGlmICdtYXhDYXJkaW5hbGl0eScgaXMgZXhjZWVkZWRcblxuRGVmaW5lcyBhIGNvbnN0YW50IHZhbHVlIHRvIHVzZSBpbnN0ZWFkIG9mIFtmaWVsZCB2YWx1ZXNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZpZWxkcykgd2hlbiB0aGUgY3VycmVudCBudW1iZXIgb2Ygcm93cyB3aXRoaW4gdGhlIGFnZ3JlZ2F0b3IncyBpbi1tZW0gdGFibGUgZHVyaW5nIFtmbHVzaEludGVydmFsXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaGludGVydmFsKSBleGNlZWRzIFttYXhDYXJkaW5hbGl0eV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vYWdncmVnYXRlLyNhZ2dyZWdhdG9ybWF4Y2FyZGluYWxpdHkpLiAgVGhpcyB2YWx1ZSBwcmV2ZW50cyBhbiBvdXQtb2YtbWVtIGVycm9yIGlmIFRlblhPYmplY3RzIHdob3NlIFtmaWVsZCB2YWx1ZXNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZpZWxkcykgYXJlIG9mIGhpZ2ggY2FyZGluYWxpdHksIHdoaWNoIGNhbiBjYXVzZSB0aGUgaW4tbWVtIHRhYmxlIHRvIGdyb3cgYmV5b25kIHRoZSBjb25maW5lcyBvZiB0aGUgaG9zdCBKVk0gaGVhcC4gIFRoaXMgZXJyb3IgaXMgcG9zc2libGUgaWYgW2ZpZWxkc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vYWdncmVnYXRlLyNhZ2dyZWdhdG9yZmllbGRzKSBjb250YWlucyBhIGNhbGN1bGF0ZWQvZXh0cmFjdGVkIGZpZWxkIHdob3NlIHZhbHVlIGlzIGFscGhhbnVtZXJpYyAoZS5nLiwgJ3NwYW5JRCcpIGFuZCBpcyBwcmFjdGljYWxseSB1bmlxdWUgdG8gZWFjaCBUZW5YT2JqZWN0LiIKICAgICAgICAgIH0sCiAgICAgICAgICAidG90YWxGaWVsZHMiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgZmllbGRzIHdob3NlIHZhbHVlcyB0byB0YWxseSBpbnRvIGdlbmVyYXRlZCBUZW5YU3VtbWFyaWVzXG5cblNwZWNpZmllcyBhIGxpc3Qgb2YgaW50cmluc2ljIGNhbGN1bGF0ZWQvZXh0cmFjdGVkIFRlblhPYmplY3QgZmllbGQgbmFtZXMgdG8gdGFsbHkgYW5kIHdyaXRlIGludG8gYWdncmVnYXRlZCBUZW5YU3VtbWFyeSBpbnN0YW5jZXMgd2l0aGluIGEgdGFyZ2V0IGZsdXNoICBbdGhyZXNob2xkXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaHRocmVzaG9sZCkgb3IgW2ludGVydmFsXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaGludGVydmFsKS4gIEZvciBleGFtcGxlLCBzZXR0aW5nIGEgdmFsdWUgb2Y6IGBwcmljZWAgaW50byB0aGlzIGFycmF5IHdpbGwgdGFsbHkgdGhlIHByaWNlcyBvZiBhbGwgVGVuWE9iamVjdHMgYWdncmVnYXRlZCBpbnRvIGEgdGFyZ2V0IG91dHB1dCBUZW5YU3VtbWFyeSBpbnN0YW5jZS4gICBBIG1hdGNoaW5nIGBwcmljZWAgdmFsdWUgY29udGFpbmluZyB0aGUgc3VtIG9mIGFnZ3JlZ2F0ZWQgcHJpY2VzIHdpbGwgYmUgYWNjZXNzaWJsZSBmb3IgZWFjaCBUZW5YU3VtbWFyeSBpbnN0YW5jZSB2aWEgaXRzICBbc3VtbWFyeVRvdGFsc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhTdW1tYXJ5K3N1bW1hcnlUb3RhbHMpIGFycmF5LiIsCiAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJtYXhDYXJkaW5hbGl0eSIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTWF4IG51bWJlciBvZiBjb25jdXJyZW50IHJvd3Mgd2l0aGluIHRoZSBhZ2dyZWdhdG9yIGluLW1lbSB0YWJsZSB3aXRoaW4gdGhlIGZsdXNoIGludGVydmFsXG5cblNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHVuaXF1ZSByb3dzIHdpdGhpbiB0aGUgYWdncmVnYXRvcidzIGluLW1lbSB0YWJsZS4gSWYgdGhlIG51bWJlciBvZiByb3dzIGV4Y2VlZHMgdGhpcyB2YWx1ZSBkdXJpbmcgW2ZsdXNoSW50ZXJ2YWxdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZsdXNoaW50ZXJ2YWwpICwgdGhlICdhZ2dyZWdhdG9yRGVmYXVsdFZhbHVlJyB2YWx1ZSB3aWxsIGJlIGZvciBhbGwgVGVuWE9iamVjdHMgaW5zdGVhZCBvZiBbZmllbGQgdmFsdWVzXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmaWVsZHMpIHVudGlsIHRoZSBhZ2dyZWdhdG9yIGlzIGZsdXNoZWQuICBUaGlzIHZhbHVlIGlzIHVzZWQgYXMgYSBiYWNrc3RvcCB0byBlbnN1cmUgdGhhdCB0aGUgYWdncmVnYXRvcidzIGluLW1lbSB0YWJsZSBkb2VzIG5vdCBvdmVyZmxvdyB3aGVuIGV4dHJhY3RpbmcgYW5kICBhZ2dyZWdhdGluZyB2ZXJ5IGhpZ2ggY2FyZGluYWxpdHkgdmFsdWVzIGZyb20gdGhlIGZpZWxkcyBvZiBUZW5YT2JqZWN0cyBwYXNzZWQgdG8gdGhpcyBhZ2dyZWdhdG9yLiAgSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQgb3Igc2V0IHRvIDAsIHRoZSBhZ2dyZWdhdG9yIGhhcyBubyBjYXAuIFRoaXMgbWF5IHJlc3VsdCBpbiBhbiBvdXQtb2YtbWVtIGVycm9yIHdoZW4gdmVyeSBoaWdoIGNhcmRpbmFsaXR5IChlLmcuLCAnc3BhbklEJywgJ0dVSUQnKSBbZmllbGRzXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmaWVsZHMpIGFyZSBzcGVjaWZpZWQuIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICB9LAogICAgICAgICAgImZpbHRlciIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkEgSmF2YVNjcmlwdCBleHByZXNzaW9uIGFuIFRlblhPYmplY3QgbXVzdCBldmFsdWF0ZSBhcyAndHJ1dGh5JyBhZ2FpbnN0IHRvIGJlIGFnZ3JlZ2F0ZWRcblxuUHJvdmlkZXMgYSB3YXkgdG8gY29udHJvbCB3aGljaCBUZW5YT2JqZWN0cyBhcmUgaW5jb3Jwb3JhdGVkIGludG8gdGhpcyBhZ2dyZWdhdG9yLiBVbmxpa2UgdGhlICdhZ2dyZWdhdG9yRW5hYmxlZCcsIHdoaWNoIGVuYWJsZXMvZGlzYWJsZXMgdGhpcyBhZ2dyZWdhdG9yIGFsdG9nZXRoZXIsIHRoaXMgSmF2YVNjcmlwdCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBwZXIgVGVuWE9iamVjdCB0byBwcm92aWRlIGdyYW51bGFyIGNvbnRyb2wgb3ZlciB3aGF0IGluZm9ybWF0aW9uIHRvIGFnZ3JlZ2F0ZS4gIEZvciBleGFtcGxlLCB0byBvbmx5IGFnZ3JlZ2F0ZSBUZW5YT2JqZWN0cyByZWFkIGZyb20gYSBzcGVjaWZpZWQgaW5wdXQ6ICBgYGAgeWFtbCBhZ2dyZWdhdG9yOiAgIGZpbHRlcjogdGhpcy5pbnB1dE5hbWUgPT0gXCJlbGFzdGljXCIgYGBgICBUbyBhcHBseSBtb3JlIGNvbXBsZXggbG9naWMsIGludm9rZSBhbiAxMHggSmF2YVNjcmlwdCBmdW5jdGlvbiBkZWNsYXJlZCBpbiBhIC5qcyBmaWxlIGJ5IHBhc3NpbmcgaXQgdG8gdGhlIDEweCBFbmdpbmUgYXQgc3RhcnR1cCAoZS5nLiwgJCB0ZW54IHJ1biBAbXkuanMpLiAgYGBgIHlhbWwgYWdncmVnYXRvcjogICAuLi4gICBmaWx0ZXI6IG15QWdncmVnYXRvckZpbHRlcigpIGBgYCAgRm9yIGFuIGV4YW1wbGUgZnVuY3Rpb24sIHNlZSBbcG9saWN5LXJlZ3VsYXRvci1vYmplY3QuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L21vZHVsZXMvYmxvYi9tYWluL3BpcGVsaW5lcy9ydW4vbW9kdWxlcy9yZWd1bGF0ZS9wb2xpY3kvcG9saWN5LXJlZ3VsYXRvci1vYmplY3QuanMpLiIKICAgICAgICAgIH0sCiAgICAgICAgICAiZmx1c2hUaHJlc2hvbGQiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgIm51bWJlciIsCiAgICAgICAgICAgICAgInN0cmluZyIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1heGltdW0gdGhlIG51bWJlciBvZiBUZW5YT2JqZWN0cyB0byBhZ2dyZWdhdGUgYmVmb3JlIHRoZSBhZ2dyZWdhdG9yIGZsdXNoZXNcblxuQ29udHJvbHMgaG93IG1hbnkgVGVuWE9iamVjdHMgdG8gdXBzZXJ0IGludG8gdGhpcyBhZ2dyZWdhdG9yIChlLmcuLCAxMDAwMCkgYmVmb3JlIHRoZSBhZ2dyZWdhdG9yIHRyYW5zZm9ybXMgdGhlIHJvd3Mgb2YgaXRzIGluLW1lbSB0YWJsZSBpbnRvIFRlblhTdW1tYXJpZXMgaW5zdGFuY2VzIGFuZCBmbHVzaGVzIHRoZW0gaW50byB0aGUgcGlwZWxpbmUuICBJZiBub3Qgc2V0LCB0aGUgW2ZsdXNoSW50ZXJ2YWxdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZsdXNoaW50ZXJ2YWwpIGFyZ3VtZW50IGRldGVybWluZXMgd2hlbiB0byBmbHVzaCB0aGUgYWdncmVnYXRvci4gSWYgbmVpdGhlciBhcmd1bWVudCBpcyBwcmVzZW50LCB0aGUgYWdncmVnYXRvciBvbmx5IGZsdXNoZXMgcGVuZGluZyBUZW5YU3VtbWFyaWVzIHdoZW4gdGhlIHBpcGVsaW5lIHRlcm1pbmF0ZXMuIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICB9LAogICAgICAgICAgImZsdXNoSW50ZXJ2YWwiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJJbnRlcnZhbCB0byB3YWl0IGJlZm9yZSB0aGUgYWdncmVnYXRvciBmbHVzaGVzXG5cblNldHMgdGhlIHBlcmlvZCAoZS5nLiwgJzMwcycpLCBhZnRlciB3aGljaCB0aGUgYWdncmVnYXRvciB0cmFuc2Zvcm1zIHRoZSByb3dzIG9mIGl0cyBpbi1tZW0gdGFibGUgaW50byBUZW5YU3VtbWFyaWVzIGluc3RhbmNlcyBhbmQgZmx1c2hlcyB0aGVtIGludG8gdGhlIHBpcGVsaW5lLiAgSWYgc2V0LCB0aGUgW2ZsdXNoVGhyZXNob2xkXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaHRocmVzaG9sZCkgIGFyZ3VtZW50IGRldGVybWluZXMgd2hlbiB0byBmbHVzaCB0aGUgYWdncmVnYXRvci4gSWYgbmVpdGhlciBhcmd1bWVudCBpcyBwcmVzZW50LCB0aGUgYWdncmVnYXRvciBvbmx5IGZsdXNoZXMgcGVuZGluZyBUZW5YU3VtbWFyaWVzIHdoZW4gdGhlIHBpcGVsaW5lIHRlcm1pbmF0ZXMuIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmVkIiA6IFsKICAgICAgICAgICJuYW1lIiwKICAgICAgICAgICJmaWVsZHMiCiAgICAgICAgXQogICAgICB9CiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'run' dev app aggregator config
# This file configures aggregators for the dev app.
# To learn more see https://doc.log10x.com/run/aggregate/
# Set the 10x pipeline to 'run'
tenx: run
# ============================== Aggregator Options ===========================
# Multiple aggregators can be defined below
aggregator:
- name: devAggregator
# 'filter' sets a JavaScript expression that TenXObjects must evaluate as truthy to be aggregated.
# To learn more see https://doc.log10x.com/run/output/regulate/#filter-expressions
filter: null
# 'fields' set the names of intrinsic/extracted/calculated fields whose combined values
# identify a unique row within the aggregator's in-mem table for
# each object passed to it. This aggregator defaults to enrichment fields.
# To learn more see https://doc.log10x.com/run/initialize/#enrichmentFields
fields:
- $=yield TenXEnv.get("enrichmentFields")
# 'totalFields' specifies fields to extract and tally into generated TenXSummaries
totalFields: []
# 'flushThreshold' sets the max number of TenXObjects whose values to upsert into
# the aggregator's in-mem table. Once exceeded, the aggregator instantiates TenXSummaries
# from the table rows to send to output and reset the table.
flushThreshold: 0
# 'flushInterval' sets a periodic interval, after which the aggregator
# flushes the rows of its in-mem table into the pipeline as TenXSummary instances.
flushInterval: null
# 'maxCardinality' sets the maximum number of rows for the aggregator's
# in-mem table. If an TenXObjects whose 'values' are not contained in the table
# is passed to the aggregator, 'defaultValue' will be used for it instead
# until the aggregator flushes its in-mem table after 'flushInterval' or 'flushThreshold'
# are exceeded.
maxCardinality: 65536
# 'defaultValue' sets a constant value that is used instead of 'values' when
# 'maxCardinality' is exceeded within 'flushInterval'
defaultValue: unknown
Report
Report
Below is the default configuration from: report/config.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYWdncmVnYXRvciIgOiB7CiAgICAgICJ0eXBlIiA6ICJhcnJheSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICJuYW1lIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTG9naWNhbCBuYW1lIG9mIGFnZ3JlZ2F0b3JcblxuUHJvdmlkZXMgYSBsb2dpY2FsIG5hbWUgZm9yIHRoaXMgYWdncmVnYXRvciAoZS5nLiwgJ2Vycm9ycycpLiBUaGlzIHZhbHVlIGlzIGFjY2Vzc2libGUgYXQgcnVuLXRpbWUgdmlhIHRoZSBpbnRyaW5zaWMgJ2lucHV0TmFtZScgZmllbGQgdG8gaWRlbnRpZnkgVGVuWFN1bW1hcmllcyBvcmlnaW5hdGluZyBmcm9tIHRoaXMgYWdncmVnYXRvci4iCiAgICAgICAgICB9LAogICAgICAgICAgImVuYWJsZWQiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJFbmFibGUvZGlzYWJsZSB0aGlzIGFnZ3JlZ2F0b3JcblxuU2V0cyB3aGV0aGVyIHRvIG9wZW4gdGhlIGlucHV0IHN0cmVhbS4gVG8gZW5hYmxlIHRoaXMgaW5wdXQgb25seSB3aGVuIGFuICdhZ2dyZWdhdGVFcnJvcnMnIHN0YXJ0dXAgYXJndW1lbnQgdmFsdWUgaXMgdHJ1dGh5OiAgYGBgIHlhbWwgLi4uIGFnZ3JlZ2F0b3I6ICAgZW5hYmxlZDogJD1UZW5YRW52LmdldChcImFnZ3JlZ2F0ZUVycm9yc1wiKSBgYGAgKERlZmF1bHQ6IHRydWUpIiwKICAgICAgICAgICAgImRlZmF1bHQiIDogInRydWUiCiAgICAgICAgICB9LAogICAgICAgICAgImZpZWxkcyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAiYXJyYXkiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIGZpZWxkIG5hbWVzIGJ5IHdoaWNoIHRvIGFnZ3JlZ2F0ZSBUZW5YT2JqZWN0c1xuXG5Qcm92aWRlcyBhIGxpc3Qgb2YgaW50cmluc2ljL2V4dHJhY3RlZC9jYWxjdWxhdGVkIFtUZW5YT2JqZWN0XShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9qcy8jVGVuWE9iamVjdCkgZmllbGQgbmFtZXMgYnkgd2hpY2ggdG8gYWdncmVnYXRlIGluc3RhbmNlcy4gIFdoZW4gdGhlIGFnZ3JlZ2F0b3IgZmx1c2hlcyB0aGUgaW4tbWVtIHRhYmxlIHRvIHByb2R1Y2VkIFRlblhTdW1tYXJpZXMsIGVhY2ggZ2VuZXJhdGVkIFRlblhTdW1tYXJ5IGluc3RhbmNlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgdG90YWwgdmFsdWVzIHZpYSBpdHMgW3N1bW1hcnlUb3RhbHNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YU3VtbWFyeStzdW1tYXJ5VmFsdWVzKSBhcnJheSBmaWVsZC4iLAogICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiZGVmYXVsdFZhbHVlIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQSBjb25zdGFudCB2YWx1ZSB0byBkZWZhdWx0IGlmICdtYXhDYXJkaW5hbGl0eScgaXMgZXhjZWVkZWRcblxuRGVmaW5lcyBhIGNvbnN0YW50IHZhbHVlIHRvIHVzZSBpbnN0ZWFkIG9mIFtmaWVsZCB2YWx1ZXNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZpZWxkcykgd2hlbiB0aGUgY3VycmVudCBudW1iZXIgb2Ygcm93cyB3aXRoaW4gdGhlIGFnZ3JlZ2F0b3IncyBpbi1tZW0gdGFibGUgZHVyaW5nIFtmbHVzaEludGVydmFsXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaGludGVydmFsKSBleGNlZWRzIFttYXhDYXJkaW5hbGl0eV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vYWdncmVnYXRlLyNhZ2dyZWdhdG9ybWF4Y2FyZGluYWxpdHkpLiAgVGhpcyB2YWx1ZSBwcmV2ZW50cyBhbiBvdXQtb2YtbWVtIGVycm9yIGlmIFRlblhPYmplY3RzIHdob3NlIFtmaWVsZCB2YWx1ZXNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZpZWxkcykgYXJlIG9mIGhpZ2ggY2FyZGluYWxpdHksIHdoaWNoIGNhbiBjYXVzZSB0aGUgaW4tbWVtIHRhYmxlIHRvIGdyb3cgYmV5b25kIHRoZSBjb25maW5lcyBvZiB0aGUgaG9zdCBKVk0gaGVhcC4gIFRoaXMgZXJyb3IgaXMgcG9zc2libGUgaWYgW2ZpZWxkc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vYWdncmVnYXRlLyNhZ2dyZWdhdG9yZmllbGRzKSBjb250YWlucyBhIGNhbGN1bGF0ZWQvZXh0cmFjdGVkIGZpZWxkIHdob3NlIHZhbHVlIGlzIGFscGhhbnVtZXJpYyAoZS5nLiwgJ3NwYW5JRCcpIGFuZCBpcyBwcmFjdGljYWxseSB1bmlxdWUgdG8gZWFjaCBUZW5YT2JqZWN0LiIKICAgICAgICAgIH0sCiAgICAgICAgICAidG90YWxGaWVsZHMiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgZmllbGRzIHdob3NlIHZhbHVlcyB0byB0YWxseSBpbnRvIGdlbmVyYXRlZCBUZW5YU3VtbWFyaWVzXG5cblNwZWNpZmllcyBhIGxpc3Qgb2YgaW50cmluc2ljIGNhbGN1bGF0ZWQvZXh0cmFjdGVkIFRlblhPYmplY3QgZmllbGQgbmFtZXMgdG8gdGFsbHkgYW5kIHdyaXRlIGludG8gYWdncmVnYXRlZCBUZW5YU3VtbWFyeSBpbnN0YW5jZXMgd2l0aGluIGEgdGFyZ2V0IGZsdXNoICBbdGhyZXNob2xkXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaHRocmVzaG9sZCkgb3IgW2ludGVydmFsXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaGludGVydmFsKS4gIEZvciBleGFtcGxlLCBzZXR0aW5nIGEgdmFsdWUgb2Y6IGBwcmljZWAgaW50byB0aGlzIGFycmF5IHdpbGwgdGFsbHkgdGhlIHByaWNlcyBvZiBhbGwgVGVuWE9iamVjdHMgYWdncmVnYXRlZCBpbnRvIGEgdGFyZ2V0IG91dHB1dCBUZW5YU3VtbWFyeSBpbnN0YW5jZS4gICBBIG1hdGNoaW5nIGBwcmljZWAgdmFsdWUgY29udGFpbmluZyB0aGUgc3VtIG9mIGFnZ3JlZ2F0ZWQgcHJpY2VzIHdpbGwgYmUgYWNjZXNzaWJsZSBmb3IgZWFjaCBUZW5YU3VtbWFyeSBpbnN0YW5jZSB2aWEgaXRzICBbc3VtbWFyeVRvdGFsc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhTdW1tYXJ5K3N1bW1hcnlUb3RhbHMpIGFycmF5LiIsCiAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJtYXhDYXJkaW5hbGl0eSIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTWF4IG51bWJlciBvZiBjb25jdXJyZW50IHJvd3Mgd2l0aGluIHRoZSBhZ2dyZWdhdG9yIGluLW1lbSB0YWJsZSB3aXRoaW4gdGhlIGZsdXNoIGludGVydmFsXG5cblNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHVuaXF1ZSByb3dzIHdpdGhpbiB0aGUgYWdncmVnYXRvcidzIGluLW1lbSB0YWJsZS4gSWYgdGhlIG51bWJlciBvZiByb3dzIGV4Y2VlZHMgdGhpcyB2YWx1ZSBkdXJpbmcgW2ZsdXNoSW50ZXJ2YWxdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZsdXNoaW50ZXJ2YWwpICwgdGhlICdhZ2dyZWdhdG9yRGVmYXVsdFZhbHVlJyB2YWx1ZSB3aWxsIGJlIGZvciBhbGwgVGVuWE9iamVjdHMgaW5zdGVhZCBvZiBbZmllbGQgdmFsdWVzXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmaWVsZHMpIHVudGlsIHRoZSBhZ2dyZWdhdG9yIGlzIGZsdXNoZWQuICBUaGlzIHZhbHVlIGlzIHVzZWQgYXMgYSBiYWNrc3RvcCB0byBlbnN1cmUgdGhhdCB0aGUgYWdncmVnYXRvcidzIGluLW1lbSB0YWJsZSBkb2VzIG5vdCBvdmVyZmxvdyB3aGVuIGV4dHJhY3RpbmcgYW5kICBhZ2dyZWdhdGluZyB2ZXJ5IGhpZ2ggY2FyZGluYWxpdHkgdmFsdWVzIGZyb20gdGhlIGZpZWxkcyBvZiBUZW5YT2JqZWN0cyBwYXNzZWQgdG8gdGhpcyBhZ2dyZWdhdG9yLiAgSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQgb3Igc2V0IHRvIDAsIHRoZSBhZ2dyZWdhdG9yIGhhcyBubyBjYXAuIFRoaXMgbWF5IHJlc3VsdCBpbiBhbiBvdXQtb2YtbWVtIGVycm9yIHdoZW4gdmVyeSBoaWdoIGNhcmRpbmFsaXR5IChlLmcuLCAnc3BhbklEJywgJ0dVSUQnKSBbZmllbGRzXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmaWVsZHMpIGFyZSBzcGVjaWZpZWQuIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICB9LAogICAgICAgICAgImZpbHRlciIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkEgSmF2YVNjcmlwdCBleHByZXNzaW9uIGFuIFRlblhPYmplY3QgbXVzdCBldmFsdWF0ZSBhcyAndHJ1dGh5JyBhZ2FpbnN0IHRvIGJlIGFnZ3JlZ2F0ZWRcblxuUHJvdmlkZXMgYSB3YXkgdG8gY29udHJvbCB3aGljaCBUZW5YT2JqZWN0cyBhcmUgaW5jb3Jwb3JhdGVkIGludG8gdGhpcyBhZ2dyZWdhdG9yLiBVbmxpa2UgdGhlICdhZ2dyZWdhdG9yRW5hYmxlZCcsIHdoaWNoIGVuYWJsZXMvZGlzYWJsZXMgdGhpcyBhZ2dyZWdhdG9yIGFsdG9nZXRoZXIsIHRoaXMgSmF2YVNjcmlwdCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBwZXIgVGVuWE9iamVjdCB0byBwcm92aWRlIGdyYW51bGFyIGNvbnRyb2wgb3ZlciB3aGF0IGluZm9ybWF0aW9uIHRvIGFnZ3JlZ2F0ZS4gIEZvciBleGFtcGxlLCB0byBvbmx5IGFnZ3JlZ2F0ZSBUZW5YT2JqZWN0cyByZWFkIGZyb20gYSBzcGVjaWZpZWQgaW5wdXQ6ICBgYGAgeWFtbCBhZ2dyZWdhdG9yOiAgIGZpbHRlcjogdGhpcy5pbnB1dE5hbWUgPT0gXCJlbGFzdGljXCIgYGBgICBUbyBhcHBseSBtb3JlIGNvbXBsZXggbG9naWMsIGludm9rZSBhbiAxMHggSmF2YVNjcmlwdCBmdW5jdGlvbiBkZWNsYXJlZCBpbiBhIC5qcyBmaWxlIGJ5IHBhc3NpbmcgaXQgdG8gdGhlIDEweCBFbmdpbmUgYXQgc3RhcnR1cCAoZS5nLiwgJCB0ZW54IHJ1biBAbXkuanMpLiAgYGBgIHlhbWwgYWdncmVnYXRvcjogICAuLi4gICBmaWx0ZXI6IG15QWdncmVnYXRvckZpbHRlcigpIGBgYCAgRm9yIGFuIGV4YW1wbGUgZnVuY3Rpb24sIHNlZSBbcG9saWN5LXJlZ3VsYXRvci1vYmplY3QuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L21vZHVsZXMvYmxvYi9tYWluL3BpcGVsaW5lcy9ydW4vbW9kdWxlcy9yZWd1bGF0ZS9wb2xpY3kvcG9saWN5LXJlZ3VsYXRvci1vYmplY3QuanMpLiIKICAgICAgICAgIH0sCiAgICAgICAgICAiZmx1c2hUaHJlc2hvbGQiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgIm51bWJlciIsCiAgICAgICAgICAgICAgInN0cmluZyIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1heGltdW0gdGhlIG51bWJlciBvZiBUZW5YT2JqZWN0cyB0byBhZ2dyZWdhdGUgYmVmb3JlIHRoZSBhZ2dyZWdhdG9yIGZsdXNoZXNcblxuQ29udHJvbHMgaG93IG1hbnkgVGVuWE9iamVjdHMgdG8gdXBzZXJ0IGludG8gdGhpcyBhZ2dyZWdhdG9yIChlLmcuLCAxMDAwMCkgYmVmb3JlIHRoZSBhZ2dyZWdhdG9yIHRyYW5zZm9ybXMgdGhlIHJvd3Mgb2YgaXRzIGluLW1lbSB0YWJsZSBpbnRvIFRlblhTdW1tYXJpZXMgaW5zdGFuY2VzIGFuZCBmbHVzaGVzIHRoZW0gaW50byB0aGUgcGlwZWxpbmUuICBJZiBub3Qgc2V0LCB0aGUgW2ZsdXNoSW50ZXJ2YWxdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZsdXNoaW50ZXJ2YWwpIGFyZ3VtZW50IGRldGVybWluZXMgd2hlbiB0byBmbHVzaCB0aGUgYWdncmVnYXRvci4gSWYgbmVpdGhlciBhcmd1bWVudCBpcyBwcmVzZW50LCB0aGUgYWdncmVnYXRvciBvbmx5IGZsdXNoZXMgcGVuZGluZyBUZW5YU3VtbWFyaWVzIHdoZW4gdGhlIHBpcGVsaW5lIHRlcm1pbmF0ZXMuIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICB9LAogICAgICAgICAgImZsdXNoSW50ZXJ2YWwiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJJbnRlcnZhbCB0byB3YWl0IGJlZm9yZSB0aGUgYWdncmVnYXRvciBmbHVzaGVzXG5cblNldHMgdGhlIHBlcmlvZCAoZS5nLiwgJzMwcycpLCBhZnRlciB3aGljaCB0aGUgYWdncmVnYXRvciB0cmFuc2Zvcm1zIHRoZSByb3dzIG9mIGl0cyBpbi1tZW0gdGFibGUgaW50byBUZW5YU3VtbWFyaWVzIGluc3RhbmNlcyBhbmQgZmx1c2hlcyB0aGVtIGludG8gdGhlIHBpcGVsaW5lLiAgSWYgc2V0LCB0aGUgW2ZsdXNoVGhyZXNob2xkXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaHRocmVzaG9sZCkgIGFyZ3VtZW50IGRldGVybWluZXMgd2hlbiB0byBmbHVzaCB0aGUgYWdncmVnYXRvci4gSWYgbmVpdGhlciBhcmd1bWVudCBpcyBwcmVzZW50LCB0aGUgYWdncmVnYXRvciBvbmx5IGZsdXNoZXMgcGVuZGluZyBUZW5YU3VtbWFyaWVzIHdoZW4gdGhlIHBpcGVsaW5lIHRlcm1pbmF0ZXMuIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmVkIiA6IFsKICAgICAgICAgICJuYW1lIiwKICAgICAgICAgICJmaWVsZHMiCiAgICAgICAgXQogICAgICB9CiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'run' aggregator config for the reporter app.
# This file configures aggregators for tracking emitted (non-dropped) events.
# To learn more see https://doc.log10x.com/run/aggregate
# Set the 10x pipeline to 'run'
tenx: run
# ============================== Aggregator Options ===========================
# Multiple aggregators can be defined below
aggregator:
# Defines an aggregator for tracking emitted (non-dropped) events
# This enables an output metric to show an accurate (lossless) metric of the
# data actually emitted to downstream systems.
- name: emitted_events
# 'filter' sets a JavaScript expression that TenXObjects must evaluate as truthy to be aggregated.
# To learn more see https://doc.log10x.com/run/output/regulate/#filter-expressions
#
# This filter excludes dropped events by checking the 'isDropped' property,
# ensuring only emitted events are tracked.
#
# For more info, see https://doc.log10x.com/api/js/#TenXBaseObject+dropped
filter: "this.isObject && !this.isDropped"
# 'fields' set the names of intrinsic/extracted/calculated fields whose combined values
# identify a unique row within the aggregator's in-mem table for
# each object passed to it. This aggregator defaults to enrichment fields.
# To learn more see https://doc.log10x.com/run/initialize/#enrichmentFields
fields:
- $=yield TenXEnv.get("enrichmentFields")
# 'totalFields' specifies fields to extract and tally into generated TenXSummaries
totalFields: []
# 'flushThreshold' sets the max number of TenXObjects whose values to upsert into
# the aggregator's in-mem table. Once exceeded, the aggregator instantiates TenXSummaries
# from the table rows to send to output and reset the table.
flushThreshold: 10000
# 'flushInterval' sets a periodic interval, after which the aggregator
# flushes the rows of its in-mem table into the pipeline as TenXSummary instances.
flushInterval: 2s
# 'maxCardinality' sets the maximum number of rows for the aggregator's
# in-mem table. If an TenXObjects whose 'values' are not contained in the table
# is passed to the aggregator, 'defaultValue' will be used for it instead
# until the aggregator flushes its in-mem table after 'flushInterval' or 'flushThreshold'
# are exceeded.
maxCardinality: 65536
# 'defaultValue' sets a constant value that is used instead of 'values' when
# 'maxCardinality' is exceeded within 'flushInterval'
defaultValue: unknown
Regulate
Regulate
Below is the default configuration from: regulate/config.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYWdncmVnYXRvciIgOiB7CiAgICAgICJ0eXBlIiA6ICJhcnJheSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICJuYW1lIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTG9naWNhbCBuYW1lIG9mIGFnZ3JlZ2F0b3JcblxuUHJvdmlkZXMgYSBsb2dpY2FsIG5hbWUgZm9yIHRoaXMgYWdncmVnYXRvciAoZS5nLiwgJ2Vycm9ycycpLiBUaGlzIHZhbHVlIGlzIGFjY2Vzc2libGUgYXQgcnVuLXRpbWUgdmlhIHRoZSBpbnRyaW5zaWMgJ2lucHV0TmFtZScgZmllbGQgdG8gaWRlbnRpZnkgVGVuWFN1bW1hcmllcyBvcmlnaW5hdGluZyBmcm9tIHRoaXMgYWdncmVnYXRvci4iCiAgICAgICAgICB9LAogICAgICAgICAgImVuYWJsZWQiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJFbmFibGUvZGlzYWJsZSB0aGlzIGFnZ3JlZ2F0b3JcblxuU2V0cyB3aGV0aGVyIHRvIG9wZW4gdGhlIGlucHV0IHN0cmVhbS4gVG8gZW5hYmxlIHRoaXMgaW5wdXQgb25seSB3aGVuIGFuICdhZ2dyZWdhdGVFcnJvcnMnIHN0YXJ0dXAgYXJndW1lbnQgdmFsdWUgaXMgdHJ1dGh5OiAgYGBgIHlhbWwgLi4uIGFnZ3JlZ2F0b3I6ICAgZW5hYmxlZDogJD1UZW5YRW52LmdldChcImFnZ3JlZ2F0ZUVycm9yc1wiKSBgYGAgKERlZmF1bHQ6IHRydWUpIiwKICAgICAgICAgICAgImRlZmF1bHQiIDogInRydWUiCiAgICAgICAgICB9LAogICAgICAgICAgImZpZWxkcyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAiYXJyYXkiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIGZpZWxkIG5hbWVzIGJ5IHdoaWNoIHRvIGFnZ3JlZ2F0ZSBUZW5YT2JqZWN0c1xuXG5Qcm92aWRlcyBhIGxpc3Qgb2YgaW50cmluc2ljL2V4dHJhY3RlZC9jYWxjdWxhdGVkIFtUZW5YT2JqZWN0XShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9qcy8jVGVuWE9iamVjdCkgZmllbGQgbmFtZXMgYnkgd2hpY2ggdG8gYWdncmVnYXRlIGluc3RhbmNlcy4gIFdoZW4gdGhlIGFnZ3JlZ2F0b3IgZmx1c2hlcyB0aGUgaW4tbWVtIHRhYmxlIHRvIHByb2R1Y2VkIFRlblhTdW1tYXJpZXMsIGVhY2ggZ2VuZXJhdGVkIFRlblhTdW1tYXJ5IGluc3RhbmNlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgdG90YWwgdmFsdWVzIHZpYSBpdHMgW3N1bW1hcnlUb3RhbHNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YU3VtbWFyeStzdW1tYXJ5VmFsdWVzKSBhcnJheSBmaWVsZC4iLAogICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiZGVmYXVsdFZhbHVlIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQSBjb25zdGFudCB2YWx1ZSB0byBkZWZhdWx0IGlmICdtYXhDYXJkaW5hbGl0eScgaXMgZXhjZWVkZWRcblxuRGVmaW5lcyBhIGNvbnN0YW50IHZhbHVlIHRvIHVzZSBpbnN0ZWFkIG9mIFtmaWVsZCB2YWx1ZXNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZpZWxkcykgd2hlbiB0aGUgY3VycmVudCBudW1iZXIgb2Ygcm93cyB3aXRoaW4gdGhlIGFnZ3JlZ2F0b3IncyBpbi1tZW0gdGFibGUgZHVyaW5nIFtmbHVzaEludGVydmFsXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaGludGVydmFsKSBleGNlZWRzIFttYXhDYXJkaW5hbGl0eV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vYWdncmVnYXRlLyNhZ2dyZWdhdG9ybWF4Y2FyZGluYWxpdHkpLiAgVGhpcyB2YWx1ZSBwcmV2ZW50cyBhbiBvdXQtb2YtbWVtIGVycm9yIGlmIFRlblhPYmplY3RzIHdob3NlIFtmaWVsZCB2YWx1ZXNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZpZWxkcykgYXJlIG9mIGhpZ2ggY2FyZGluYWxpdHksIHdoaWNoIGNhbiBjYXVzZSB0aGUgaW4tbWVtIHRhYmxlIHRvIGdyb3cgYmV5b25kIHRoZSBjb25maW5lcyBvZiB0aGUgaG9zdCBKVk0gaGVhcC4gIFRoaXMgZXJyb3IgaXMgcG9zc2libGUgaWYgW2ZpZWxkc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vYWdncmVnYXRlLyNhZ2dyZWdhdG9yZmllbGRzKSBjb250YWlucyBhIGNhbGN1bGF0ZWQvZXh0cmFjdGVkIGZpZWxkIHdob3NlIHZhbHVlIGlzIGFscGhhbnVtZXJpYyAoZS5nLiwgJ3NwYW5JRCcpIGFuZCBpcyBwcmFjdGljYWxseSB1bmlxdWUgdG8gZWFjaCBUZW5YT2JqZWN0LiIKICAgICAgICAgIH0sCiAgICAgICAgICAidG90YWxGaWVsZHMiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgZmllbGRzIHdob3NlIHZhbHVlcyB0byB0YWxseSBpbnRvIGdlbmVyYXRlZCBUZW5YU3VtbWFyaWVzXG5cblNwZWNpZmllcyBhIGxpc3Qgb2YgaW50cmluc2ljIGNhbGN1bGF0ZWQvZXh0cmFjdGVkIFRlblhPYmplY3QgZmllbGQgbmFtZXMgdG8gdGFsbHkgYW5kIHdyaXRlIGludG8gYWdncmVnYXRlZCBUZW5YU3VtbWFyeSBpbnN0YW5jZXMgd2l0aGluIGEgdGFyZ2V0IGZsdXNoICBbdGhyZXNob2xkXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaHRocmVzaG9sZCkgb3IgW2ludGVydmFsXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaGludGVydmFsKS4gIEZvciBleGFtcGxlLCBzZXR0aW5nIGEgdmFsdWUgb2Y6IGBwcmljZWAgaW50byB0aGlzIGFycmF5IHdpbGwgdGFsbHkgdGhlIHByaWNlcyBvZiBhbGwgVGVuWE9iamVjdHMgYWdncmVnYXRlZCBpbnRvIGEgdGFyZ2V0IG91dHB1dCBUZW5YU3VtbWFyeSBpbnN0YW5jZS4gICBBIG1hdGNoaW5nIGBwcmljZWAgdmFsdWUgY29udGFpbmluZyB0aGUgc3VtIG9mIGFnZ3JlZ2F0ZWQgcHJpY2VzIHdpbGwgYmUgYWNjZXNzaWJsZSBmb3IgZWFjaCBUZW5YU3VtbWFyeSBpbnN0YW5jZSB2aWEgaXRzICBbc3VtbWFyeVRvdGFsc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhTdW1tYXJ5K3N1bW1hcnlUb3RhbHMpIGFycmF5LiIsCiAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJtYXhDYXJkaW5hbGl0eSIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTWF4IG51bWJlciBvZiBjb25jdXJyZW50IHJvd3Mgd2l0aGluIHRoZSBhZ2dyZWdhdG9yIGluLW1lbSB0YWJsZSB3aXRoaW4gdGhlIGZsdXNoIGludGVydmFsXG5cblNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHVuaXF1ZSByb3dzIHdpdGhpbiB0aGUgYWdncmVnYXRvcidzIGluLW1lbSB0YWJsZS4gSWYgdGhlIG51bWJlciBvZiByb3dzIGV4Y2VlZHMgdGhpcyB2YWx1ZSBkdXJpbmcgW2ZsdXNoSW50ZXJ2YWxdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZsdXNoaW50ZXJ2YWwpICwgdGhlICdhZ2dyZWdhdG9yRGVmYXVsdFZhbHVlJyB2YWx1ZSB3aWxsIGJlIGZvciBhbGwgVGVuWE9iamVjdHMgaW5zdGVhZCBvZiBbZmllbGQgdmFsdWVzXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmaWVsZHMpIHVudGlsIHRoZSBhZ2dyZWdhdG9yIGlzIGZsdXNoZWQuICBUaGlzIHZhbHVlIGlzIHVzZWQgYXMgYSBiYWNrc3RvcCB0byBlbnN1cmUgdGhhdCB0aGUgYWdncmVnYXRvcidzIGluLW1lbSB0YWJsZSBkb2VzIG5vdCBvdmVyZmxvdyB3aGVuIGV4dHJhY3RpbmcgYW5kICBhZ2dyZWdhdGluZyB2ZXJ5IGhpZ2ggY2FyZGluYWxpdHkgdmFsdWVzIGZyb20gdGhlIGZpZWxkcyBvZiBUZW5YT2JqZWN0cyBwYXNzZWQgdG8gdGhpcyBhZ2dyZWdhdG9yLiAgSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQgb3Igc2V0IHRvIDAsIHRoZSBhZ2dyZWdhdG9yIGhhcyBubyBjYXAuIFRoaXMgbWF5IHJlc3VsdCBpbiBhbiBvdXQtb2YtbWVtIGVycm9yIHdoZW4gdmVyeSBoaWdoIGNhcmRpbmFsaXR5IChlLmcuLCAnc3BhbklEJywgJ0dVSUQnKSBbZmllbGRzXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmaWVsZHMpIGFyZSBzcGVjaWZpZWQuIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICB9LAogICAgICAgICAgImZpbHRlciIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkEgSmF2YVNjcmlwdCBleHByZXNzaW9uIGFuIFRlblhPYmplY3QgbXVzdCBldmFsdWF0ZSBhcyAndHJ1dGh5JyBhZ2FpbnN0IHRvIGJlIGFnZ3JlZ2F0ZWRcblxuUHJvdmlkZXMgYSB3YXkgdG8gY29udHJvbCB3aGljaCBUZW5YT2JqZWN0cyBhcmUgaW5jb3Jwb3JhdGVkIGludG8gdGhpcyBhZ2dyZWdhdG9yLiBVbmxpa2UgdGhlICdhZ2dyZWdhdG9yRW5hYmxlZCcsIHdoaWNoIGVuYWJsZXMvZGlzYWJsZXMgdGhpcyBhZ2dyZWdhdG9yIGFsdG9nZXRoZXIsIHRoaXMgSmF2YVNjcmlwdCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBwZXIgVGVuWE9iamVjdCB0byBwcm92aWRlIGdyYW51bGFyIGNvbnRyb2wgb3ZlciB3aGF0IGluZm9ybWF0aW9uIHRvIGFnZ3JlZ2F0ZS4gIEZvciBleGFtcGxlLCB0byBvbmx5IGFnZ3JlZ2F0ZSBUZW5YT2JqZWN0cyByZWFkIGZyb20gYSBzcGVjaWZpZWQgaW5wdXQ6ICBgYGAgeWFtbCBhZ2dyZWdhdG9yOiAgIGZpbHRlcjogdGhpcy5pbnB1dE5hbWUgPT0gXCJlbGFzdGljXCIgYGBgICBUbyBhcHBseSBtb3JlIGNvbXBsZXggbG9naWMsIGludm9rZSBhbiAxMHggSmF2YVNjcmlwdCBmdW5jdGlvbiBkZWNsYXJlZCBpbiBhIC5qcyBmaWxlIGJ5IHBhc3NpbmcgaXQgdG8gdGhlIDEweCBFbmdpbmUgYXQgc3RhcnR1cCAoZS5nLiwgJCB0ZW54IHJ1biBAbXkuanMpLiAgYGBgIHlhbWwgYWdncmVnYXRvcjogICAuLi4gICBmaWx0ZXI6IG15QWdncmVnYXRvckZpbHRlcigpIGBgYCAgRm9yIGFuIGV4YW1wbGUgZnVuY3Rpb24sIHNlZSBbcG9saWN5LXJlZ3VsYXRvci1vYmplY3QuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L21vZHVsZXMvYmxvYi9tYWluL3BpcGVsaW5lcy9ydW4vbW9kdWxlcy9yZWd1bGF0ZS9wb2xpY3kvcG9saWN5LXJlZ3VsYXRvci1vYmplY3QuanMpLiIKICAgICAgICAgIH0sCiAgICAgICAgICAiZmx1c2hUaHJlc2hvbGQiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgIm51bWJlciIsCiAgICAgICAgICAgICAgInN0cmluZyIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1heGltdW0gdGhlIG51bWJlciBvZiBUZW5YT2JqZWN0cyB0byBhZ2dyZWdhdGUgYmVmb3JlIHRoZSBhZ2dyZWdhdG9yIGZsdXNoZXNcblxuQ29udHJvbHMgaG93IG1hbnkgVGVuWE9iamVjdHMgdG8gdXBzZXJ0IGludG8gdGhpcyBhZ2dyZWdhdG9yIChlLmcuLCAxMDAwMCkgYmVmb3JlIHRoZSBhZ2dyZWdhdG9yIHRyYW5zZm9ybXMgdGhlIHJvd3Mgb2YgaXRzIGluLW1lbSB0YWJsZSBpbnRvIFRlblhTdW1tYXJpZXMgaW5zdGFuY2VzIGFuZCBmbHVzaGVzIHRoZW0gaW50byB0aGUgcGlwZWxpbmUuICBJZiBub3Qgc2V0LCB0aGUgW2ZsdXNoSW50ZXJ2YWxdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZsdXNoaW50ZXJ2YWwpIGFyZ3VtZW50IGRldGVybWluZXMgd2hlbiB0byBmbHVzaCB0aGUgYWdncmVnYXRvci4gSWYgbmVpdGhlciBhcmd1bWVudCBpcyBwcmVzZW50LCB0aGUgYWdncmVnYXRvciBvbmx5IGZsdXNoZXMgcGVuZGluZyBUZW5YU3VtbWFyaWVzIHdoZW4gdGhlIHBpcGVsaW5lIHRlcm1pbmF0ZXMuIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICB9LAogICAgICAgICAgImZsdXNoSW50ZXJ2YWwiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJJbnRlcnZhbCB0byB3YWl0IGJlZm9yZSB0aGUgYWdncmVnYXRvciBmbHVzaGVzXG5cblNldHMgdGhlIHBlcmlvZCAoZS5nLiwgJzMwcycpLCBhZnRlciB3aGljaCB0aGUgYWdncmVnYXRvciB0cmFuc2Zvcm1zIHRoZSByb3dzIG9mIGl0cyBpbi1tZW0gdGFibGUgaW50byBUZW5YU3VtbWFyaWVzIGluc3RhbmNlcyBhbmQgZmx1c2hlcyB0aGVtIGludG8gdGhlIHBpcGVsaW5lLiAgSWYgc2V0LCB0aGUgW2ZsdXNoVGhyZXNob2xkXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaHRocmVzaG9sZCkgIGFyZ3VtZW50IGRldGVybWluZXMgd2hlbiB0byBmbHVzaCB0aGUgYWdncmVnYXRvci4gSWYgbmVpdGhlciBhcmd1bWVudCBpcyBwcmVzZW50LCB0aGUgYWdncmVnYXRvciBvbmx5IGZsdXNoZXMgcGVuZGluZyBUZW5YU3VtbWFyaWVzIHdoZW4gdGhlIHBpcGVsaW5lIHRlcm1pbmF0ZXMuIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmVkIiA6IFsKICAgICAgICAgICJuYW1lIiwKICAgICAgICAgICJmaWVsZHMiCiAgICAgICAgXQogICAgICB9CiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'run' aggregator config for the regulator app.
# This file configures aggregators for tracking emitted (non-dropped) events with
# additional metrics for tracking regulated (dropped) events for cost saving analysis.
# To learn more see https://doc.log10x.com/run/aggregate
# Set the 10x pipeline to 'run'
tenx: run
# ============================== Aggregator Options ===========================
# Multiple aggregators can be defined below
aggregator:
# Defines an aggregator for tracking emitted (non-dropped) events
# This enables an output metric to show an accurate (lossless) metric of the
# data actually emitted to downstream systems.
- name: emitted_events
# 'filter' sets a JavaScript expression that TenXObjects must evaluate as truthy to be aggregated.
# To learn more see https://doc.log10x.com/run/output/regulate/#filter-expressions
#
# This filter excludes dropped events by checking the 'isDropped' property,
# ensuring only emitted events are tracked.
#
# For more info, see https://doc.log10x.com/api/js/#TenXBaseObject+dropped
filter: "this.isObject && !this.isDropped"
# 'fields' set the names of intrinsic/extracted/calculated fields whose combined values
# identify a unique row within the aggregator's in-mem table for
# each object passed to it. This aggregator defaults to enrichment fields.
# To learn more see https://doc.log10x.com/run/initialize/#enrichmentFields
fields:
- $=yield TenXEnv.get("enrichmentFields")
# 'totalFields' specifies fields to extract and tally into generated TenXSummaries
totalFields: []
# 'flushThreshold' sets the max number of TenXObjects whose values to upsert into
# the aggregator's in-mem table. Once exceeded, the aggregator instantiates TenXSummaries
# from the table rows to send to output and reset the table.
flushThreshold: 10000
# 'flushInterval' sets a periodic interval, after which the aggregator
# flushes the rows of its in-mem table into the pipeline as TenXSummary instances.
flushInterval: 2s
# 'maxCardinality' sets the maximum number of rows for the aggregator's
# in-mem table. If an TenXObjects whose 'values' are not contained in the table
# is passed to the aggregator, 'defaultValue' will be used for it instead
# until the aggregator flushes its in-mem table after 'flushInterval' or 'flushThreshold'
# are exceeded.
maxCardinality: 65536
# 'defaultValue' sets a constant value that is used instead of 'values' when
# 'maxCardinality' is exceeded within 'flushInterval'
defaultValue: unknown
# Defines an aggregator for all events seen by this pipeline
# This enables an output metric to show an accurate (lossless) metric of the
# data processed by this pipeline, even if it was later dropped.
- name: all_events
# 'filter' sets a JavaScript expression that TenXObjects must evaluate as truthy to be aggregated.
# To learn more see https://doc.log10x.com/run/output/regulate/#filter-expressions
filter: isObject
# 'values' set the names of intrinsic/extracted/calculated fields whose combined values
# identify a unique row within the aggregator's in-mem table for
# each object passed to it.
# By default, this configuration uses the enrichment fields specified below.
fields:
- $=yield TenXEnv.get("enrichmentFields")
# 'totalFields' specifies fields to extract and tally into generated TenXSummaries
totalFields: []
# 'flushThreshold' sets the max number of TenXObjects whose values to upsert into
# the aggregator's in-mem table. Once exceeded, the aggregator instantiates TenXSummaries
# from the table rows to send to output and reset the table.
flushThreshold: 10000
# 'flushInterval' sets a periodic interval, after which the aggregator
# flushes the rows of its in-mem table into the pipeline as TenXSummary instances.
flushInterval: 2s
# 'maxCardinality' sets the maximum number of rows for the aggregator's
# in-mem table. If an TenXObjects whose 'values' are not contained in the table
# is passed to the aggregator, 'defaultValue' will be used for it instead
# until the aggregator flushes its in-mem table after 'flushInterval' or 'flushThreshold'
# are exceeded.
maxCardinality: 65536
# 'defaultValue' sets a constant value that is used instead of 'values' when
# 'maxCardinality' is exceeded within 'flushInterval'
defaultValue: unknown
Optimize
Optimize
Below is the default configuration from: optimize/config.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYWdncmVnYXRvciIgOiB7CiAgICAgICJ0eXBlIiA6ICJhcnJheSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICJuYW1lIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTG9naWNhbCBuYW1lIG9mIGFnZ3JlZ2F0b3JcblxuUHJvdmlkZXMgYSBsb2dpY2FsIG5hbWUgZm9yIHRoaXMgYWdncmVnYXRvciAoZS5nLiwgJ2Vycm9ycycpLiBUaGlzIHZhbHVlIGlzIGFjY2Vzc2libGUgYXQgcnVuLXRpbWUgdmlhIHRoZSBpbnRyaW5zaWMgJ2lucHV0TmFtZScgZmllbGQgdG8gaWRlbnRpZnkgVGVuWFN1bW1hcmllcyBvcmlnaW5hdGluZyBmcm9tIHRoaXMgYWdncmVnYXRvci4iCiAgICAgICAgICB9LAogICAgICAgICAgImVuYWJsZWQiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJFbmFibGUvZGlzYWJsZSB0aGlzIGFnZ3JlZ2F0b3JcblxuU2V0cyB3aGV0aGVyIHRvIG9wZW4gdGhlIGlucHV0IHN0cmVhbS4gVG8gZW5hYmxlIHRoaXMgaW5wdXQgb25seSB3aGVuIGFuICdhZ2dyZWdhdGVFcnJvcnMnIHN0YXJ0dXAgYXJndW1lbnQgdmFsdWUgaXMgdHJ1dGh5OiAgYGBgIHlhbWwgLi4uIGFnZ3JlZ2F0b3I6ICAgZW5hYmxlZDogJD1UZW5YRW52LmdldChcImFnZ3JlZ2F0ZUVycm9yc1wiKSBgYGAgKERlZmF1bHQ6IHRydWUpIiwKICAgICAgICAgICAgImRlZmF1bHQiIDogInRydWUiCiAgICAgICAgICB9LAogICAgICAgICAgImZpZWxkcyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAiYXJyYXkiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIGZpZWxkIG5hbWVzIGJ5IHdoaWNoIHRvIGFnZ3JlZ2F0ZSBUZW5YT2JqZWN0c1xuXG5Qcm92aWRlcyBhIGxpc3Qgb2YgaW50cmluc2ljL2V4dHJhY3RlZC9jYWxjdWxhdGVkIFtUZW5YT2JqZWN0XShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9qcy8jVGVuWE9iamVjdCkgZmllbGQgbmFtZXMgYnkgd2hpY2ggdG8gYWdncmVnYXRlIGluc3RhbmNlcy4gIFdoZW4gdGhlIGFnZ3JlZ2F0b3IgZmx1c2hlcyB0aGUgaW4tbWVtIHRhYmxlIHRvIHByb2R1Y2VkIFRlblhTdW1tYXJpZXMsIGVhY2ggZ2VuZXJhdGVkIFRlblhTdW1tYXJ5IGluc3RhbmNlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgdG90YWwgdmFsdWVzIHZpYSBpdHMgW3N1bW1hcnlUb3RhbHNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YU3VtbWFyeStzdW1tYXJ5VmFsdWVzKSBhcnJheSBmaWVsZC4iLAogICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiZGVmYXVsdFZhbHVlIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQSBjb25zdGFudCB2YWx1ZSB0byBkZWZhdWx0IGlmICdtYXhDYXJkaW5hbGl0eScgaXMgZXhjZWVkZWRcblxuRGVmaW5lcyBhIGNvbnN0YW50IHZhbHVlIHRvIHVzZSBpbnN0ZWFkIG9mIFtmaWVsZCB2YWx1ZXNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZpZWxkcykgd2hlbiB0aGUgY3VycmVudCBudW1iZXIgb2Ygcm93cyB3aXRoaW4gdGhlIGFnZ3JlZ2F0b3IncyBpbi1tZW0gdGFibGUgZHVyaW5nIFtmbHVzaEludGVydmFsXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaGludGVydmFsKSBleGNlZWRzIFttYXhDYXJkaW5hbGl0eV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vYWdncmVnYXRlLyNhZ2dyZWdhdG9ybWF4Y2FyZGluYWxpdHkpLiAgVGhpcyB2YWx1ZSBwcmV2ZW50cyBhbiBvdXQtb2YtbWVtIGVycm9yIGlmIFRlblhPYmplY3RzIHdob3NlIFtmaWVsZCB2YWx1ZXNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZpZWxkcykgYXJlIG9mIGhpZ2ggY2FyZGluYWxpdHksIHdoaWNoIGNhbiBjYXVzZSB0aGUgaW4tbWVtIHRhYmxlIHRvIGdyb3cgYmV5b25kIHRoZSBjb25maW5lcyBvZiB0aGUgaG9zdCBKVk0gaGVhcC4gIFRoaXMgZXJyb3IgaXMgcG9zc2libGUgaWYgW2ZpZWxkc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vYWdncmVnYXRlLyNhZ2dyZWdhdG9yZmllbGRzKSBjb250YWlucyBhIGNhbGN1bGF0ZWQvZXh0cmFjdGVkIGZpZWxkIHdob3NlIHZhbHVlIGlzIGFscGhhbnVtZXJpYyAoZS5nLiwgJ3NwYW5JRCcpIGFuZCBpcyBwcmFjdGljYWxseSB1bmlxdWUgdG8gZWFjaCBUZW5YT2JqZWN0LiIKICAgICAgICAgIH0sCiAgICAgICAgICAidG90YWxGaWVsZHMiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgZmllbGRzIHdob3NlIHZhbHVlcyB0byB0YWxseSBpbnRvIGdlbmVyYXRlZCBUZW5YU3VtbWFyaWVzXG5cblNwZWNpZmllcyBhIGxpc3Qgb2YgaW50cmluc2ljIGNhbGN1bGF0ZWQvZXh0cmFjdGVkIFRlblhPYmplY3QgZmllbGQgbmFtZXMgdG8gdGFsbHkgYW5kIHdyaXRlIGludG8gYWdncmVnYXRlZCBUZW5YU3VtbWFyeSBpbnN0YW5jZXMgd2l0aGluIGEgdGFyZ2V0IGZsdXNoICBbdGhyZXNob2xkXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaHRocmVzaG9sZCkgb3IgW2ludGVydmFsXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaGludGVydmFsKS4gIEZvciBleGFtcGxlLCBzZXR0aW5nIGEgdmFsdWUgb2Y6IGBwcmljZWAgaW50byB0aGlzIGFycmF5IHdpbGwgdGFsbHkgdGhlIHByaWNlcyBvZiBhbGwgVGVuWE9iamVjdHMgYWdncmVnYXRlZCBpbnRvIGEgdGFyZ2V0IG91dHB1dCBUZW5YU3VtbWFyeSBpbnN0YW5jZS4gICBBIG1hdGNoaW5nIGBwcmljZWAgdmFsdWUgY29udGFpbmluZyB0aGUgc3VtIG9mIGFnZ3JlZ2F0ZWQgcHJpY2VzIHdpbGwgYmUgYWNjZXNzaWJsZSBmb3IgZWFjaCBUZW5YU3VtbWFyeSBpbnN0YW5jZSB2aWEgaXRzICBbc3VtbWFyeVRvdGFsc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhTdW1tYXJ5K3N1bW1hcnlUb3RhbHMpIGFycmF5LiIsCiAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJtYXhDYXJkaW5hbGl0eSIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTWF4IG51bWJlciBvZiBjb25jdXJyZW50IHJvd3Mgd2l0aGluIHRoZSBhZ2dyZWdhdG9yIGluLW1lbSB0YWJsZSB3aXRoaW4gdGhlIGZsdXNoIGludGVydmFsXG5cblNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHVuaXF1ZSByb3dzIHdpdGhpbiB0aGUgYWdncmVnYXRvcidzIGluLW1lbSB0YWJsZS4gSWYgdGhlIG51bWJlciBvZiByb3dzIGV4Y2VlZHMgdGhpcyB2YWx1ZSBkdXJpbmcgW2ZsdXNoSW50ZXJ2YWxdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZsdXNoaW50ZXJ2YWwpICwgdGhlICdhZ2dyZWdhdG9yRGVmYXVsdFZhbHVlJyB2YWx1ZSB3aWxsIGJlIGZvciBhbGwgVGVuWE9iamVjdHMgaW5zdGVhZCBvZiBbZmllbGQgdmFsdWVzXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmaWVsZHMpIHVudGlsIHRoZSBhZ2dyZWdhdG9yIGlzIGZsdXNoZWQuICBUaGlzIHZhbHVlIGlzIHVzZWQgYXMgYSBiYWNrc3RvcCB0byBlbnN1cmUgdGhhdCB0aGUgYWdncmVnYXRvcidzIGluLW1lbSB0YWJsZSBkb2VzIG5vdCBvdmVyZmxvdyB3aGVuIGV4dHJhY3RpbmcgYW5kICBhZ2dyZWdhdGluZyB2ZXJ5IGhpZ2ggY2FyZGluYWxpdHkgdmFsdWVzIGZyb20gdGhlIGZpZWxkcyBvZiBUZW5YT2JqZWN0cyBwYXNzZWQgdG8gdGhpcyBhZ2dyZWdhdG9yLiAgSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQgb3Igc2V0IHRvIDAsIHRoZSBhZ2dyZWdhdG9yIGhhcyBubyBjYXAuIFRoaXMgbWF5IHJlc3VsdCBpbiBhbiBvdXQtb2YtbWVtIGVycm9yIHdoZW4gdmVyeSBoaWdoIGNhcmRpbmFsaXR5IChlLmcuLCAnc3BhbklEJywgJ0dVSUQnKSBbZmllbGRzXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmaWVsZHMpIGFyZSBzcGVjaWZpZWQuIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICB9LAogICAgICAgICAgImZpbHRlciIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkEgSmF2YVNjcmlwdCBleHByZXNzaW9uIGFuIFRlblhPYmplY3QgbXVzdCBldmFsdWF0ZSBhcyAndHJ1dGh5JyBhZ2FpbnN0IHRvIGJlIGFnZ3JlZ2F0ZWRcblxuUHJvdmlkZXMgYSB3YXkgdG8gY29udHJvbCB3aGljaCBUZW5YT2JqZWN0cyBhcmUgaW5jb3Jwb3JhdGVkIGludG8gdGhpcyBhZ2dyZWdhdG9yLiBVbmxpa2UgdGhlICdhZ2dyZWdhdG9yRW5hYmxlZCcsIHdoaWNoIGVuYWJsZXMvZGlzYWJsZXMgdGhpcyBhZ2dyZWdhdG9yIGFsdG9nZXRoZXIsIHRoaXMgSmF2YVNjcmlwdCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBwZXIgVGVuWE9iamVjdCB0byBwcm92aWRlIGdyYW51bGFyIGNvbnRyb2wgb3ZlciB3aGF0IGluZm9ybWF0aW9uIHRvIGFnZ3JlZ2F0ZS4gIEZvciBleGFtcGxlLCB0byBvbmx5IGFnZ3JlZ2F0ZSBUZW5YT2JqZWN0cyByZWFkIGZyb20gYSBzcGVjaWZpZWQgaW5wdXQ6ICBgYGAgeWFtbCBhZ2dyZWdhdG9yOiAgIGZpbHRlcjogdGhpcy5pbnB1dE5hbWUgPT0gXCJlbGFzdGljXCIgYGBgICBUbyBhcHBseSBtb3JlIGNvbXBsZXggbG9naWMsIGludm9rZSBhbiAxMHggSmF2YVNjcmlwdCBmdW5jdGlvbiBkZWNsYXJlZCBpbiBhIC5qcyBmaWxlIGJ5IHBhc3NpbmcgaXQgdG8gdGhlIDEweCBFbmdpbmUgYXQgc3RhcnR1cCAoZS5nLiwgJCB0ZW54IHJ1biBAbXkuanMpLiAgYGBgIHlhbWwgYWdncmVnYXRvcjogICAuLi4gICBmaWx0ZXI6IG15QWdncmVnYXRvckZpbHRlcigpIGBgYCAgRm9yIGFuIGV4YW1wbGUgZnVuY3Rpb24sIHNlZSBbcG9saWN5LXJlZ3VsYXRvci1vYmplY3QuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L21vZHVsZXMvYmxvYi9tYWluL3BpcGVsaW5lcy9ydW4vbW9kdWxlcy9yZWd1bGF0ZS9wb2xpY3kvcG9saWN5LXJlZ3VsYXRvci1vYmplY3QuanMpLiIKICAgICAgICAgIH0sCiAgICAgICAgICAiZmx1c2hUaHJlc2hvbGQiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgIm51bWJlciIsCiAgICAgICAgICAgICAgInN0cmluZyIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1heGltdW0gdGhlIG51bWJlciBvZiBUZW5YT2JqZWN0cyB0byBhZ2dyZWdhdGUgYmVmb3JlIHRoZSBhZ2dyZWdhdG9yIGZsdXNoZXNcblxuQ29udHJvbHMgaG93IG1hbnkgVGVuWE9iamVjdHMgdG8gdXBzZXJ0IGludG8gdGhpcyBhZ2dyZWdhdG9yIChlLmcuLCAxMDAwMCkgYmVmb3JlIHRoZSBhZ2dyZWdhdG9yIHRyYW5zZm9ybXMgdGhlIHJvd3Mgb2YgaXRzIGluLW1lbSB0YWJsZSBpbnRvIFRlblhTdW1tYXJpZXMgaW5zdGFuY2VzIGFuZCBmbHVzaGVzIHRoZW0gaW50byB0aGUgcGlwZWxpbmUuICBJZiBub3Qgc2V0LCB0aGUgW2ZsdXNoSW50ZXJ2YWxdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZsdXNoaW50ZXJ2YWwpIGFyZ3VtZW50IGRldGVybWluZXMgd2hlbiB0byBmbHVzaCB0aGUgYWdncmVnYXRvci4gSWYgbmVpdGhlciBhcmd1bWVudCBpcyBwcmVzZW50LCB0aGUgYWdncmVnYXRvciBvbmx5IGZsdXNoZXMgcGVuZGluZyBUZW5YU3VtbWFyaWVzIHdoZW4gdGhlIHBpcGVsaW5lIHRlcm1pbmF0ZXMuIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICB9LAogICAgICAgICAgImZsdXNoSW50ZXJ2YWwiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJJbnRlcnZhbCB0byB3YWl0IGJlZm9yZSB0aGUgYWdncmVnYXRvciBmbHVzaGVzXG5cblNldHMgdGhlIHBlcmlvZCAoZS5nLiwgJzMwcycpLCBhZnRlciB3aGljaCB0aGUgYWdncmVnYXRvciB0cmFuc2Zvcm1zIHRoZSByb3dzIG9mIGl0cyBpbi1tZW0gdGFibGUgaW50byBUZW5YU3VtbWFyaWVzIGluc3RhbmNlcyBhbmQgZmx1c2hlcyB0aGVtIGludG8gdGhlIHBpcGVsaW5lLiAgSWYgc2V0LCB0aGUgW2ZsdXNoVGhyZXNob2xkXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaHRocmVzaG9sZCkgIGFyZ3VtZW50IGRldGVybWluZXMgd2hlbiB0byBmbHVzaCB0aGUgYWdncmVnYXRvci4gSWYgbmVpdGhlciBhcmd1bWVudCBpcyBwcmVzZW50LCB0aGUgYWdncmVnYXRvciBvbmx5IGZsdXNoZXMgcGVuZGluZyBUZW5YU3VtbWFyaWVzIHdoZW4gdGhlIHBpcGVsaW5lIHRlcm1pbmF0ZXMuIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmVkIiA6IFsKICAgICAgICAgICJuYW1lIiwKICAgICAgICAgICJmaWVsZHMiCiAgICAgICAgXQogICAgICB9CiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'run' aggregator config for the optimizer app.
# This file configures aggregators for tracking emitted (non-dropped) events with
# additional metrics for optimization analysis and regulated (dropped) events for
# cost saving analysis.
# To learn more see https://doc.log10x.com/run/aggregate
# Set the 10x pipeline to 'run'
tenx: run
# ============================== Aggregator Options ===========================
# Multiple aggregators can be defined below
aggregator:
# Defines an aggregator for tracking optimized (emitted) events with size metrics
# This enables output metrics to show both event counts and optimized byte sizes,
# providing visibility into optimization effectiveness.
- name: emitted_events
# 'filter' sets a JavaScript expression that TenXObjects must evaluate as truthy to be aggregated.
# To learn more see https://doc.log10x.com/run/output/regulate/#filter-expressions
#
# This filter excludes dropped events, tracking only optimized events that are emitted.
# For more info on output filters see https://doc.log10x.com/run/output/#output-filters
#
filter: "this.isObject && !this.isDropped"
# 'fields' set the names of intrinsic/extracted/calculated fields whose combined values
# identify a unique row within the aggregator's in-mem table for
# each object passed to it. This aggregator defaults to enrichment fields.
# To learn more see https://doc.log10x.com/run/initialize/#enrichmentFields
fields:
- $=yield TenXEnv.get("enrichmentFields")
# 'totalFields' specifies fields to extract and tally into generated TenXSummaries
totalFields:
# Calculates the utf8 byte size of the encoded/optimized event, providing metrics
# on the size of optimized events for measuring optimization effectiveness.
# To learn more see https://doc.log10x.com/api/js/#TenXObject+encode
- optimized_size=this.utf8Size("encoded=encode()")
# 'flushThreshold' sets the max number of TenXObjects whose values to upsert into
# the aggregator's in-mem table. Once exceeded, the aggregator instantiates TenXSummaries
# from the table rows to send to output and reset the table.
flushThreshold: 10000
# 'flushInterval' sets a periodic interval, after which the aggregator
# flushes the rows of its in-mem table into the pipeline as TenXSummary instances.
flushInterval: 2s
# 'maxCardinality' sets the maximum number of rows for the aggregator's
# in-mem table. If an TenXObjects whose 'values' are not contained in the table
# is passed to the aggregator, 'defaultValue' will be used for it instead
# until the aggregator flushes its in-mem table after 'flushInterval' or 'flushThreshold'
# are exceeded.
maxCardinality: 65536
# 'defaultValue' sets a constant value that is used instead of 'values' when
# 'maxCardinality' is exceeded within 'flushInterval'
defaultValue: unknown
# Defines an aggregator for all events seen by this pipeline
# This enables an output metric to show an accurate (lossless) metric of the
# data processed by this pipeline, even if it was later dropped.
- name: all_events
# 'filter' sets a JavaScript expression that TenXObjects must evaluate as truthy to be aggregated.
# To learn more see https://doc.log10x.com/run/output/regulate/#filter-expressions
filter: isObject
# 'values' set the names of intrinsic/extracted/calculated fields whose combined values
# identify a unique row within the aggregator's in-mem table for
# each object passed to it.
# By default, this configuration uses the enrichment fields specified below.
fields:
- $=yield TenXEnv.get("enrichmentFields")
# 'totalFields' specifies fields to extract and tally into generated TenXSummaries
totalFields: []
# 'flushThreshold' sets the max number of TenXObjects whose values to upsert into
# the aggregator's in-mem table. Once exceeded, the aggregator instantiates TenXSummaries
# from the table rows to send to output and reset the table.
flushThreshold: 10000
# 'flushInterval' sets a periodic interval, after which the aggregator
# flushes the rows of its in-mem table into the pipeline as TenXSummary instances.
flushInterval: 2s
# 'maxCardinality' sets the maximum number of rows for the aggregator's
# in-mem table. If an TenXObjects whose 'values' are not contained in the table
# is passed to the aggregator, 'defaultValue' will be used for it instead
# until the aggregator flushes its in-mem table after 'flushInterval' or 'flushThreshold'
# are exceeded.
maxCardinality: 65536
# 'defaultValue' sets a constant value that is used instead of 'values' when
# 'maxCardinality' is exceeded within 'flushInterval'
defaultValue: unknown
Index
Index
Below is the default configuration from: index/config.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYWdncmVnYXRvciIgOiB7CiAgICAgICJ0eXBlIiA6ICJhcnJheSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICJuYW1lIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTG9naWNhbCBuYW1lIG9mIGFnZ3JlZ2F0b3JcblxuUHJvdmlkZXMgYSBsb2dpY2FsIG5hbWUgZm9yIHRoaXMgYWdncmVnYXRvciAoZS5nLiwgJ2Vycm9ycycpLiBUaGlzIHZhbHVlIGlzIGFjY2Vzc2libGUgYXQgcnVuLXRpbWUgdmlhIHRoZSBpbnRyaW5zaWMgJ2lucHV0TmFtZScgZmllbGQgdG8gaWRlbnRpZnkgVGVuWFN1bW1hcmllcyBvcmlnaW5hdGluZyBmcm9tIHRoaXMgYWdncmVnYXRvci4iCiAgICAgICAgICB9LAogICAgICAgICAgImVuYWJsZWQiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJFbmFibGUvZGlzYWJsZSB0aGlzIGFnZ3JlZ2F0b3JcblxuU2V0cyB3aGV0aGVyIHRvIG9wZW4gdGhlIGlucHV0IHN0cmVhbS4gVG8gZW5hYmxlIHRoaXMgaW5wdXQgb25seSB3aGVuIGFuICdhZ2dyZWdhdGVFcnJvcnMnIHN0YXJ0dXAgYXJndW1lbnQgdmFsdWUgaXMgdHJ1dGh5OiAgYGBgIHlhbWwgLi4uIGFnZ3JlZ2F0b3I6ICAgZW5hYmxlZDogJD1UZW5YRW52LmdldChcImFnZ3JlZ2F0ZUVycm9yc1wiKSBgYGAgKERlZmF1bHQ6IHRydWUpIiwKICAgICAgICAgICAgImRlZmF1bHQiIDogInRydWUiCiAgICAgICAgICB9LAogICAgICAgICAgImZpZWxkcyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAiYXJyYXkiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIGZpZWxkIG5hbWVzIGJ5IHdoaWNoIHRvIGFnZ3JlZ2F0ZSBUZW5YT2JqZWN0c1xuXG5Qcm92aWRlcyBhIGxpc3Qgb2YgaW50cmluc2ljL2V4dHJhY3RlZC9jYWxjdWxhdGVkIFtUZW5YT2JqZWN0XShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9qcy8jVGVuWE9iamVjdCkgZmllbGQgbmFtZXMgYnkgd2hpY2ggdG8gYWdncmVnYXRlIGluc3RhbmNlcy4gIFdoZW4gdGhlIGFnZ3JlZ2F0b3IgZmx1c2hlcyB0aGUgaW4tbWVtIHRhYmxlIHRvIHByb2R1Y2VkIFRlblhTdW1tYXJpZXMsIGVhY2ggZ2VuZXJhdGVkIFRlblhTdW1tYXJ5IGluc3RhbmNlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgdG90YWwgdmFsdWVzIHZpYSBpdHMgW3N1bW1hcnlUb3RhbHNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YU3VtbWFyeStzdW1tYXJ5VmFsdWVzKSBhcnJheSBmaWVsZC4iLAogICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiZGVmYXVsdFZhbHVlIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQSBjb25zdGFudCB2YWx1ZSB0byBkZWZhdWx0IGlmICdtYXhDYXJkaW5hbGl0eScgaXMgZXhjZWVkZWRcblxuRGVmaW5lcyBhIGNvbnN0YW50IHZhbHVlIHRvIHVzZSBpbnN0ZWFkIG9mIFtmaWVsZCB2YWx1ZXNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZpZWxkcykgd2hlbiB0aGUgY3VycmVudCBudW1iZXIgb2Ygcm93cyB3aXRoaW4gdGhlIGFnZ3JlZ2F0b3IncyBpbi1tZW0gdGFibGUgZHVyaW5nIFtmbHVzaEludGVydmFsXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaGludGVydmFsKSBleGNlZWRzIFttYXhDYXJkaW5hbGl0eV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vYWdncmVnYXRlLyNhZ2dyZWdhdG9ybWF4Y2FyZGluYWxpdHkpLiAgVGhpcyB2YWx1ZSBwcmV2ZW50cyBhbiBvdXQtb2YtbWVtIGVycm9yIGlmIFRlblhPYmplY3RzIHdob3NlIFtmaWVsZCB2YWx1ZXNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZpZWxkcykgYXJlIG9mIGhpZ2ggY2FyZGluYWxpdHksIHdoaWNoIGNhbiBjYXVzZSB0aGUgaW4tbWVtIHRhYmxlIHRvIGdyb3cgYmV5b25kIHRoZSBjb25maW5lcyBvZiB0aGUgaG9zdCBKVk0gaGVhcC4gIFRoaXMgZXJyb3IgaXMgcG9zc2libGUgaWYgW2ZpZWxkc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vYWdncmVnYXRlLyNhZ2dyZWdhdG9yZmllbGRzKSBjb250YWlucyBhIGNhbGN1bGF0ZWQvZXh0cmFjdGVkIGZpZWxkIHdob3NlIHZhbHVlIGlzIGFscGhhbnVtZXJpYyAoZS5nLiwgJ3NwYW5JRCcpIGFuZCBpcyBwcmFjdGljYWxseSB1bmlxdWUgdG8gZWFjaCBUZW5YT2JqZWN0LiIKICAgICAgICAgIH0sCiAgICAgICAgICAidG90YWxGaWVsZHMiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgZmllbGRzIHdob3NlIHZhbHVlcyB0byB0YWxseSBpbnRvIGdlbmVyYXRlZCBUZW5YU3VtbWFyaWVzXG5cblNwZWNpZmllcyBhIGxpc3Qgb2YgaW50cmluc2ljIGNhbGN1bGF0ZWQvZXh0cmFjdGVkIFRlblhPYmplY3QgZmllbGQgbmFtZXMgdG8gdGFsbHkgYW5kIHdyaXRlIGludG8gYWdncmVnYXRlZCBUZW5YU3VtbWFyeSBpbnN0YW5jZXMgd2l0aGluIGEgdGFyZ2V0IGZsdXNoICBbdGhyZXNob2xkXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaHRocmVzaG9sZCkgb3IgW2ludGVydmFsXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaGludGVydmFsKS4gIEZvciBleGFtcGxlLCBzZXR0aW5nIGEgdmFsdWUgb2Y6IGBwcmljZWAgaW50byB0aGlzIGFycmF5IHdpbGwgdGFsbHkgdGhlIHByaWNlcyBvZiBhbGwgVGVuWE9iamVjdHMgYWdncmVnYXRlZCBpbnRvIGEgdGFyZ2V0IG91dHB1dCBUZW5YU3VtbWFyeSBpbnN0YW5jZS4gICBBIG1hdGNoaW5nIGBwcmljZWAgdmFsdWUgY29udGFpbmluZyB0aGUgc3VtIG9mIGFnZ3JlZ2F0ZWQgcHJpY2VzIHdpbGwgYmUgYWNjZXNzaWJsZSBmb3IgZWFjaCBUZW5YU3VtbWFyeSBpbnN0YW5jZSB2aWEgaXRzICBbc3VtbWFyeVRvdGFsc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhTdW1tYXJ5K3N1bW1hcnlUb3RhbHMpIGFycmF5LiIsCiAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJtYXhDYXJkaW5hbGl0eSIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTWF4IG51bWJlciBvZiBjb25jdXJyZW50IHJvd3Mgd2l0aGluIHRoZSBhZ2dyZWdhdG9yIGluLW1lbSB0YWJsZSB3aXRoaW4gdGhlIGZsdXNoIGludGVydmFsXG5cblNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHVuaXF1ZSByb3dzIHdpdGhpbiB0aGUgYWdncmVnYXRvcidzIGluLW1lbSB0YWJsZS4gSWYgdGhlIG51bWJlciBvZiByb3dzIGV4Y2VlZHMgdGhpcyB2YWx1ZSBkdXJpbmcgW2ZsdXNoSW50ZXJ2YWxdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZsdXNoaW50ZXJ2YWwpICwgdGhlICdhZ2dyZWdhdG9yRGVmYXVsdFZhbHVlJyB2YWx1ZSB3aWxsIGJlIGZvciBhbGwgVGVuWE9iamVjdHMgaW5zdGVhZCBvZiBbZmllbGQgdmFsdWVzXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmaWVsZHMpIHVudGlsIHRoZSBhZ2dyZWdhdG9yIGlzIGZsdXNoZWQuICBUaGlzIHZhbHVlIGlzIHVzZWQgYXMgYSBiYWNrc3RvcCB0byBlbnN1cmUgdGhhdCB0aGUgYWdncmVnYXRvcidzIGluLW1lbSB0YWJsZSBkb2VzIG5vdCBvdmVyZmxvdyB3aGVuIGV4dHJhY3RpbmcgYW5kICBhZ2dyZWdhdGluZyB2ZXJ5IGhpZ2ggY2FyZGluYWxpdHkgdmFsdWVzIGZyb20gdGhlIGZpZWxkcyBvZiBUZW5YT2JqZWN0cyBwYXNzZWQgdG8gdGhpcyBhZ2dyZWdhdG9yLiAgSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQgb3Igc2V0IHRvIDAsIHRoZSBhZ2dyZWdhdG9yIGhhcyBubyBjYXAuIFRoaXMgbWF5IHJlc3VsdCBpbiBhbiBvdXQtb2YtbWVtIGVycm9yIHdoZW4gdmVyeSBoaWdoIGNhcmRpbmFsaXR5IChlLmcuLCAnc3BhbklEJywgJ0dVSUQnKSBbZmllbGRzXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmaWVsZHMpIGFyZSBzcGVjaWZpZWQuIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICB9LAogICAgICAgICAgImZpbHRlciIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkEgSmF2YVNjcmlwdCBleHByZXNzaW9uIGFuIFRlblhPYmplY3QgbXVzdCBldmFsdWF0ZSBhcyAndHJ1dGh5JyBhZ2FpbnN0IHRvIGJlIGFnZ3JlZ2F0ZWRcblxuUHJvdmlkZXMgYSB3YXkgdG8gY29udHJvbCB3aGljaCBUZW5YT2JqZWN0cyBhcmUgaW5jb3Jwb3JhdGVkIGludG8gdGhpcyBhZ2dyZWdhdG9yLiBVbmxpa2UgdGhlICdhZ2dyZWdhdG9yRW5hYmxlZCcsIHdoaWNoIGVuYWJsZXMvZGlzYWJsZXMgdGhpcyBhZ2dyZWdhdG9yIGFsdG9nZXRoZXIsIHRoaXMgSmF2YVNjcmlwdCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBwZXIgVGVuWE9iamVjdCB0byBwcm92aWRlIGdyYW51bGFyIGNvbnRyb2wgb3ZlciB3aGF0IGluZm9ybWF0aW9uIHRvIGFnZ3JlZ2F0ZS4gIEZvciBleGFtcGxlLCB0byBvbmx5IGFnZ3JlZ2F0ZSBUZW5YT2JqZWN0cyByZWFkIGZyb20gYSBzcGVjaWZpZWQgaW5wdXQ6ICBgYGAgeWFtbCBhZ2dyZWdhdG9yOiAgIGZpbHRlcjogdGhpcy5pbnB1dE5hbWUgPT0gXCJlbGFzdGljXCIgYGBgICBUbyBhcHBseSBtb3JlIGNvbXBsZXggbG9naWMsIGludm9rZSBhbiAxMHggSmF2YVNjcmlwdCBmdW5jdGlvbiBkZWNsYXJlZCBpbiBhIC5qcyBmaWxlIGJ5IHBhc3NpbmcgaXQgdG8gdGhlIDEweCBFbmdpbmUgYXQgc3RhcnR1cCAoZS5nLiwgJCB0ZW54IHJ1biBAbXkuanMpLiAgYGBgIHlhbWwgYWdncmVnYXRvcjogICAuLi4gICBmaWx0ZXI6IG15QWdncmVnYXRvckZpbHRlcigpIGBgYCAgRm9yIGFuIGV4YW1wbGUgZnVuY3Rpb24sIHNlZSBbcG9saWN5LXJlZ3VsYXRvci1vYmplY3QuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L21vZHVsZXMvYmxvYi9tYWluL3BpcGVsaW5lcy9ydW4vbW9kdWxlcy9yZWd1bGF0ZS9wb2xpY3kvcG9saWN5LXJlZ3VsYXRvci1vYmplY3QuanMpLiIKICAgICAgICAgIH0sCiAgICAgICAgICAiZmx1c2hUaHJlc2hvbGQiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgIm51bWJlciIsCiAgICAgICAgICAgICAgInN0cmluZyIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1heGltdW0gdGhlIG51bWJlciBvZiBUZW5YT2JqZWN0cyB0byBhZ2dyZWdhdGUgYmVmb3JlIHRoZSBhZ2dyZWdhdG9yIGZsdXNoZXNcblxuQ29udHJvbHMgaG93IG1hbnkgVGVuWE9iamVjdHMgdG8gdXBzZXJ0IGludG8gdGhpcyBhZ2dyZWdhdG9yIChlLmcuLCAxMDAwMCkgYmVmb3JlIHRoZSBhZ2dyZWdhdG9yIHRyYW5zZm9ybXMgdGhlIHJvd3Mgb2YgaXRzIGluLW1lbSB0YWJsZSBpbnRvIFRlblhTdW1tYXJpZXMgaW5zdGFuY2VzIGFuZCBmbHVzaGVzIHRoZW0gaW50byB0aGUgcGlwZWxpbmUuICBJZiBub3Qgc2V0LCB0aGUgW2ZsdXNoSW50ZXJ2YWxdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZsdXNoaW50ZXJ2YWwpIGFyZ3VtZW50IGRldGVybWluZXMgd2hlbiB0byBmbHVzaCB0aGUgYWdncmVnYXRvci4gSWYgbmVpdGhlciBhcmd1bWVudCBpcyBwcmVzZW50LCB0aGUgYWdncmVnYXRvciBvbmx5IGZsdXNoZXMgcGVuZGluZyBUZW5YU3VtbWFyaWVzIHdoZW4gdGhlIHBpcGVsaW5lIHRlcm1pbmF0ZXMuIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICB9LAogICAgICAgICAgImZsdXNoSW50ZXJ2YWwiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJJbnRlcnZhbCB0byB3YWl0IGJlZm9yZSB0aGUgYWdncmVnYXRvciBmbHVzaGVzXG5cblNldHMgdGhlIHBlcmlvZCAoZS5nLiwgJzMwcycpLCBhZnRlciB3aGljaCB0aGUgYWdncmVnYXRvciB0cmFuc2Zvcm1zIHRoZSByb3dzIG9mIGl0cyBpbi1tZW0gdGFibGUgaW50byBUZW5YU3VtbWFyaWVzIGluc3RhbmNlcyBhbmQgZmx1c2hlcyB0aGVtIGludG8gdGhlIHBpcGVsaW5lLiAgSWYgc2V0LCB0aGUgW2ZsdXNoVGhyZXNob2xkXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaHRocmVzaG9sZCkgIGFyZ3VtZW50IGRldGVybWluZXMgd2hlbiB0byBmbHVzaCB0aGUgYWdncmVnYXRvci4gSWYgbmVpdGhlciBhcmd1bWVudCBpcyBwcmVzZW50LCB0aGUgYWdncmVnYXRvciBvbmx5IGZsdXNoZXMgcGVuZGluZyBUZW5YU3VtbWFyaWVzIHdoZW4gdGhlIHBpcGVsaW5lIHRlcm1pbmF0ZXMuIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmVkIiA6IFsKICAgICAgICAgICJuYW1lIiwKICAgICAgICAgICJmaWVsZHMiCiAgICAgICAgXQogICAgICB9CiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'run' index aggregator config
# This file configures the aggregators for the Storage Streamer app Index component.
# To learn more see https://doc.log10x.com/run/aggregate
# Set the 10x pipeline to 'run'
tenx: run
# ============================== Aggregator Options ===========================
# Multiple aggregators can be defined below
aggregator:
# Defines an aggregator for all events seen by this pipeline
# This enables an output metric to show an accurate (lossless) metric of the
# data processed by this pipeline, even if it was later dropped.
- name: indexed_events
# 'filter' sets a JavaScript expression that TenXObjects must evaluate as truthy to be aggregated.
# To learn more see https://doc.log10x.com/run/output/regulate/#filter-expressions
filter: isObject
# 'fields' set the names of intrinsic/extracted/calculated fields whose combined values
# identify a unique row within the aggregator's in-mem table for
# each object passed to it. This aggregator defaults to enrichment fields.
# To learn more see https://doc.log10x.com/run/initialize/#enrichmentFields
fields:
- $=yield TenXEnv.get("enrichmentFields")
# 'totalFields' specifies fields to extract and tally into generated TenXSummaries
totalFields: []
# 'flushThreshold' sets the max number of TenXObjects whose values to upsert into
# the aggregator's in-mem table. Once exceeded, the aggregator instantiates TenXSummaries
# from the table rows to send to output and reset the table.
flushThreshold: 10000
# 'flushInterval' sets a periodic interval, after which the aggregator
# flushes the rows of its in-mem table into the pipeline as TenXSummary instances.
flushInterval: 2s
# 'maxCardinality' sets the maximum number of rows for the aggregator's
# in-mem table. If an TenXObjects whose 'values' are not contained in the table
# is passed to the aggregator, 'defaultValue' will be used for it instead
# until the aggregator flushes its in-mem table after 'flushInterval' or 'flushThreshold'
# are exceeded.
maxCardinality: 65536
# 'defaultValue' sets a constant value that is used instead of 'values' when
# 'maxCardinality' is exceeded within 'flushInterval'
defaultValue: unknown
Stream
Stream
Below is the default configuration from: stream/config.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYWdncmVnYXRvciIgOiB7CiAgICAgICJ0eXBlIiA6ICJhcnJheSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICJuYW1lIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTG9naWNhbCBuYW1lIG9mIGFnZ3JlZ2F0b3JcblxuUHJvdmlkZXMgYSBsb2dpY2FsIG5hbWUgZm9yIHRoaXMgYWdncmVnYXRvciAoZS5nLiwgJ2Vycm9ycycpLiBUaGlzIHZhbHVlIGlzIGFjY2Vzc2libGUgYXQgcnVuLXRpbWUgdmlhIHRoZSBpbnRyaW5zaWMgJ2lucHV0TmFtZScgZmllbGQgdG8gaWRlbnRpZnkgVGVuWFN1bW1hcmllcyBvcmlnaW5hdGluZyBmcm9tIHRoaXMgYWdncmVnYXRvci4iCiAgICAgICAgICB9LAogICAgICAgICAgImVuYWJsZWQiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJFbmFibGUvZGlzYWJsZSB0aGlzIGFnZ3JlZ2F0b3JcblxuU2V0cyB3aGV0aGVyIHRvIG9wZW4gdGhlIGlucHV0IHN0cmVhbS4gVG8gZW5hYmxlIHRoaXMgaW5wdXQgb25seSB3aGVuIGFuICdhZ2dyZWdhdGVFcnJvcnMnIHN0YXJ0dXAgYXJndW1lbnQgdmFsdWUgaXMgdHJ1dGh5OiAgYGBgIHlhbWwgLi4uIGFnZ3JlZ2F0b3I6ICAgZW5hYmxlZDogJD1UZW5YRW52LmdldChcImFnZ3JlZ2F0ZUVycm9yc1wiKSBgYGAgKERlZmF1bHQ6IHRydWUpIiwKICAgICAgICAgICAgImRlZmF1bHQiIDogInRydWUiCiAgICAgICAgICB9LAogICAgICAgICAgImZpZWxkcyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAiYXJyYXkiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIGZpZWxkIG5hbWVzIGJ5IHdoaWNoIHRvIGFnZ3JlZ2F0ZSBUZW5YT2JqZWN0c1xuXG5Qcm92aWRlcyBhIGxpc3Qgb2YgaW50cmluc2ljL2V4dHJhY3RlZC9jYWxjdWxhdGVkIFtUZW5YT2JqZWN0XShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9qcy8jVGVuWE9iamVjdCkgZmllbGQgbmFtZXMgYnkgd2hpY2ggdG8gYWdncmVnYXRlIGluc3RhbmNlcy4gIFdoZW4gdGhlIGFnZ3JlZ2F0b3IgZmx1c2hlcyB0aGUgaW4tbWVtIHRhYmxlIHRvIHByb2R1Y2VkIFRlblhTdW1tYXJpZXMsIGVhY2ggZ2VuZXJhdGVkIFRlblhTdW1tYXJ5IGluc3RhbmNlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgdG90YWwgdmFsdWVzIHZpYSBpdHMgW3N1bW1hcnlUb3RhbHNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YU3VtbWFyeStzdW1tYXJ5VmFsdWVzKSBhcnJheSBmaWVsZC4iLAogICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiZGVmYXVsdFZhbHVlIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQSBjb25zdGFudCB2YWx1ZSB0byBkZWZhdWx0IGlmICdtYXhDYXJkaW5hbGl0eScgaXMgZXhjZWVkZWRcblxuRGVmaW5lcyBhIGNvbnN0YW50IHZhbHVlIHRvIHVzZSBpbnN0ZWFkIG9mIFtmaWVsZCB2YWx1ZXNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZpZWxkcykgd2hlbiB0aGUgY3VycmVudCBudW1iZXIgb2Ygcm93cyB3aXRoaW4gdGhlIGFnZ3JlZ2F0b3IncyBpbi1tZW0gdGFibGUgZHVyaW5nIFtmbHVzaEludGVydmFsXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaGludGVydmFsKSBleGNlZWRzIFttYXhDYXJkaW5hbGl0eV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vYWdncmVnYXRlLyNhZ2dyZWdhdG9ybWF4Y2FyZGluYWxpdHkpLiAgVGhpcyB2YWx1ZSBwcmV2ZW50cyBhbiBvdXQtb2YtbWVtIGVycm9yIGlmIFRlblhPYmplY3RzIHdob3NlIFtmaWVsZCB2YWx1ZXNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZpZWxkcykgYXJlIG9mIGhpZ2ggY2FyZGluYWxpdHksIHdoaWNoIGNhbiBjYXVzZSB0aGUgaW4tbWVtIHRhYmxlIHRvIGdyb3cgYmV5b25kIHRoZSBjb25maW5lcyBvZiB0aGUgaG9zdCBKVk0gaGVhcC4gIFRoaXMgZXJyb3IgaXMgcG9zc2libGUgaWYgW2ZpZWxkc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vYWdncmVnYXRlLyNhZ2dyZWdhdG9yZmllbGRzKSBjb250YWlucyBhIGNhbGN1bGF0ZWQvZXh0cmFjdGVkIGZpZWxkIHdob3NlIHZhbHVlIGlzIGFscGhhbnVtZXJpYyAoZS5nLiwgJ3NwYW5JRCcpIGFuZCBpcyBwcmFjdGljYWxseSB1bmlxdWUgdG8gZWFjaCBUZW5YT2JqZWN0LiIKICAgICAgICAgIH0sCiAgICAgICAgICAidG90YWxGaWVsZHMiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgZmllbGRzIHdob3NlIHZhbHVlcyB0byB0YWxseSBpbnRvIGdlbmVyYXRlZCBUZW5YU3VtbWFyaWVzXG5cblNwZWNpZmllcyBhIGxpc3Qgb2YgaW50cmluc2ljIGNhbGN1bGF0ZWQvZXh0cmFjdGVkIFRlblhPYmplY3QgZmllbGQgbmFtZXMgdG8gdGFsbHkgYW5kIHdyaXRlIGludG8gYWdncmVnYXRlZCBUZW5YU3VtbWFyeSBpbnN0YW5jZXMgd2l0aGluIGEgdGFyZ2V0IGZsdXNoICBbdGhyZXNob2xkXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaHRocmVzaG9sZCkgb3IgW2ludGVydmFsXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaGludGVydmFsKS4gIEZvciBleGFtcGxlLCBzZXR0aW5nIGEgdmFsdWUgb2Y6IGBwcmljZWAgaW50byB0aGlzIGFycmF5IHdpbGwgdGFsbHkgdGhlIHByaWNlcyBvZiBhbGwgVGVuWE9iamVjdHMgYWdncmVnYXRlZCBpbnRvIGEgdGFyZ2V0IG91dHB1dCBUZW5YU3VtbWFyeSBpbnN0YW5jZS4gICBBIG1hdGNoaW5nIGBwcmljZWAgdmFsdWUgY29udGFpbmluZyB0aGUgc3VtIG9mIGFnZ3JlZ2F0ZWQgcHJpY2VzIHdpbGwgYmUgYWNjZXNzaWJsZSBmb3IgZWFjaCBUZW5YU3VtbWFyeSBpbnN0YW5jZSB2aWEgaXRzICBbc3VtbWFyeVRvdGFsc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhTdW1tYXJ5K3N1bW1hcnlUb3RhbHMpIGFycmF5LiIsCiAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJtYXhDYXJkaW5hbGl0eSIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTWF4IG51bWJlciBvZiBjb25jdXJyZW50IHJvd3Mgd2l0aGluIHRoZSBhZ2dyZWdhdG9yIGluLW1lbSB0YWJsZSB3aXRoaW4gdGhlIGZsdXNoIGludGVydmFsXG5cblNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHVuaXF1ZSByb3dzIHdpdGhpbiB0aGUgYWdncmVnYXRvcidzIGluLW1lbSB0YWJsZS4gSWYgdGhlIG51bWJlciBvZiByb3dzIGV4Y2VlZHMgdGhpcyB2YWx1ZSBkdXJpbmcgW2ZsdXNoSW50ZXJ2YWxdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZsdXNoaW50ZXJ2YWwpICwgdGhlICdhZ2dyZWdhdG9yRGVmYXVsdFZhbHVlJyB2YWx1ZSB3aWxsIGJlIGZvciBhbGwgVGVuWE9iamVjdHMgaW5zdGVhZCBvZiBbZmllbGQgdmFsdWVzXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmaWVsZHMpIHVudGlsIHRoZSBhZ2dyZWdhdG9yIGlzIGZsdXNoZWQuICBUaGlzIHZhbHVlIGlzIHVzZWQgYXMgYSBiYWNrc3RvcCB0byBlbnN1cmUgdGhhdCB0aGUgYWdncmVnYXRvcidzIGluLW1lbSB0YWJsZSBkb2VzIG5vdCBvdmVyZmxvdyB3aGVuIGV4dHJhY3RpbmcgYW5kICBhZ2dyZWdhdGluZyB2ZXJ5IGhpZ2ggY2FyZGluYWxpdHkgdmFsdWVzIGZyb20gdGhlIGZpZWxkcyBvZiBUZW5YT2JqZWN0cyBwYXNzZWQgdG8gdGhpcyBhZ2dyZWdhdG9yLiAgSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQgb3Igc2V0IHRvIDAsIHRoZSBhZ2dyZWdhdG9yIGhhcyBubyBjYXAuIFRoaXMgbWF5IHJlc3VsdCBpbiBhbiBvdXQtb2YtbWVtIGVycm9yIHdoZW4gdmVyeSBoaWdoIGNhcmRpbmFsaXR5IChlLmcuLCAnc3BhbklEJywgJ0dVSUQnKSBbZmllbGRzXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmaWVsZHMpIGFyZSBzcGVjaWZpZWQuIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICB9LAogICAgICAgICAgImZpbHRlciIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkEgSmF2YVNjcmlwdCBleHByZXNzaW9uIGFuIFRlblhPYmplY3QgbXVzdCBldmFsdWF0ZSBhcyAndHJ1dGh5JyBhZ2FpbnN0IHRvIGJlIGFnZ3JlZ2F0ZWRcblxuUHJvdmlkZXMgYSB3YXkgdG8gY29udHJvbCB3aGljaCBUZW5YT2JqZWN0cyBhcmUgaW5jb3Jwb3JhdGVkIGludG8gdGhpcyBhZ2dyZWdhdG9yLiBVbmxpa2UgdGhlICdhZ2dyZWdhdG9yRW5hYmxlZCcsIHdoaWNoIGVuYWJsZXMvZGlzYWJsZXMgdGhpcyBhZ2dyZWdhdG9yIGFsdG9nZXRoZXIsIHRoaXMgSmF2YVNjcmlwdCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBwZXIgVGVuWE9iamVjdCB0byBwcm92aWRlIGdyYW51bGFyIGNvbnRyb2wgb3ZlciB3aGF0IGluZm9ybWF0aW9uIHRvIGFnZ3JlZ2F0ZS4gIEZvciBleGFtcGxlLCB0byBvbmx5IGFnZ3JlZ2F0ZSBUZW5YT2JqZWN0cyByZWFkIGZyb20gYSBzcGVjaWZpZWQgaW5wdXQ6ICBgYGAgeWFtbCBhZ2dyZWdhdG9yOiAgIGZpbHRlcjogdGhpcy5pbnB1dE5hbWUgPT0gXCJlbGFzdGljXCIgYGBgICBUbyBhcHBseSBtb3JlIGNvbXBsZXggbG9naWMsIGludm9rZSBhbiAxMHggSmF2YVNjcmlwdCBmdW5jdGlvbiBkZWNsYXJlZCBpbiBhIC5qcyBmaWxlIGJ5IHBhc3NpbmcgaXQgdG8gdGhlIDEweCBFbmdpbmUgYXQgc3RhcnR1cCAoZS5nLiwgJCB0ZW54IHJ1biBAbXkuanMpLiAgYGBgIHlhbWwgYWdncmVnYXRvcjogICAuLi4gICBmaWx0ZXI6IG15QWdncmVnYXRvckZpbHRlcigpIGBgYCAgRm9yIGFuIGV4YW1wbGUgZnVuY3Rpb24sIHNlZSBbcG9saWN5LXJlZ3VsYXRvci1vYmplY3QuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L21vZHVsZXMvYmxvYi9tYWluL3BpcGVsaW5lcy9ydW4vbW9kdWxlcy9yZWd1bGF0ZS9wb2xpY3kvcG9saWN5LXJlZ3VsYXRvci1vYmplY3QuanMpLiIKICAgICAgICAgIH0sCiAgICAgICAgICAiZmx1c2hUaHJlc2hvbGQiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgIm51bWJlciIsCiAgICAgICAgICAgICAgInN0cmluZyIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1heGltdW0gdGhlIG51bWJlciBvZiBUZW5YT2JqZWN0cyB0byBhZ2dyZWdhdGUgYmVmb3JlIHRoZSBhZ2dyZWdhdG9yIGZsdXNoZXNcblxuQ29udHJvbHMgaG93IG1hbnkgVGVuWE9iamVjdHMgdG8gdXBzZXJ0IGludG8gdGhpcyBhZ2dyZWdhdG9yIChlLmcuLCAxMDAwMCkgYmVmb3JlIHRoZSBhZ2dyZWdhdG9yIHRyYW5zZm9ybXMgdGhlIHJvd3Mgb2YgaXRzIGluLW1lbSB0YWJsZSBpbnRvIFRlblhTdW1tYXJpZXMgaW5zdGFuY2VzIGFuZCBmbHVzaGVzIHRoZW0gaW50byB0aGUgcGlwZWxpbmUuICBJZiBub3Qgc2V0LCB0aGUgW2ZsdXNoSW50ZXJ2YWxdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2FnZ3JlZ2F0ZS8jYWdncmVnYXRvcmZsdXNoaW50ZXJ2YWwpIGFyZ3VtZW50IGRldGVybWluZXMgd2hlbiB0byBmbHVzaCB0aGUgYWdncmVnYXRvci4gSWYgbmVpdGhlciBhcmd1bWVudCBpcyBwcmVzZW50LCB0aGUgYWdncmVnYXRvciBvbmx5IGZsdXNoZXMgcGVuZGluZyBUZW5YU3VtbWFyaWVzIHdoZW4gdGhlIHBpcGVsaW5lIHRlcm1pbmF0ZXMuIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICB9LAogICAgICAgICAgImZsdXNoSW50ZXJ2YWwiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJJbnRlcnZhbCB0byB3YWl0IGJlZm9yZSB0aGUgYWdncmVnYXRvciBmbHVzaGVzXG5cblNldHMgdGhlIHBlcmlvZCAoZS5nLiwgJzMwcycpLCBhZnRlciB3aGljaCB0aGUgYWdncmVnYXRvciB0cmFuc2Zvcm1zIHRoZSByb3dzIG9mIGl0cyBpbi1tZW0gdGFibGUgaW50byBUZW5YU3VtbWFyaWVzIGluc3RhbmNlcyBhbmQgZmx1c2hlcyB0aGVtIGludG8gdGhlIHBpcGVsaW5lLiAgSWYgc2V0LCB0aGUgW2ZsdXNoVGhyZXNob2xkXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9hZ2dyZWdhdGUvI2FnZ3JlZ2F0b3JmbHVzaHRocmVzaG9sZCkgIGFyZ3VtZW50IGRldGVybWluZXMgd2hlbiB0byBmbHVzaCB0aGUgYWdncmVnYXRvci4gSWYgbmVpdGhlciBhcmd1bWVudCBpcyBwcmVzZW50LCB0aGUgYWdncmVnYXRvciBvbmx5IGZsdXNoZXMgcGVuZGluZyBUZW5YU3VtbWFyaWVzIHdoZW4gdGhlIHBpcGVsaW5lIHRlcm1pbmF0ZXMuIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmVkIiA6IFsKICAgICAgICAgICJuYW1lIiwKICAgICAgICAgICJmaWVsZHMiCiAgICAgICAgXQogICAgICB9CiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'run' Query Stream application settings
# This configuration defines the settings for use by the Query Stream operation of the Streamer app.
# To learn more see https://doc.log10x.com/apps/cloud/analyzer/#query
# Set the 10x pipeline to 'run'
tenx: run
# ============================== Aggregator Options ===========================
# Multiple aggregators can be defined below
aggregator:
# Defines an aggregator for all events seen by this pipeline
# This enables an output metric to show an accurate (lossless) metric of the
# data processed by this pipeline, even if it was later dropped.
- name: streamed_events
# 'filter' sets a JavaScript expression that TenXObjects must evaluate as truthy to be aggregated.
# To learn more see https://doc.log10x.com/run/output/regulate/#filter-expressions
filter: "this.isObject && !this.isDropped"
# 'values' set the names of intrinsic/extracted/calculated fields whose combined values
# identify a unique row within the aggregator's in-mem table for
# each object passed to it.
# By default, this configuration uses the enrichment fields specified below.
fields:
- $=yield TenXEnv.get("enrichmentFields")
# 'totalFields' specifies fields to extract and tally into generated TenXSummaries
totalFields: []
# 'flushThreshold' sets the max number of TenXObjects whose values to upsert into
# the aggregator's in-mem table. Once exceeded, the aggregator instantiates TenXSummaries
# from the table rows to send to output and reset the table.
flushThreshold: 10000
# 'flushInterval' sets a periodic interval, after which the aggregator
# flushes the rows of its in-mem table into the pipeline as TenXSummary instances.
flushInterval: 2s
# 'maxCardinality' sets the maximum number of rows for the aggregator's
# in-mem table. If an TenXObjects whose 'values' are not contained in the table
# is passed to the aggregator, 'defaultValue' will be used for it instead
# until the aggregator flushes its in-mem table after 'flushInterval' or 'flushThreshold'
# are exceeded.
maxCardinality: 65536
# 'defaultValue' sets a constant value that is used instead of 'values' when
# 'maxCardinality' is exceeded within 'flushInterval'
defaultValue: unknown
Options
Specify the options below to configure multiple Aggregator:
| Name | Description |
|---|---|
| aggregatorName | Logical name of aggregator |
| aggregatorEnabled | Enable/disable this aggregator |
| aggregatorFields | List of field names by which to aggregate TenXObjects |
| aggregatorDefaultValue | A constant value to default if 'maxCardinality' is exceeded |
| aggregatorTotalFields | List of fields whose values to tally into generated TenXSummaries |
| aggregatorMaxCardinality | Max number of concurrent rows within the aggregator in-mem table within the flush interval |
| aggregatorFilter | A JavaScript expression an TenXObject must evaluate as 'truthy' against to be aggregated |
| aggregatorFlushThreshold | Maximum the number of TenXObjects to aggregate before the aggregator flushes |
| aggregatorFlushInterval | Interval to wait before the aggregator flushes |
aggregatorName
Logical name of aggregator.
| Type | Required |
|---|---|
| String | ✔ |
Provides a logical name for this aggregator (e.g., 'errors'). This value is accessible at run-time via the intrinsic 'inputName' field to identify TenXSummaries originating from this aggregator.
aggregatorEnabled
Enable/disable this aggregator.
| Type | Default |
|---|---|
| String | true |
sets whether to open the input stream.
To enable this input only when an 'aggregateErrors' startup argument value is truthy:
aggregatorFields
List of field names by which to aggregate TenXObjects.
| Type | Required |
|---|---|
| List | ✔ |
Provides a list of intrinsic/extracted/calculated TenXObject field names by which to aggregate instances.
When the aggregator flushes the in-mem table to produced TenXSummaries, each generated TenXSummary instance provides access to the total values via its summaryTotals array field.
aggregatorDefaultValue
A constant value to default if 'maxCardinality' is exceeded.
| Type | Default |
|---|---|
| String | "" |
Defines a constant value to use instead of field values when the current number of rows within the aggregator's in-mem table during flushInterval exceeds maxCardinality.
This value prevents an out-of-mem error if TenXObjects whose field values are of high cardinality, which can cause the in-mem table to grow beyond the confines of the host JVM heap.
This error is possible if fields contains a calculated/extracted field whose value is alphanumeric (e.g., 'spanID') and is practically unique to each TenXObject.
aggregatorTotalFields
List of fields whose values to tally into generated TenXSummaries.
| Type | Default |
|---|---|
| List | [] |
Specifies a list of intrinsic calculated/extracted TenXObject field names to tally and write into aggregated TenXSummary instances within a target flush threshold or interval.
For example, setting a value of: price into this array will tally the prices of all TenXObjects
aggregated into a target output TenXSummary instance.
A matching price value containing the sum of aggregated prices will be accessible for each TenXSummary instance via its
summaryTotals array.
aggregatorMaxCardinality
Max number of concurrent rows within the aggregator in-mem table within the flush interval.
| Type | Default |
|---|---|
| Number | 0 |
Sets the maximum number of unique rows within the aggregator's in-mem table. If the number of rows exceeds this value during flushInterval , the 'aggregatorDefaultValue' value will be for all TenXObjects instead of field values until the aggregator is flushed.
This value is used as a backstop to ensure that the aggregator's in-mem table does not overflow when extracting and aggregating very high cardinality values from the fields of TenXObjects passed to this aggregator.
If no value is provided or set to 0, the aggregator has no cap. This may result in an out-of-mem error when very high cardinality (e.g., 'spanID', 'GUID') fields are specified.
aggregatorFilter
A JavaScript expression an TenXObject must evaluate as 'truthy' against to be aggregated.
| Type | Default |
|---|---|
| String | "" |
Provides a way to control which TenXObjects are incorporated into this aggregator. Unlike the 'aggregatorEnabled', which enables/disables this aggregator altogether, this JavaScript expression is evaluated per TenXObject to provide granular control over what information to aggregate.
For example, to only aggregate TenXObjects read from a specified input:
To apply more complex logic, invoke an 10x JavaScript function declared in a .js file by passing it to the 10x Engine at startup (e.g., $ tenx run @my.js).
For an example function, see policy-regulator-object.js.
aggregatorFlushThreshold
Maximum the number of TenXObjects to aggregate before the aggregator flushes.
| Type | Default |
|---|---|
| Number | 0 |
Controls how many TenXObjects to upsert into this aggregator (e.g., 10000) before the aggregator transforms the rows of its in-mem table into TenXSummaries instances and flushes them into the pipeline.
If not set, the flushInterval argument determines when to flush the aggregator. If neither argument is present, the aggregator only flushes pending TenXSummaries when the pipeline terminates.
aggregatorFlushInterval
Interval to wait before the aggregator flushes.
| Type | Default |
|---|---|
| String | "" |
Sets the period (e.g., '30s'), after which the aggregator transforms the rows of its in-mem table into TenXSummaries instances and flushes them into the pipeline.
If set, the flushThreshold argument determines when to flush the aggregator. If neither argument is present, the aggregator only flushes pending TenXSummaries when the pipeline terminates.
This unit is defined in aggregate/unit.yaml.