vectordotdev/vector · critical

Traces are not supported.

Error message

Traces are not supported.

What it means

The aws_ec2_metadata enrichment transform copies EC2 metadata into events. It handles Event::Log (insert fields) and Event::Metric (replace tags) explicitly; Event::Trace has no representation, so that match arm panics with 'Traces are not supported.' as a loud statement that traces must never reach this transform.

Source

Thrown at src/transforms/aws_ec2_metadata.rs:339

    }
}

impl Ec2MetadataTransform {
    fn transform_one(&mut self, mut event: Event) -> Event {
        let state = self.state.load();
        match event {
            Event::Log(ref mut log) => {
                state.iter().for_each(|(k, v)| {
                    log.insert(&k.log_path, v.clone());
                });
            }
            Event::Metric(ref mut metric) => {
                state.iter().for_each(|(k, v)| {
                    metric
                        .replace_tag(k.metric_tag.clone(), String::from_utf8_lossy(v).to_string());
                });
            }
            Event::Trace(_) => panic!("Traces are not supported."),
        }
        event
    }
}

struct MetadataClient {
    client: HttpClient<Body>,
    host: Uri,
    token: Option<(Bytes, Instant)>,
    keys: Keys,
    state: Arc<ArcSwap<Vec<(MetadataKey, Bytes)>>>,
    refresh_interval: Duration,
    refresh_timeout: Duration,
    fields: HashSet<String>,
    tags: HashSet<String>,
}

#[derive(Debug, Deserialize)]

View on GitHub (pinned to 3708c39b12)

Solutions

  1. Do not route traces into aws_ec2_metadata: keep a dedicated trace path and list only log/metric sources as inputs
  2. Insert a filter or remap transform before it that drops or diverts trace events
  3. Run `vector validate` - a valid config cannot produce this; check why the trace edge exists
  4. If stock Vector hits it, report it: the transform should reject trace inputs at config time

Example fix

# before
transforms:
  enrich:
    type: aws_ec2_metadata
    inputs: ["*"]

# after
transforms:
  enrich:
    type: aws_ec2_metadata
    inputs: ["my_logs_source", "my_metrics_source"]
Defensive patterns

Strategy: type-guard

Type guard

fn ec2_metadata_eligible(event: &Event) -> bool {
    matches!(event, Event::Log(_) | Event::Metric(_))
}

Prevention

When it happens

Trigger: A trace event (from an otlp/datadog_agent traces producer or synthetic source) routed into aws_ec2_metadata - e.g. via a route/filter transform forwarding all event kinds, or by calling the transform programmatically on a trace. Topology type-checking should reject trace inputs to this transform, so firing the panic means validation was bypassed or has a gap.

Common situations: Wildcard routing (inputs: ["*"]) on type-restricted transforms; custom topology code feeding mixed Event streams into a boxed transform; Vector versions where multi-output trace sources introduced validation gaps.

Related errors


AI-assisted analysis of vectordotdev/vector@3708c39b12 (2026-08-20). Data as JSON: /api/errors/46d3e37af47c844b. Report an issue: GitHub.