prometheus/node_exporter · error
could not parse expected signed integer value for
Error message
could not parse expected signed integer value for %q: %w
What it means
parseProcfsFile hit a kstat line declared int64 whose value strconv.ParseInt rejected. The ZFS kstat file contains a column typed as signed integer that is not a valid base-10 integer — malformed or unexpected kstat format.
Solutions
- Inspect the kstat file under /proc/spl/kstat/zfs/ to locate the malformed value.
- Update node_exporter if a newer ZFS changed the kstat encoding.
- Skip or report the affected kstat file if it is persistently unparseable.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at collector/zfs_linux.go:244 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of prometheus/node_exporter@17ddd77c59 (2026-09-07).
Data as JSON: /api/errors/58656ba8101c67dd.
Report an issue: GitHub.
Appendix: source
Thrown at collector/zfs_linux.go:244
if !parseLine || len(parts) < 3 {
continue
}
// kstat data type (column 2) should be KSTAT_DATA_UINT64, otherwise ignore
// TODO: when other KSTAT_DATA_* types arrive, much of this will need to be restructured
key := fmt.Sprintf("kstat.zfs.misc.%s.%s", fmtExt, parts[0])
switch parts[1] {
case kstatDataUint64:
value, err := strconv.ParseUint(parts[2], 10, 64)
if err != nil {
return fmt.Errorf("could not parse expected unsigned integer value for %q: %w", key, err)
}
handler(zfsSysctl(key), value)
case kstatDataInt64:
value, err := strconv.ParseInt(parts[2], 10, 64)
if err != nil {
return fmt.Errorf("could not parse expected signed integer value for %q: %w", key, err)
}
handler(zfsSysctl(key), value)
}
}
if !parseLine {
return fmt.Errorf("did not parse a single %q metric", fmtExt)
}
return scanner.Err()
}
func (c *zfsCollector) parsePoolProcfsFile(reader io.Reader, zpoolPath string, handler func(string, zfsSysctl, uint64)) error {
scanner := bufio.NewScanner(reader)
parseLine := false
var fields []string
for scanner.Scan() {
line := strings.Fields(scanner.Text())View on GitHub (pinned to 17ddd77c59)