You've already forked node_exporter
mirror of
https://github.com/prometheus/node_exporter.git
synced 2026-10-23 08:09:06 +03:00
* netstat: Use procfs parsers for netstat, snmp and snmp6 Replace the hand-written parsers for /proc/net/netstat, /proc/net/snmp and /proc/net/snmp6 with the parsers from prometheus/procfs (Proc.Netstat, Proc.Snmp and Proc.Snmp6). The statistics are read via /proc/self/net, which is equivalent to /proc/net (both are network-namespace local views of the current process), so the collected data is unchanged. Metrics are exposed by iterating the procfs statistics structs, the same approach the NFS collector uses: fields are *float64 and only the ones present on the system are exported, matching the previous behavior. The --collector.netstat.fields flag and the exported metric names are unchanged; the e2e golden output is identical. Signed-off-by: neoLsH <43921685+neoLsH@users.noreply.github.com> * netstat: use explicit package-level metric descriptors Replace the per-scrape prometheus.NewDesc calls with a pre-built map of explicit descriptors (netstat_descs_linux.go, generated from the procfs statistics structs), as requested in review. Collection still reflects over the procfs structs but looks up the descriptor by "<protocol>_<field>", so descriptors are allocated once and are source-visible literals for the AST-based doc generation. Metric names, help strings and types are unchanged. Signed-off-by: 霏承 <huangleshu.hls@alibaba-inc.com> * Bump procfs to v0.22.0 to populate legacy TcpExt descriptors procfs v0.22.0 includes prometheus/procfs#863, which models the 10 legacy TcpExt counters. With this bump, the explicit descriptors already present in netstat_descs_linux.go start populating for users whose field regex selects them, restoring parity with older kernels. Part of #3796. Signed-off-by: 霏承 <huangleshu.hls@alibaba-inc.com> * Add generator and drift test for the netstat descriptor table netstat_descs_linux.go was previously committed without its generator. Add an in-repo generator (netstat_descs_gen.go, a build-ignored program run via GOOS=linux go generate ./collector) that regenerates the explicit descriptor table from the procfs structs, mirroring the go:generate pattern used elsewhere in the Prometheus ecosystem. Add TestNetStatDescsInSync, a drift test that fails if the committed table diverges from the procfs structs (e.g. after a procfs upgrade) until the table is regenerated. Part of #3796. Signed-off-by: 霏承 <huangleshu.hls@alibaba-inc.com> --------- Signed-off-by: neoLsH <43921685+neoLsH@users.noreply.github.com> Signed-off-by: 霏承 <huangleshu.hls@alibaba-inc.com>
190 lines
7.2 KiB
Go
190 lines
7.2 KiB
Go
// Copyright 2015 The Prometheus Authors
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
//go:build !nonetstat
|
|
|
|
package collector
|
|
|
|
import (
|
|
"io"
|
|
"log/slog"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/alecthomas/kingpin/v2"
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
"github.com/prometheus/client_golang/prometheus/testutil"
|
|
)
|
|
|
|
type testNetStatCollector struct {
|
|
c Collector
|
|
}
|
|
|
|
func (c testNetStatCollector) Collect(ch chan<- prometheus.Metric) {
|
|
c.c.Update(ch)
|
|
}
|
|
|
|
func (c testNetStatCollector) Describe(ch chan<- *prometheus.Desc) {
|
|
prometheus.DescribeByCollect(c, ch)
|
|
}
|
|
|
|
func NewTestNetStatCollector(t *testing.T, logger *slog.Logger) prometheus.Collector {
|
|
t.Helper()
|
|
|
|
c, err := NewNetStatCollector(logger)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return testNetStatCollector{c: c}
|
|
}
|
|
|
|
func TestNetStats(t *testing.T) {
|
|
if _, err := kingpin.CommandLine.Parse([]string{}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
*procPath = "fixtures/proc"
|
|
|
|
logger := slog.New(slog.NewTextHandler(io.Discard, nil))
|
|
c := NewTestNetStatCollector(t, logger)
|
|
|
|
expected := `
|
|
# HELP node_netstat_Icmp6_InErrors Statistic Icmp6InErrors.
|
|
# TYPE node_netstat_Icmp6_InErrors untyped
|
|
node_netstat_Icmp6_InErrors 0
|
|
# HELP node_netstat_Icmp6_InMsgs Statistic Icmp6InMsgs.
|
|
# TYPE node_netstat_Icmp6_InMsgs untyped
|
|
node_netstat_Icmp6_InMsgs 0
|
|
# HELP node_netstat_Icmp6_OutMsgs Statistic Icmp6OutMsgs.
|
|
# TYPE node_netstat_Icmp6_OutMsgs untyped
|
|
node_netstat_Icmp6_OutMsgs 8
|
|
# HELP node_netstat_Icmp_InErrors Statistic IcmpInErrors.
|
|
# TYPE node_netstat_Icmp_InErrors untyped
|
|
node_netstat_Icmp_InErrors 0
|
|
# HELP node_netstat_Icmp_InMsgs Statistic IcmpInMsgs.
|
|
# TYPE node_netstat_Icmp_InMsgs untyped
|
|
node_netstat_Icmp_InMsgs 104
|
|
# HELP node_netstat_Icmp_OutMsgs Statistic IcmpOutMsgs.
|
|
# TYPE node_netstat_Icmp_OutMsgs untyped
|
|
node_netstat_Icmp_OutMsgs 120
|
|
# HELP node_netstat_Ip6_InOctets Statistic Ip6InOctets.
|
|
# TYPE node_netstat_Ip6_InOctets untyped
|
|
node_netstat_Ip6_InOctets 460
|
|
# HELP node_netstat_Ip6_OutOctets Statistic Ip6OutOctets.
|
|
# TYPE node_netstat_Ip6_OutOctets untyped
|
|
node_netstat_Ip6_OutOctets 536
|
|
# HELP node_netstat_IpExt_InOctets Statistic IpExtInOctets.
|
|
# TYPE node_netstat_IpExt_InOctets untyped
|
|
node_netstat_IpExt_InOctets 6.28639697e+09
|
|
# HELP node_netstat_IpExt_OutOctets Statistic IpExtOutOctets.
|
|
# TYPE node_netstat_IpExt_OutOctets untyped
|
|
node_netstat_IpExt_OutOctets 2.786264347e+09
|
|
# HELP node_netstat_Ip_Forwarding Statistic IpForwarding.
|
|
# TYPE node_netstat_Ip_Forwarding untyped
|
|
node_netstat_Ip_Forwarding 1
|
|
# HELP node_netstat_TcpExt_ListenDrops Statistic TcpExtListenDrops.
|
|
# TYPE node_netstat_TcpExt_ListenDrops untyped
|
|
node_netstat_TcpExt_ListenDrops 0
|
|
# HELP node_netstat_TcpExt_ListenOverflows Statistic TcpExtListenOverflows.
|
|
# TYPE node_netstat_TcpExt_ListenOverflows untyped
|
|
node_netstat_TcpExt_ListenOverflows 0
|
|
# HELP node_netstat_TcpExt_SyncookiesFailed Statistic TcpExtSyncookiesFailed.
|
|
# TYPE node_netstat_TcpExt_SyncookiesFailed untyped
|
|
node_netstat_TcpExt_SyncookiesFailed 2
|
|
# HELP node_netstat_TcpExt_SyncookiesRecv Statistic TcpExtSyncookiesRecv.
|
|
# TYPE node_netstat_TcpExt_SyncookiesRecv untyped
|
|
node_netstat_TcpExt_SyncookiesRecv 0
|
|
# HELP node_netstat_TcpExt_SyncookiesSent Statistic TcpExtSyncookiesSent.
|
|
# TYPE node_netstat_TcpExt_SyncookiesSent untyped
|
|
node_netstat_TcpExt_SyncookiesSent 0
|
|
# HELP node_netstat_TcpExt_TCPOFOQueue Statistic TcpExtTCPOFOQueue.
|
|
# TYPE node_netstat_TcpExt_TCPOFOQueue untyped
|
|
node_netstat_TcpExt_TCPOFOQueue 42
|
|
# HELP node_netstat_TcpExt_TCPRcvQDrop Statistic TcpExtTCPRcvQDrop.
|
|
# TYPE node_netstat_TcpExt_TCPRcvQDrop untyped
|
|
node_netstat_TcpExt_TCPRcvQDrop 131
|
|
# HELP node_netstat_TcpExt_TCPTimeouts Statistic TcpExtTCPTimeouts.
|
|
# TYPE node_netstat_TcpExt_TCPTimeouts untyped
|
|
node_netstat_TcpExt_TCPTimeouts 115
|
|
# HELP node_netstat_Tcp_ActiveOpens Statistic TcpActiveOpens.
|
|
# TYPE node_netstat_Tcp_ActiveOpens untyped
|
|
node_netstat_Tcp_ActiveOpens 3556
|
|
# HELP node_netstat_Tcp_CurrEstab Statistic TcpCurrEstab.
|
|
# TYPE node_netstat_Tcp_CurrEstab untyped
|
|
node_netstat_Tcp_CurrEstab 0
|
|
# HELP node_netstat_Tcp_InErrs Statistic TcpInErrs.
|
|
# TYPE node_netstat_Tcp_InErrs untyped
|
|
node_netstat_Tcp_InErrs 5
|
|
# HELP node_netstat_Tcp_InSegs Statistic TcpInSegs.
|
|
# TYPE node_netstat_Tcp_InSegs untyped
|
|
node_netstat_Tcp_InSegs 5.7252008e+07
|
|
# HELP node_netstat_Tcp_OutRsts Statistic TcpOutRsts.
|
|
# TYPE node_netstat_Tcp_OutRsts untyped
|
|
node_netstat_Tcp_OutRsts 1003
|
|
# HELP node_netstat_Tcp_OutSegs Statistic TcpOutSegs.
|
|
# TYPE node_netstat_Tcp_OutSegs untyped
|
|
node_netstat_Tcp_OutSegs 5.4915039e+07
|
|
# HELP node_netstat_Tcp_PassiveOpens Statistic TcpPassiveOpens.
|
|
# TYPE node_netstat_Tcp_PassiveOpens untyped
|
|
node_netstat_Tcp_PassiveOpens 230
|
|
# HELP node_netstat_Tcp_RetransSegs Statistic TcpRetransSegs.
|
|
# TYPE node_netstat_Tcp_RetransSegs untyped
|
|
node_netstat_Tcp_RetransSegs 227
|
|
# HELP node_netstat_Udp6_InDatagrams Statistic Udp6InDatagrams.
|
|
# TYPE node_netstat_Udp6_InDatagrams untyped
|
|
node_netstat_Udp6_InDatagrams 0
|
|
# HELP node_netstat_Udp6_InErrors Statistic Udp6InErrors.
|
|
# TYPE node_netstat_Udp6_InErrors untyped
|
|
node_netstat_Udp6_InErrors 0
|
|
# HELP node_netstat_Udp6_NoPorts Statistic Udp6NoPorts.
|
|
# TYPE node_netstat_Udp6_NoPorts untyped
|
|
node_netstat_Udp6_NoPorts 0
|
|
# HELP node_netstat_Udp6_OutDatagrams Statistic Udp6OutDatagrams.
|
|
# TYPE node_netstat_Udp6_OutDatagrams untyped
|
|
node_netstat_Udp6_OutDatagrams 0
|
|
# HELP node_netstat_Udp6_RcvbufErrors Statistic Udp6RcvbufErrors.
|
|
# TYPE node_netstat_Udp6_RcvbufErrors untyped
|
|
node_netstat_Udp6_RcvbufErrors 9
|
|
# HELP node_netstat_Udp6_SndbufErrors Statistic Udp6SndbufErrors.
|
|
# TYPE node_netstat_Udp6_SndbufErrors untyped
|
|
node_netstat_Udp6_SndbufErrors 8
|
|
# HELP node_netstat_UdpLite6_InErrors Statistic UdpLite6InErrors.
|
|
# TYPE node_netstat_UdpLite6_InErrors untyped
|
|
node_netstat_UdpLite6_InErrors 0
|
|
# HELP node_netstat_UdpLite_InErrors Statistic UdpLiteInErrors.
|
|
# TYPE node_netstat_UdpLite_InErrors untyped
|
|
node_netstat_UdpLite_InErrors 0
|
|
# HELP node_netstat_Udp_InDatagrams Statistic UdpInDatagrams.
|
|
# TYPE node_netstat_Udp_InDatagrams untyped
|
|
node_netstat_Udp_InDatagrams 88542
|
|
# HELP node_netstat_Udp_InErrors Statistic UdpInErrors.
|
|
# TYPE node_netstat_Udp_InErrors untyped
|
|
node_netstat_Udp_InErrors 0
|
|
# HELP node_netstat_Udp_NoPorts Statistic UdpNoPorts.
|
|
# TYPE node_netstat_Udp_NoPorts untyped
|
|
node_netstat_Udp_NoPorts 120
|
|
# HELP node_netstat_Udp_OutDatagrams Statistic UdpOutDatagrams.
|
|
# TYPE node_netstat_Udp_OutDatagrams untyped
|
|
node_netstat_Udp_OutDatagrams 53028
|
|
# HELP node_netstat_Udp_RcvbufErrors Statistic UdpRcvbufErrors.
|
|
# TYPE node_netstat_Udp_RcvbufErrors untyped
|
|
node_netstat_Udp_RcvbufErrors 9
|
|
# HELP node_netstat_Udp_SndbufErrors Statistic UdpSndbufErrors.
|
|
# TYPE node_netstat_Udp_SndbufErrors untyped
|
|
node_netstat_Udp_SndbufErrors 8
|
|
`
|
|
|
|
if err := testutil.CollectAndCompare(c, strings.NewReader(expected)); err != nil {
|
|
t.Errorf("unexpected collecting result:\n%s", err)
|
|
}
|
|
}
|