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
- 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)
- Run `vector validate <config>` - the checker names the invalid reference before runtime
- Upgrade Vector - port validation and schema generation stay aligned in newer releases
- 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
- Run `vector validate` on every config change (CI and pre-deploy)
- Derive port names from the component schema/docs, never from memory
- Re-validate configs when upgrading Vector - port names evolve across versions
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
- Replacing unknown sink from fanout: {id}
- Pausing unknown sink from fanout: {id}
- Invalid cache settings: {e:?}
- registered log schema required
- join error or bad poll
AI-assisted analysis of vectordotdev/vector@3708c39b12 (2026-08-20).
Data as JSON: /api/errors/d8e8826c4ba17cc9.
Report an issue: GitHub.