vectordotdev/vector · error

source output misconfigured - output for port {:?} missing

Error message

source output misconfigured - output for port {:?} missing

What it means

During topology schema computation, every input that points at a source resolves that source's declared outputs by port (source_output_for_port returns Ok(Some(output)) on match, Ok(None) when the source declares no such port). An input referencing a source through an undeclared port hits unreachable!('source output misconfigured - output for port {:?} missing') - config validation should have rejected this earlier, so firing it means a validation gap or programmatic topology misuse.

Source

Thrown at src/topology/schema.rs:46

        return Ok(vec![]);
    }

    // Try to get the definition from the cache.
    if let Some(definition) = cache.get(&(config.schema_enabled(), inputs.to_vec())) {
        return Ok(definition.clone());
    }

    let mut definitions = Vec::new();

    for input in inputs {
        let key = &input.component;

        // If the input is a source, the output is merged into the top-level schema.
        if let Ok(maybe_output) = config.source_output_for_port(key, &input.port) {
            let mut source_definition = input.with_definitions(
                maybe_output
                    .unwrap_or_else(|| {
                        unreachable!(
                            "source output misconfigured - output for port {:?} missing",
                            &input.port
                        )
                    })
                    .schema_definition(config.schema_enabled()),
            );

            if contains_never(&source_definition) {
                return Err(Error::ContainsNever);
            }

            definitions.append(&mut source_definition);
        }

        // If the input is a transform, the output is merged into the top-level schema
        if let Some(inputs) = config.transform_inputs(key) {
            let input_definitions =
                possible_definitions(inputs, config, enrichment_tables.clone(), cache)?;

View on GitHub (pinned to 3708c39b12)

Solutions

  1. Check the source's documented output ports and fix the input's port to one it actually declares (or omit port to use the default output)
  2. Run `vector validate <config>` - the checker names the invalid reference before runtime
  3. Upgrade Vector - port validation and schema generation stay aligned in newer releases
  4. If generating configs programmatically, enumerate port names from the component schema instead of hardcoding

Example fix

# before
sinks:
  out:
    type: console
    inputs: ["dd_agent.nonexistent_port"]

# after
sinks:
  out:
    type: console
    inputs: ["dd_agent.logs"]   # must match a declared source output
Defensive patterns

Strategy: validation

Validate before calling

# CI gate before deploy:
vector validate /etc/vector/*.toml --no-environment

# And assert every referenced port exists (sketch): for each input reference
# 'src.port', confirm 'src' is a source and its component docs' output list contains 'port'.

Prevention

When it happens

Trigger: An inputs entry like { ref = "dd_agent", port = "logs" } where the multi-output source declares different port names, constructed in a way that bypassed the config-time port check; schema generation (schema.enabled = true) then walks the graph and trips the unreachable.

Common situations: A source's port names changing across Vector versions while configs pin the old names; configs generated programmatically with guessed port names; versions where multi-output port validation lagged behind the schema feature.

Related errors


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