SigNoz/signoz · error
unsupported operator: %s
Error message
unsupported operator: %s
What it means
buildResourceFiltersFromFilterItems encountered a FilterOperator that has no entry in resourceLogOperators and is therefore unsupported for resource (index) filters on logs. Only the operators mapped in resourceLogOperators can be used.
Source
Thrown at pkg/query-service/app/resource/resource_query_builder.go:259
if logsOp, ok := resourceLogOperators[op]; ok {
members := []string{keyName}
if resolveSemconvFamilies {
members = semconv.Members(semconv.KindAttribute, telemetrytypes.FieldKeySelector{
Name: keyName,
Signal: telemetrytypes.SignalTraces,
FieldContext: telemetrytypes.FieldContextResource,
})
}
// the filter
if resourceFilter := buildResourceFilter(logsOp, keyName, op, value, members); resourceFilter != "" {
conditions = append(conditions, resourceFilter)
}
// the additional filter for better usage of the index
if resourceIndexFilter := buildResourceIndexFilter(keyName, op, value, members); resourceIndexFilter != "" {
conditions = append(conditions, resourceIndexFilter)
}
} else {
return nil, fmt.Errorf("unsupported operator: %s", op)
}
}
return conditions, nil
}
func buildResourceFiltersFromGroupBy(groupBy []v3.AttributeKey) []string {
var conditions []string
for _, attr := range groupBy {
if attr.Type != v3.AttributeKeyTypeResource {
continue
}
conditions = append(conditions, fmt.Sprintf("(simpleJSONHas(labels, '%s') AND labels like '%%%s%%')", attr.Key, attr.Key))
}
return conditions
}View on GitHub (pinned to 5069bf80b0)
Solutions
- Check resourceLogOperators in resource_query_builder.go for the supported set and use one of those operators
- Move filters needing unsupported operators to body/attribute columns where they are allowed
- Fix typos in the operator string (must match v3.FilterOperator constants)
Example fix
// before item.Operator = "regex" // on a resource attribute // after item.Operator = v3.FilterOperatorEqual // or filter a body attribute instead
Defensive patterns
Strategy: validation
Validate before calling
const supportedResourceOps = map[v3.FilterOperator]bool{ /* mirror resourceLogOperators */ }
if !supportedResourceOps[item.Operator] {
return fmt.Errorf("operator %s unsupported for resource keys", item.Operator)
} Type guard
func isSupportedResourceOp(op v3.FilterOperator) bool {
_, ok := resourceLogOperators[op]
return ok
} Prevention
- Advertise only supported operators per key context in the UI
- Centralize operator constants instead of raw strings
When it happens
Trigger: Using an operator like regex, contains-with-casing variants, or any new/unmapped operator on a resource attribute key in a logs query filter.
Common situations: Custom API clients or frontend changes introduce an operator string not supported for resource keys (only body/other columns support the fuller set); typos in operator strings such as 'equal' instead of '='.
Related errors
- invalid data type for resource attribute: %s
- failed to validate and cast value for %s: %v
- unsupported aggregate operator
- live tail is only supported for single query
- unsupported operator %s
AI-assisted analysis of SigNoz/signoz@5069bf80b0 (2026-08-28).
Data as JSON: /api/errors/20987ccd0b5e681a.
Report an issue: GitHub.