{"record":{"id":"f8587bcca793f106","repo":"prometheus/node_exporter","slug":"failed-to-get-ipv6-sockstat-data-w","errorCode":null,"errorMessage":"failed to get IPv6 sockstat data: %w","messagePattern":"failed to get IPv6 sockstat data: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"collector/sockstat_linux.go","lineNumber":70,"sourceCode":"\t}\n\n\t// If IPv4 and/or IPv6 are disabled on this kernel, handle it gracefully.\n\tstat4, err := fs.NetSockstat()\n\tswitch {\n\tcase err == nil:\n\tcase errors.Is(err, os.ErrNotExist):\n\t\tc.logger.Debug(\"IPv4 sockstat statistics not found, skipping\")\n\tdefault:\n\t\treturn fmt.Errorf(\"failed to get IPv4 sockstat data: %w\", err)\n\t}\n\n\tstat6, err := fs.NetSockstat6()\n\tswitch {\n\tcase err == nil:\n\tcase errors.Is(err, os.ErrNotExist):\n\t\tc.logger.Debug(\"IPv6 sockstat statistics not found, skipping\")\n\tdefault:\n\t\treturn fmt.Errorf(\"failed to get IPv6 sockstat data: %w\", err)\n\t}\n\n\tstats := []struct {\n\t\tisIPv6 bool\n\t\tstat   *procfs.NetSockstat\n\t}{\n\t\t{\n\t\t\tstat: stat4,\n\t\t},\n\t\t{\n\t\t\tisIPv6: true,\n\t\t\tstat:   stat6,\n\t\t},\n\t}\n\n\tfor _, s := range stats {\n\t\tc.update(ch, s.isIPv6, s.stat)\n\t}","sourceCodeStart":52,"sourceCodeEnd":88,"githubUrl":"https://github.com/prometheus/node_exporter/blob/17ddd77c59ba27e1508e9f7894b1e55b44d6aed3/collector/sockstat_linux.go#L52-L88","documentation":"The sockstat collector reads /proc/net/sockstat6 via fs.NetSockstat6(). Errors other than os.ErrNotExist are wrapped as 'failed to get IPv6 sockstat data'. A missing file is expected on IPv6-disabled kernels (logged and skipped); any other error is a genuine read/parse failure.","triggerScenarios":"fs.NetSockstat6() returning a non-ErrNotExist error during Update: permission denial or procfs parse failure on /proc/net/sockstat6.","commonSituations":"Security modules blocking /proc/net reads; partially disabled IPv6 builds where sockstat6 exists but has unexpected content; container runtimes masking procfs entries.","solutions":["Verify /proc/net/sockstat6 is readable by the exporter user and inspect LSM/seccomp denials","If IPv6 is intentionally absent, ensure the file is simply missing (ErrNotExist is handled gracefully); fix the underlying read error otherwise","Update github.com/prometheus/procfs if the kernel output format changed"],"exampleFix":"// verify access\nsudo -u node_exporter cat /proc/net/sockstat6\n// if the kernel truly lacks IPv6, the collector skips silently; only unexpected errors need fixing","handlingStrategy":"try-catch","validationCode":"// pre-check before scraping IPv6 sockstat\nif _, err := os.Stat(\"/proc/net/sockstat6\"); err != nil && !os.IsNotExist(err) {\n\t// unexpected access problem; fix permissions before enabling\n}","typeGuard":null,"tryCatchPattern":"if err := collector.Update(ch); err != nil {\n\tif strings.Contains(err.Error(), \"failed to get IPv6 sockstat data\") {\n\t\tlogger.Warn(\"IPv6 sockstat unavailable\", \"err\", err)\n\t} else {\n\t\treturn err\n\t}\n}","preventionTips":["Remember missing /proc/net/sockstat6 is normal on IPv6-disabled kernels (skipped by design)","Grant read access to /proc/net/sockstat6 where IPv6 is enabled","Keep procfs dependency current so kernel output format changes parse correctly"],"tags":["procfs","network","ipv6","linux","sockstat"],"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"}