quickwit-oss/quickwit · error · anyhow::Error
VRL transforms are not supported for OTLP input formats
Error message
VRL transforms are not supported for OTLP input formats
What it means
Quickwit source configs allow VRL (Vector Remap Language) transforms to rewrite documents before indexing, but OTLP input formats (OtlpLogs/Traces in Json or Protobuf) have their own strict ingestion pipeline that cannot run VRL transforms. During source config validation, `validate_and_build` bails out if a VRL transform is attached to a source whose `input_format` is one of the four OTLP variants.
Source
Thrown at quickwit/quickwit-config/src/source_config/serialize.rs:147
| SourceParams::File(FileSourceParams::Notifications(_)) => {}
_ => {
if self.num_pipelines > 1 {
bail!(
"Quickwit currently supports multiple pipelines only for GCP PubSub or Kafka sources. open an issue https://github.com/quickwit-oss/quickwit/issues if you need the feature for other source types"
);
}
}
}
if let Some(transform_config) = &self.transform {
if matches!(
self.input_format,
SourceInputFormat::OtlpLogsJson
| SourceInputFormat::OtlpLogsProtobuf
| SourceInputFormat::OtlpTracesJson
| SourceInputFormat::OtlpTracesProtobuf
) {
bail!("VRL transforms are not supported for OTLP input formats");
}
transform_config.validate_vrl_script()?;
}
Ok(SourceConfig {
source_id: self.source_id,
num_pipelines,
enabled: self.enabled,
source_params: self.source_params,
transform_config: self.transform,
input_format: self.input_format,
})
}
}
impl From<SourceConfig> for SourceConfigV0_8 {
fn from(source_config: SourceConfig) -> Self {
SourceConfigV0_8 {View on GitHub (pinned to a39730c5cd)
Solutions
- Remove the `transform.vrl` section from the source config, keeping the OTLP input format.
- If transformation is required, switch `input_format` to a plain format (e.g. `json` or `plain_message`) and handle the OTLP payload shape with VRL instead.
- Ingest OTLP data untransformed via the OTLP gRPC/HTTP endpoints and apply any reshaping at the client side before sending.
Example fix
// before (source_config.yaml) input_format: otlp_traces_proto transform: vrl: ". = parse_proto!(.message)" // after input_format: otlp_traces_proto
Defensive patterns
Strategy: validation
Validate before calling
fn validate_source(cfg: &SourceConfig) -> Result<(), String> {
let is_otlp = matches!(cfg.input_format,
SourceInputFormat::OtlpLogsJson | SourceInputFormat::OtlpLogsProtobuf
| SourceInputFormat::OtlpTracesJson | SourceInputFormat::OtlpTracesProtobuf);
if is_otlp && cfg.transform.is_some() {
return Err("remove VRL transform when input_format is OTLP".into());
}
Ok(())
} Type guard
let is_otlp = matches!(input_format, SourceInputFormat::OtlpLogsJson | SourceInputFormat::OtlpLogsProtobuf | SourceInputFormat::OtlpTracesJson | SourceInputFormat::OtlpTracesProtobuf);
Prevention
- Never combine VRL transform blocks with OTLP input formats in source templates.
- Validate source configs in CI before deploying them to Quickwit.
- Do client-side transformation for OTLP payloads instead of server-side VRL.
When it happens
Trigger: Defining or updating a source config (via `load_source_config_from_user_config` or `load_source_config_update`) with `transform: {vrl: ...}` while `input_format` is `otlp_logs_json`, `otlp_logs_protobuf`, `otlp_traces_json`, or `otlp_traces_protobuf`.
Common situations: Copying a Kafka/Kinesis source config that used VRL and switching its input_format to OTLP; trying to pre-filter or enrich OTLP traces/logs with VRL because it worked for JSON log sources; tooling that generates source configs generically without checking input format.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- index ID pattern `{pattern}` is invalid: patterns must not c
- index ID pattern `{pattern}` is invalid: an index ID must ha
- index config merge policy `max_merge_factor` must be superio
- failed to compile VRL script: {formatter}
- {} contains an empty label name: {}
AI-assisted analysis of quickwit-oss/quickwit@a39730c5cd (2026-09-08).
Data as JSON: /api/errors/badae81ffeefe34f.
Report an issue: GitHub.