{"record":{"id":"d990cd04320b1701","repo":"SigNoz/signoz","slug":"filter-item-key-is-invalid-w","errorCode":null,"errorMessage":"filter item key is invalid: %w","messagePattern":"filter item key is invalid: %w","errorType":"validation","errorClass":null,"httpStatus":400,"severity":"error","filePath":"pkg/query-service/model/v3/v3.go","lineNumber":1195,"sourceCode":"\tif f == nil {\n\t\treturn nil\n\t}\n\treturn &FilterSet{\n\t\tOperator: f.Operator,\n\t\tItems:    f.Items,\n\t}\n}\n\nfunc (f *FilterSet) Validate() error {\n\tif f == nil {\n\t\treturn nil\n\t}\n\tif f.Operator != \"\" && f.Operator != \"AND\" && f.Operator != \"OR\" {\n\t\treturn fmt.Errorf(\"operator must be AND or OR\")\n\t}\n\tfor _, item := range f.Items {\n\t\tif err := item.Key.Validate(); err != nil {\n\t\t\treturn fmt.Errorf(\"filter item key is invalid: %w\", err)\n\t\t}\n\t}\n\treturn nil\n}\n\n// For serializing to and from db\nfunc (f *FilterSet) Scan(src interface{}) error {\n\tif data, ok := src.([]byte); ok {\n\t\treturn json.Unmarshal(data, &f)\n\t}\n\treturn nil\n}\n\nfunc (f *FilterSet) Value() (driver.Value, error) {\n\tfilterSetJson, err := json.Marshal(f)\n\tif err != nil {\n\t\treturn nil, errors.Wrap(err, \"could not serialize FilterSet to JSON\")\n\t}","sourceCodeStart":1177,"sourceCodeEnd":1213,"githubUrl":"https://github.com/SigNoz/signoz/blob/5069bf80b08f1f00d7e014eccc09902f9871004f/pkg/query-service/model/v3/v3.go#L1177-L1213","documentation":"Each FilterSet item's Key must pass AttributeKey.Validate(). This wraps that error, indicating one of the filter item keys has an invalid/unknown key (e.g. an empty or malformed key).","triggerScenarios":"A filters item whose Key fails Validate() — typically a key with an empty Key field, or an invalid type/column combination in the AttributeKey struct.","commonSituations":"Dynamically built filters where a variable key resolves to empty; migration from older filter payloads missing key metadata.","solutions":["Inspect the wrapped error and fix the offending item's key (ensure Key is non-empty and type/column are valid)","Log the full FilterSet on validation failure to identify which item is broken"],"exampleFix":"// before\n{\"items\":[{\"key\":{\"key\":\"\"},\"value\":\"x\"}]}\n// after\n{\"items\":[{\"key\":{\"key\":\"service.name\"},\"value\":\"x\"}]}","handlingStrategy":"validation","validationCode":"for _, it := range fs.Items { if it.Key.Key == \"\" { return errors.New(\"filter item key must not be empty\") } }","typeGuard":"func hasValidKeys(fs v3.FilterSet) bool { for _, it := range fs.Items { if it.Key.Validate() != nil { return false } }; return true }","tryCatchPattern":"if err := query.Validate(); err != nil { if strings.Contains(err.Error(), \"filter item key is invalid\") { log.Printf(\"bad filter item: %+v\", fs.Items) }; return err }","preventionTips":["Resolve dynamic keys to non-empty values before building filters","Log the payload when validation fails to find the bad item"],"tags":["signoz","query-builder","filters","validation"],"backgroundTag":"query-validation-failed","analyzedSha":"5069bf80b08f1f00d7e014eccc09902f9871004f","analyzedAt":"2026-08-28T06:22:12.824Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}