pull/2993/merge
Chris Cleeland 2025-03-04 16:16:43 +01:00 committed by GitHub
commit 0c6824547d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 34 additions and 16 deletions

View File

@ -57,7 +57,7 @@ jobs:
fi
if [[ -f "$(pwd)/.build/darwin-amd64/node_exporter" ]]; then
promu codesign "$(pwd)/.build/darwin-amd64/node_exporter"
promu codesign "$(pwd)/.build/darwin-amd64/node_exporter"
fi
- persist_to_workspace:
root: .

View File

@ -159,7 +159,7 @@ thermal | Exposes thermal statistics like `pmset -g therm`. | Darwin
thermal\_zone | Exposes thermal zone & cooling device statistics from `/sys/class/thermal`. | Linux
time | Exposes the current system time. | _any_
timex | Exposes selected adjtimex(2) system call stats. | Linux
udp_queues | Exposes UDP total lengths of the rx_queue and tx_queue from `/proc/net/udp` and `/proc/net/udp6`. | Linux
udp | Exposes UDP statistics from `/proc/net/udp` and `/proc/net/udp6`. | Linux
uname | Exposes system information as provided by the uname system call. | Darwin, FreeBSD, Linux, OpenBSD
vmstat | Exposes statistics from `/proc/vmstat`. | Linux
watchdog | Exposes statistics from `/sys/class/watchdog` | Linux

View File

@ -3007,7 +3007,7 @@ node_scrape_collector_success{collector="tapestats"} 1
node_scrape_collector_success{collector="textfile"} 1
node_scrape_collector_success{collector="thermal_zone"} 1
node_scrape_collector_success{collector="time"} 1
node_scrape_collector_success{collector="udp_queues"} 1
node_scrape_collector_success{collector="udp"} 1
node_scrape_collector_success{collector="vmstat"} 1
node_scrape_collector_success{collector="watchdog"} 1
node_scrape_collector_success{collector="wifi"} 1
@ -3258,6 +3258,9 @@ node_time_clocksource_current_info{clocksource="tsc",device="0"} 1
# TYPE node_time_seconds gauge
# HELP node_time_zone_offset_seconds System time zone offset in seconds.
# TYPE node_time_zone_offset_seconds gauge
# HELP node_udp_drops_total Total number of datagrams dropped.
# TYPE node_udp_drops_total counter
node_udp_drops_total{ip="v4"} 100
# HELP node_udp_queues Number of allocated memory in the kernel for UDP datagrams in bytes.
# TYPE node_udp_queues gauge
node_udp_queues{ip="v4",queue="rx"} 0

View File

@ -3029,7 +3029,7 @@ node_scrape_collector_success{collector="tapestats"} 1
node_scrape_collector_success{collector="textfile"} 1
node_scrape_collector_success{collector="thermal_zone"} 1
node_scrape_collector_success{collector="time"} 1
node_scrape_collector_success{collector="udp_queues"} 1
node_scrape_collector_success{collector="udp"} 1
node_scrape_collector_success{collector="vmstat"} 1
node_scrape_collector_success{collector="watchdog"} 1
node_scrape_collector_success{collector="wifi"} 1
@ -3280,6 +3280,9 @@ node_time_clocksource_current_info{clocksource="tsc",device="0"} 1
# TYPE node_time_seconds gauge
# HELP node_time_zone_offset_seconds System time zone offset in seconds.
# TYPE node_time_zone_offset_seconds gauge
# HELP node_udp_drops_total Total number of datagrams dropped.
# TYPE node_udp_drops_total counter
node_udp_drops_total{ip="v4"} 100
# HELP node_udp_queues Number of allocated memory in the kernel for UDP datagrams in bytes.
# TYPE node_udp_queues gauge
node_udp_queues{ip="v4",queue="rx"} 0

View File

@ -27,40 +27,49 @@ import (
)
type (
udpQueuesCollector struct {
udpCollector struct {
fs procfs.FS
desc *prometheus.Desc
queues *prometheus.Desc
drops *prometheus.Desc
logger *slog.Logger
}
)
func init() {
registerCollector("udp_queues", defaultEnabled, NewUDPqueuesCollector)
registerCollector("udp", defaultEnabled, NewUDPCollector)
}
// NewUDPqueuesCollector returns a new Collector exposing network udp queued bytes.
func NewUDPqueuesCollector(logger *slog.Logger) (Collector, error) {
func NewUDPCollector(logger *slog.Logger) (Collector, error) {
fs, err := procfs.NewFS(*procPath)
if err != nil {
return nil, fmt.Errorf("failed to open procfs: %w", err)
}
return &udpQueuesCollector{
return &udpCollector{
fs: fs,
desc: prometheus.NewDesc(
queues: prometheus.NewDesc(
prometheus.BuildFQName(namespace, "udp", "queues"),
"Number of allocated memory in the kernel for UDP datagrams in bytes.",
[]string{"queue", "ip"}, nil,
),
drops: prometheus.NewDesc(
prometheus.BuildFQName(namespace, "udp", "drops_total"),
"Total number of datagrams dropped.",
[]string{"ip"}, nil,
),
logger: logger,
}, nil
}
func (c *udpQueuesCollector) Update(ch chan<- prometheus.Metric) error {
func (c *udpCollector) Update(ch chan<- prometheus.Metric) error {
s4, errIPv4 := c.fs.NetUDPSummary()
if errIPv4 == nil {
ch <- prometheus.MustNewConstMetric(c.desc, prometheus.GaugeValue, float64(s4.TxQueueLength), "tx", "v4")
ch <- prometheus.MustNewConstMetric(c.desc, prometheus.GaugeValue, float64(s4.RxQueueLength), "rx", "v4")
ch <- prometheus.MustNewConstMetric(c.queues, prometheus.GaugeValue, float64(s4.TxQueueLength), "tx", "v4")
ch <- prometheus.MustNewConstMetric(c.queues, prometheus.GaugeValue, float64(s4.RxQueueLength), "rx", "v4")
if s4.Drops != nil {
ch <- prometheus.MustNewConstMetric(c.drops, prometheus.CounterValue, float64(*s4.Drops), "v4")
}
} else {
if errors.Is(errIPv4, os.ErrNotExist) {
c.logger.Debug("not collecting ipv4 based metrics")
@ -71,8 +80,11 @@ func (c *udpQueuesCollector) Update(ch chan<- prometheus.Metric) error {
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")
ch <- prometheus.MustNewConstMetric(c.queues, prometheus.GaugeValue, float64(s6.TxQueueLength), "tx", "v6")
ch <- prometheus.MustNewConstMetric(c.queues, prometheus.GaugeValue, float64(s6.RxQueueLength), "rx", "v6")
if s6.Drops != nil {
ch <- prometheus.MustNewConstMetric(c.drops, prometheus.CounterValue, float64(*s6.Drops), "v6")
}
} else {
if errors.Is(errIPv6, os.ErrNotExist) {
c.logger.Debug("not collecting ipv6 based metrics")

View File

@ -79,7 +79,7 @@ enabled_collectors=$(cat << COLLECTORS
sysctl
textfile
thermal_zone
udp_queues
udp
vmstat
watchdog
wifi