{"record":{"id":"fdf5406e4e6118f3","repo":"prometheus/node_exporter","slug":"data-size-mismatch","errorCode":null,"errorMessage":"Data Size mismatch","messagePattern":"Data Size mismatch","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"collector/netstat_freebsd.go","lineNumber":250,"sourceCode":"\treturn NetstatMetrics{\n\t\tipv6SendTotal:          float64(ipStats.ip6s_localout),\n\t\tipv6RawSendTotal:       float64(ipStats.ip6s_rawout),\n\t\tipv6RecvTotal:          float64(ipStats.ip6s_total),\n\t\tipv6RecvFragmentsTotal: float64(ipStats.ip6s_fragments),\n\t\tipv6ForwardTotal:       float64(ipStats.ip6s_forward),\n\t\tipv6DeliveredTotal:     float64(ipStats.ip6s_delivered),\n\t}, nil\n}\n\nfunc getData(queryString string, expectedSize int) ([]byte, error) {\n\tdata, err := sysctlRaw(queryString)\n\tif err != nil {\n\t\tfmt.Println(\"Error:\", err)\n\t\treturn nil, err\n\t}\n\n\tif len(data) < expectedSize {\n\t\treturn nil, errors.New(\"Data Size mismatch\")\n\t}\n\treturn data, nil\n}\n\nfunc getTCPStates() ([]uint64, error) {\n\n\t// This sysctl returns an array of uint64\n\tdata, err := sysctlRaw(\"net.inet.tcp.states\")\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif len(data)/8 != len(tcpStates) {\n\t\treturn nil, fmt.Errorf(\"invalid TCP states data: expected %d entries, found %d\", len(tcpStates), len(data)/8)\n\t}\n\n\tstates := make([]uint64, 0)","sourceCodeStart":232,"sourceCodeEnd":268,"githubUrl":"https://github.com/prometheus/node_exporter/blob/17ddd77c59ba27e1508e9f7894b1e55b44d6aed3/collector/netstat_freebsd.go#L232-L268","documentation":"getData on FreeBSD validates that the sysctl buffer it read for TCP statistics is at least the expected size; a shorter buffer means kernel data layout/length does not match what the collector expects, so it returns 'Data Size mismatch'.","triggerScenarios":"GetData/getTCPStates on FreeBSD when len(data) < expectedSize after fetching the net.inet.tcp states sysctl — i.e., the kernel returned fewer bytes than the collector's expectedSize.","commonSituations":"Running an older or newer FreeBSD kernel whose sysctl output layout differs from the exporter's compiled-in expectations; cross-version binaries; partial reads from sysctl.","solutions":["Upgrade node_exporter to a build matching your FreeBSD kernel version.","Check FreeBSD/node_exporter version compatibility; recompile the exporter on the target FreeBSD release.","Report/inspect if the kernel sysctl shrinks (feature removed) and disable the affected TCP-state metrics via flags."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"stats, err := GetData(...)\nif err != nil && strings.Contains(err.Error(), \"Data Size mismatch\") {\n    logger.Warn(\"TCP state data layout mismatch; skipping netstat metrics\", \"err\", err)\n    return nil\n}","preventionTips":["Match exporter build to the FreeBSD release in production.","Pin node_exporter versions per OS release.","Test upgrades on canary hosts with matching kernels."],"tags":["go","freebsd","sysctl","netstat"],"backgroundTag":"unexpected-api-response-shape","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"}