prometheus/node_exporter · error
couldn't get udp6 queued bytes
Error message
couldn't get udp6 queued bytes: %w
What it means
The IPv6 counterpart of the udp queues read: fs.NetUDP6Summary() errors that are not os.ErrNotExist become 'couldn't get udp6 queued bytes: %w'. If BOTH v4 and v6 files are missing (ErrNotExist), the collector returns ErrNoData so the scrape is skipped rather than failing — this error only fires for genuine v6 read/parse problems.
Solutions
- Verify /proc/net/udp6 exists and is readable.
- Check the wrapped error to see if it is a parse or permission failure.
- Disable IPv6 collection (or the udp_queues collector) if the host has no usable udp6 support.
- File an upstream procfs issue if the kernel's udp6 format differs from the parser.
Defensive patterns
Strategy: try-catch
Validate before calling
if _, err := os.Stat("/proc/net/udp6"); errors.Is(err, os.ErrNotExist) {
// no ipv6 udp support; expect ErrNoData skips instead of metrics
} Try / catch
if err := c.Update(ch); err != nil {
if errors.Is(err, ErrNoData) { return }
if strings.Contains(err.Error(), "couldn't get udp6 queued bytes") {
logger.Warn("udp v6 queue metrics unavailable", "err", err)
return
}
return err
} Prevention
- Verify /proc/net/udp6 exists on IPv6-enabled hosts before relying on v6 metrics.
- Handle ErrNoData: missing both v4 and v6 files is intentional no-data behavior.
- Keep the procfs dependency current for kernel format changes.
- Only enable udp_queues where the kernel exposes both queue summaries you need.
When it happens
Trigger: udpQueuesCollector.Update when NetUDP6Summary() returns a non-ErrNotExist error while reading /proc/net/udp6 — parse failures or permission errors on hosts with IPv6 enabled.
Common situations: Kernels/configs exposing a malformed or partially readable /proc/net/udp6, security modules blocking the read, and parser mismatches after kernel upgrades.
Understand the failure class
Background: "failed to read file", EACCES, ENOENT and "could not read <path>" errors: when a program can't read a file from disk — this error's family across 49 libraries.
Related errors
- couldn't get SNMP6 stats
- failed to get IPv6 sockstat data
- failed to open procfs
- couldn't get udp queued bytes
- interrupts empty
AI-assisted analysis of prometheus/node_exporter@17ddd77c59 (2026-09-07).
Data as JSON: /api/errors/a9450c3f25233ca1.
Report an issue: GitHub.
Appendix: source
Thrown at collector/udp_queues_linux.go:79
ch <- prometheus.MustNewConstMetric(c.desc, prometheus.GaugeValue, float64(s4.TxQueueLength), "tx", "v4")
ch <- prometheus.MustNewConstMetric(c.desc, prometheus.GaugeValue, float64(s4.RxQueueLength), "rx", "v4")
} else {
if errors.Is(errIPv4, os.ErrNotExist) {
c.logger.Debug("not collecting ipv4 based metrics")
} else {
return fmt.Errorf("couldn't get udp queued bytes: %w", errIPv4)
}
}
s6, errIPv6 := c.fs.NetUDP6Summary()
if errIPv6 == nil {
ch <- prometheus.MustNewConstMetric(c.desc, prometheus.GaugeValue, float64(s6.TxQueueLength), "tx", "v6")
ch <- prometheus.MustNewConstMetric(c.desc, prometheus.GaugeValue, float64(s6.RxQueueLength), "rx", "v6")
} else {
if errors.Is(errIPv6, os.ErrNotExist) {
c.logger.Debug("not collecting ipv6 based metrics")
} else {
return fmt.Errorf("couldn't get udp6 queued bytes: %w", errIPv6)
}
}
if errors.Is(errIPv4, os.ErrNotExist) && errors.Is(errIPv6, os.ErrNotExist) {
return ErrNoData
}
return nil
}
View on GitHub (pinned to 17ddd77c59)