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

  1. Remove the `transform.vrl` section from the source config, keeping the OTLP input format.
  2. 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.
  3. 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

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


AI-assisted analysis of quickwit-oss/quickwit@a39730c5cd (2026-09-08). Data as JSON: /api/errors/badae81ffeefe34f. Report an issue: GitHub.