{"record":{"id":"213e9b3e66f4dfe5","repo":"prometheus/node_exporter","slug":"invalid-tracepoint-config-v","errorCode":null,"errorMessage":"invalid tracepoint config %v","messagePattern":"invalid tracepoint config (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"collector/perf_linux.go","lineNumber":106,"sourceCode":"\t\t\"DataTLBReadHit\":   perf.DataTLBReadHitProfiler,\n\t\t\"DataTLBReadMiss\":  perf.DataTLBReadMissProfiler,\n\t\t\"DataTLBWriteHit\":  perf.DataTLBWriteHitProfiler,\n\t\t\"DataTLBWriteMiss\": perf.DataTLBWriteMissProfiler,\n\t\t// \"NodeCacheReadHit\":   perf.NodeCacheReadHitProfiler,\n\t\t// \"NodeCacheReadMiss\":  perf.NodeCacheReadMissProfiler,\n\t\t// \"NodeCacheWriteHit\":  perf.NodeCacheWriteHitProfiler,\n\t\t// \"NodeCacheWriteMiss\": perf.NodeCacheWriteMissProfiler,\n\t}\n)\n\n// perfTracepointFlagToTracepoints returns the set of configured tracepoints.\nfunc perfTracepointFlagToTracepoints(tracepointsFlag []string) ([]*perfTracepoint, error) {\n\ttracepoints := make([]*perfTracepoint, len(tracepointsFlag))\n\n\tfor i, tracepoint := range tracepointsFlag {\n\t\tsplit := strings.Split(tracepoint, \":\")\n\t\tif len(split) != 2 {\n\t\t\treturn nil, fmt.Errorf(\"invalid tracepoint config %v\", tracepoint)\n\t\t}\n\t\ttracepoints[i] = &perfTracepoint{\n\t\t\tsubsystem: split[0],\n\t\t\tevent:     split[1],\n\t\t}\n\t}\n\treturn tracepoints, nil\n}\n\n// perfCPUFlagToCPUs returns a set of CPUs for the perf collectors to monitor.\nfunc perfCPUFlagToCPUs(cpuFlag string) ([]int, error) {\n\tvar err error\n\tcpus := []int{}\n\tfor subset := range strings.SplitSeq(cpuFlag, \",\") {\n\t\t// First parse a single CPU.\n\t\tif !strings.Contains(subset, \"-\") {\n\t\t\tcpu, err := strconv.Atoi(subset)\n\t\t\tif err != nil {","sourceCodeStart":88,"sourceCodeEnd":124,"githubUrl":"https://github.com/prometheus/node_exporter/blob/17ddd77c59ba27e1508e9f7894b1e55b44d6aed3/collector/perf_linux.go#L88-L124","documentation":"perfTracepointFlagToTracepoints parses the --collector.perf.tracepoint flag values, each expected in the form \"subsystem:event\" (exactly one colon). If a value does not split into exactly 2 fields, it returns \"invalid tracepoint config %v\" naming the offending value. This is a configuration-format validation error, raised before any perf event is opened.","triggerScenarios":"perfTracepointFlagToTracepoints returns this when a tracepoint flag entry lacks the required colon separator or has more than one (len(split) != 2), e.g. \"sched\" (no event), \"sched:sched_switch:extra\", or an empty string; called from newPerfTracepointCollector at collector startup.","commonSituations":"Users typing tracepoint names without the event part (just \"sched\"); copying kernel perf event names that use '.' or '-' but omitting the required ':' separator; shell/CLI quoting splitting one flag into multiple wrong entries; YAML/systemd unit config mistakes when passing multiple --collector.perf.tracepoint flags.","solutions":["Write each tracepoint as subsystem:event, e.g. --collector.perf.tracepoint=sched:sched_switch","Remove extra colons from the value; the format allows exactly one subsystem:event pair","List valid tracepoints with `perf list` and pick the subsystem:event name","Check the systemd unit/CLI quoting so the value is passed as a single argument"],"exampleFix":"// before\n--collector.perf.tracepoint=sched:sched_switch:extra\n// after\n--collector.perf.tracepoint=sched:sched_switch","handlingStrategy":"validation","validationCode":"valid := func(tp string) bool {\n    parts := strings.Split(tp, \":\")\n    return len(parts) == 2 && parts[0] != \"\" && parts[1] != \"\"\n}\nfor _, tp := range tracepointFlags {\n    if !valid(tp) { return fmt.Errorf(\"bad --collector.perf.tracepoint %q; want subsystem:event\", tp) }\n}","typeGuard":"func isWellFormedTracepoint(s string) bool {\n    parts := strings.Split(s, \":\")\n    return len(parts) == 2 && parts[0] != \"\" && parts[1] != \"\"\n}","tryCatchPattern":"tps, err := perfTracepointFlagToTracepoints(*perfTracepointFlag)\nif err != nil {\n    if strings.Contains(err.Error(), \"invalid tracepoint config\") {\n        kingpin.Fatalf(\"%v; expected format subsystem:event (see `perf list`)\", err)\n    }\n    return err\n}","preventionTips":["Always use subsystem:event format exactly as shown by `perf list`","Never include extra colons; one separator only","Quote flag values in systemd units/shell to avoid argument splitting","Validate tracepoint flags in config tooling before deploying the exporter"],"tags":["perf","tracepoint","cli-flag","config-validation"],"backgroundTag":"invalid-argument-format","analyzedSha":"17ddd77c59ba27e1508e9f7894b1e55b44d6aed3","analyzedAt":"2026-09-07T17:54:06.211Z","contentChangedAt":"2026-09-07T17:54:06.211Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}