Structured Runtime Events
ETLPlus emits structured runtime events on STDERR when --event-format jsonl is selected for
supported execution commands.
The stable event schema for v1.x is etlplus.event.v1.
Stable Contract
The stable user-facing event contract covers extract, load, run, transform, and validate.
Every emitted event in schema version 1 includes these required base fields:
Field |
Type |
Meaning |
|---|---|---|
|
|
Stable schema name. Always |
|
|
Stable schema version. Always |
|
|
|
|
|
Emitting CLI command. |
|
|
One of |
|
|
Stable command invocation identifier. |
|
|
ISO-8601 UTC timestamp. |
Allowed lifecycle values in etlplus.event.v1 are exactly:
startedcompletedfailed
Stable Command-Context Fields
These command-context fields are part of the stable contract because they are emitted consistently
for that command across started, completed, and failed events.
Command |
Stable command-context fields |
|---|---|
|
|
|
|
|
|
|
|
|
|
Other command-specific fields such as destination, valid, and result_status may appear
additively without a schema bump, but they are not part of the required base contract.
run.failed is the stable failure lifecycle for both:
exception-driven run failures
handled DAG summary failures returned by
etlplus run
Consumers should rely on lifecycle plus status rather than assuming only exceptions emit failed
events.
Compatibility Promise
The etlplus.event.v1 compatibility promise is:
additive optional fields are allowed without a schema bump
removing fields, renaming fields, changing the meaning of existing fields, changing required field types, or changing the allowed lifecycle set requires a new schema version
the stable contract applies to the emitted event envelope, not to incidental implementation details inside individual handlers
Relationship to Run History
Only etlplus run currently persists local run history.
For run:
run_idis the join key across the STDERR event stream, the STDOUT run envelope, and persisted historylifecycle events describe the command invocation
durable run/job state lives in normalized history records
DAG job detail is persisted in
job_runs; it is not a one-event-per-job stream contract today
See the run history guide for the stable normalized run/job shapes and the event-to-history field mapping.
Optional Telemetry Bridge
ETLPlus can also forward the same structured runtime events and persisted run/job history records into optional OpenTelemetry spans and metrics without changing the default CLI output.
Activation is opt-in.
The
telemetryextra installs the OpenTelemetry API and SDK.Environment activation applies to supported execution commands.
etlplus runalso accepts pipeline-level defaults through a top-leveltelemetryblock.
Current environment variables:
ETLPLUS_TELEMETRY_ENABLED=true|falseETLPLUS_TELEMETRY_EXPORTER=opentelemetry|noneETLPLUS_TELEMETRY_SERVICE_NAME=<name>
Example pipeline defaults for etlplus run:
telemetry:
enabled: true
exporter: opentelemetry
service_name: etlplus
Quick local validation example:
export ETLPLUS_TELEMETRY_ENABLED=true
export ETLPLUS_TELEMETRY_EXPORTER=opentelemetry
export ETLPLUS_TELEMETRY_SERVICE_NAME=etlplus-local
export OTEL_TRACES_EXPORTER=console
export OTEL_METRICS_EXPORTER=console
etlplus run pipeline.yml
When local history persistence is enabled, ETLPlus emits the runtime event stream immediately and records additional run/job metrics after the normalized history rows are written.