This release enhances TQL’s data transformation capabilities with lambda expressions that can capture surrounding fields in map and where functions, plus grouped enumeration for separate event counting. We’ve also improved operator composability with enhanced to_splunk parameters, added octet counting support for syslog messages, and fixed critical issues in Kafka message handling and HTTP request processing.
Download the release on GitHub.
Features
Section titled “Features”Grouped enumeration
Section titled “Grouped enumeration”The enumerate operator now supports a group option to enumerate events
separately based on a value.
For example, to have a field act as a counter for a value, use the following pipeline:
from {x: 1}, {x: 2}, {x: "1"}, {x: 2}enumerate count, group=xcount = count + 1{ count: 1, x: 1,}{ count: 1, x: 2,}{ count: 1, x: "1",}{ count: 2, x: 2,}Flag for preventing automatic pipeline starts
Section titled “Flag for preventing automatic pipeline starts”When the node starts, pipelines that were previously running are immediately
started. The new --no-autostart flag can be used to disable this behavior.
Lambdas in map and where can capture surrounding fields
Section titled “Lambdas in map and where can capture surrounding fields”Lambda expressions in the map and where functions can now capture and access fields from
the surrounding context, enabling more powerful data transformations.
For example:
from { host: "server1", ports: [80, 443, 8080]}ports = ports.map(p => {host: host, port: p}){ host: "server1", ports: [ { host: "server1", port: 80, }, { host: "server1", port: 443, }, { host: "server1", port: 8080, }, ],}Improve to_splunk composability
Section titled “Improve to_splunk composability”We have improved the composability of the to_splunk operator. The host and
source parameters now accept a string-expression instead of only a constant.
Further, there is a new event parameter that can be used to specify what should
be send as the event to the Splunk HTTP Event Collector.
The combination of these options improves the composability of the operator, allowing you to set event-specific Splunk parameters, while not also transmitting them as part of the actual event:
from { host: "my-host", a: 42, b: 0}
// move the entire event into `event`this = { event: this }
// hoist the splunk specific field back outmove host = event.host
to_splunk "https://localhost:8088", hec_token=secret("splunk-hec-token"), host=host, event=eventBy @IyeOnline in #5478.
Octet Counting in read_syslog
Section titled “Octet Counting in read_syslog”We have added a new option octet_counting to the read_syslog operator.
Enabling this option will determine messages boundaries according to RFC6587
instead of our heuristic.
By @IyeOnline in #5472.
Changes
Section titled “Changes”Dedicated Syslog Schema Names
Section titled “Dedicated Syslog Schema Names”The read_syslog operator now produces dedicated schemas syslog.rfc5425,
syslog.rfc3164 and syslog.unknown instead of an unspecific tenzir.syslog.
By @IyeOnline in #5472.
Keep zeek TSV logs as-is in read_zeek_tsv
Section titled “Keep zeek TSV logs as-is in read_zeek_tsv”Parsing Zeek TSV logs no longer attempts to cast the parsed events to a shipped Zeek schema.
Bug Fixes
Section titled “Bug Fixes”Explicit Commits in load_kafka
Section titled “Explicit Commits in load_kafka”The load_kafka operator now explicitly commits messages it has consumed.
By default, it will commit every 1000 messages or every 10 seconds, with the
behavior being customizable via two new operator arguments.
Previously, the operator would commit every message asynchronously loaded by the backing library automatically, which may have included messages that were never accepted by the pipeline.
By @IyeOnline in #5465.
http operator stalling
Section titled “http operator stalling”The http operator now correctly handles its internal waiting state, fixing an
intermittent issue where HTTP requests could hang unexpectedly.
Improved Syslog Output Schema
Section titled “Improved Syslog Output Schema”We have improved our read_syslog operator and parse_syslog
function. They no longer re-order fields if the syslog format
changes mid-stream and produce correctly typed null values for
the special - value.
By @IyeOnline in #5472.
Fixed to_kafka crash
Section titled “Fixed to_kafka crash”The recently released to_kafka operator would fail with an internal error
when used without specifying the message argument.
The operator now works as expected, sending the entire event if the argument is not specified.
By @IyeOnline in #5465.