{"record":{"id":"cc0dcb27dfcd1806","repo":"prometheus/node_exporter","slug":"couldn-t-get-ue-count-for-controller-s-w","errorCode":null,"errorMessage":"couldn't get ue_count for controller %s: %w","messagePattern":"couldn't get ue_count for controller (.+?): %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"collector/edac_linux.go","lineNumber":128,"sourceCode":"\t\tcontrollerNumber := controllerMatch[1]\n\n\t\tvalue, err := readUintFromFile(filepath.Join(controller, \"ce_count\"))\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"couldn't get ce_count for controller %s: %w\", controllerNumber, err)\n\t\t}\n\t\tch <- prometheus.MustNewConstMetric(\n\t\t\tedacCeCount, prometheus.CounterValue, float64(value), controllerNumber)\n\n\t\tvalue, err = readUintFromFile(filepath.Join(controller, \"ce_noinfo_count\"))\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"couldn't get ce_noinfo_count for controller %s: %w\", controllerNumber, err)\n\t\t}\n\t\tch <- prometheus.MustNewConstMetric(\n\t\t\tedacCsRowCECount, prometheus.CounterValue, float64(value), controllerNumber, \"unknown\")\n\n\t\tvalue, err = readUintFromFile(filepath.Join(controller, \"ue_count\"))\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"couldn't get ue_count for controller %s: %w\", controllerNumber, err)\n\t\t}\n\t\tch <- prometheus.MustNewConstMetric(\n\t\t\tedacUeCount, prometheus.CounterValue, float64(value), controllerNumber)\n\n\t\tvalue, err = readUintFromFile(filepath.Join(controller, \"ue_noinfo_count\"))\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"couldn't get ue_noinfo_count for controller %s: %w\", controllerNumber, err)\n\t\t}\n\t\tch <- prometheus.MustNewConstMetric(\n\t\t\tedacCsRowUECount, prometheus.CounterValue, float64(value), controllerNumber, \"unknown\")\n\n\t\t// For each controller, walk the csrow directories.\n\t\tcsrows, err := filepath.Glob(controller + \"/csrow[0-9]*\")\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfor _, csrow := range csrows {\n\t\t\tcsrowMatch := edacMemCsrowRE.FindStringSubmatch(csrow)","sourceCodeStart":110,"sourceCodeEnd":146,"githubUrl":"https://github.com/prometheus/node_exporter/blob/17ddd77c59ba27e1508e9f7894b1e55b44d6aed3/collector/edac_linux.go#L110-L146","documentation":"Same read pattern as the previous counters, applied to ue_count (uncorrectable errors). readUintFromFile failed for a controller directory, aborting the scrape with this wrapped error naming the controller number.","triggerScenarios":"readUintFromFile(<controller>/ue_count) fails: attribute absent for the EDAC driver, read permission denied, or content not parseable as a uint.","commonSituations":"Drivers that don't populate ue_count; hardened/container environments blocking sysfs reads; kernel layout changes for EDAC uncorrectable-error counters.","solutions":["Check cat /sys/devices/system/edac/memctlr/mcN/ue_count works for the exporter user","Run node_exporter with adequate privileges","Examine the wrapped (%w) error for the concrete errno or parse failure","Confirm the EDAC driver supports uncorrectable-error accounting; otherwise the collector cannot function for that controller"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if _, err := os.ReadFile(\"/sys/devices/system/edac/memctlr/mc0/ue_count\"); err != nil {\n    // ue_count unreadable; fix permissions or driver support\n}","typeGuard":null,"tryCatchPattern":"if err := c.Update(ch); err != nil {\n    if strings.Contains(err.Error(), \"couldn't get ue_count\") {\n        // check wrapped errno; ENOENT means driver lacks the counter\n    }\n}","preventionTips":["Verify EDAC uncorrectable-error attributes exist for the loaded driver","Keep exporter privileges consistent across hosts to avoid permission drift","Include EDAC attribute reads in pre-deployment host validation"],"tags":["linux","edac","sysfs","file-read"],"backgroundTag":"file-read-failed","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"}