SigNoz/signoz · error
invalid_input
invalid_input
Error message
PipelineOperator.ID is required
What it means
isValidOperator (used by Pipeline.IsValid) requires every operator in a pipeline config to have a non-empty ID before its type-specific validation runs. Operator IDs identify operators in references and error messages.
Source
Thrown at pkg/types/pipelinetypes/pipeline.go:271
if op.ID == op.Output {
return errors.NewInvalidInputf(errors.CodeInvalidInput, "id and output cannot be same")
}
err := isValidOperator(op)
if err != nil {
return err
}
idUnique[op.ID] = struct{}{}
outputUnique[op.Output] = struct{}{}
}
return nil
}
func isValidOperator(op PipelineOperator) error {
if op.ID == "" {
return errors.New(errors.TypeInvalidInput, errors.CodeInvalidInput, "PipelineOperator.ID is required")
}
switch op.Type {
case "json_parser":
if op.ParseFrom == "" && op.ParseTo == "" {
return errors.NewInvalidInputf(errors.CodeInvalidInput, "parse from and parse to of %s json operator cannot be empty", op.ID)
}
for k := range op.Mapping {
if !slices.Contains(validMappingVariableTypes, strings.ToLower(k)) {
return errors.NewInvalidInputf(errors.CodeInvalidInput, "%s is not a valid mapping type in processor %s", k, op.ID)
}
}
case "grok_parser":
if op.Pattern == "" {
return errors.NewInvalidInputf(errors.CodeInvalidInput, "pattern of %s grok operator cannot be empty", op.ID)
}
case "regex_parser":View on GitHub (pinned to 5069bf80b0)
Solutions
- Add a unique non-empty id to each operator (e.g. json_parser_input)
- Check the pipeline schema — id is required for all operator types
- Use the SigNoz pipeline UI which auto-generates ids
- Validate with IsValid client-side before submitting
Example fix
// before
{"type":"json_parser","parseFrom":"body"}
// after
{"id":"parse_body","type":"json_parser","parseFrom":"body"}
Defensive patterns
Strategy: validation
Validate before calling
pipeline.operators.every(op => typeof op.id === 'string' && op.id.length > 0)
Type guard
function operatorsHaveIDs(ops: Array<{id?:string}>): boolean { return ops.every(o => typeof o.id === 'string' && o.id !== ''); } Prevention
- Auto-generate ids in pipeline builders
- Run IsValid client-side before create/update
When it happens
Trigger: Creating/updating a logging pipeline where an operator entry in spec.pipeline operators[] has no id field or an empty string id.
Common situations: Pipeline YAML/JSON authored by hand omitting id; conversion from other formats (Fluent Bit) that drop operator names; UI regressions not generating unique ids.
Related errors
AI-assisted analysis of SigNoz/signoz@5069bf80b0 (2026-08-28).
Data as JSON: /api/errors/fd1581bdaa1a8acb.
Report an issue: GitHub.