Skip to content

Commit 041d67d

Browse files
authored
Add ifAlias label to netdev collector (#3087)
Signed-off-by: Tomas Vilemaitis <tomas.vilemaitis@gmail.com>
1 parent f63b64e commit 041d67d

File tree

5 files changed

+63
-6
lines changed

5 files changed

+63
-6
lines changed

collector/netdev_common.go

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,15 +93,15 @@ func NewNetDevCollector(logger log.Logger) (Collector, error) {
9393
}, nil
9494
}
9595

96-
func (c *netDevCollector) metricDesc(key string) *prometheus.Desc {
96+
func (c *netDevCollector) metricDesc(key string, labels []string) *prometheus.Desc {
9797
c.metricDescsMutex.Lock()
9898
defer c.metricDescsMutex.Unlock()
9999

100100
if _, ok := c.metricDescs[key]; !ok {
101101
c.metricDescs[key] = prometheus.NewDesc(
102102
prometheus.BuildFQName(namespace, c.subsystem, key+"_total"),
103103
fmt.Sprintf("Network device statistic %s.", key),
104-
[]string{"device"},
104+
labels,
105105
nil,
106106
)
107107
}
@@ -114,13 +114,29 @@ func (c *netDevCollector) Update(ch chan<- prometheus.Metric) error {
114114
if err != nil {
115115
return fmt.Errorf("couldn't get netstats: %w", err)
116116
}
117+
118+
netDevLabels, err := getNetDevLabels()
119+
if err != nil {
120+
return fmt.Errorf("couldn't get netdev labels: %w", err)
121+
}
122+
117123
for dev, devStats := range netDev {
118124
if !*netdevDetailedMetrics {
119125
legacy(devStats)
120126
}
127+
128+
labels := []string{"device"}
129+
labelValues := []string{dev}
130+
if devLabels, exists := netDevLabels[dev]; exists {
131+
for labelName, labelValue := range devLabels {
132+
labels = append(labels, labelName)
133+
labelValues = append(labelValues, labelValue)
134+
}
135+
}
136+
121137
for key, value := range devStats {
122-
desc := c.metricDesc(key)
123-
ch <- prometheus.MustNewConstMetric(desc, prometheus.CounterValue, float64(value), dev)
138+
desc := c.metricDesc(key, labels)
139+
ch <- prometheus.MustNewConstMetric(desc, prometheus.CounterValue, float64(value), labelValues...)
124140
}
125141
}
126142
if *netdevAddressInfo {

collector/netdev_darwin.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,3 +118,8 @@ type ifData64 struct {
118118
Xmittiming uint32
119119
Lastchange unix.Timeval32
120120
}
121+
122+
func getNetDevLabels() (map[string]map[string]string, error) {
123+
// to be implemented if needed
124+
return nil, nil
125+
}

collector/netdev_linux.go

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,12 @@ import (
2424
"github.com/go-kit/log/level"
2525
"github.com/jsimonetti/rtnetlink"
2626
"github.com/prometheus/procfs"
27+
"github.com/prometheus/procfs/sysfs"
2728
)
2829

2930
var (
30-
netDevNetlink = kingpin.Flag("collector.netdev.netlink", "Use netlink to gather stats instead of /proc/net/dev.").Default("true").Bool()
31+
netDevNetlink = kingpin.Flag("collector.netdev.netlink", "Use netlink to gather stats instead of /proc/net/dev.").Default("true").Bool()
32+
netdevLabelIfAlias = kingpin.Flag("collector.netdev.label-ifalias", "Add ifAlias label").Default("false").Bool()
3133
)
3234

3335
func getNetDevStats(filter *deviceFilter, logger log.Logger) (netDevStats, error) {
@@ -184,3 +186,26 @@ func procNetDevStats(filter *deviceFilter, logger log.Logger) (netDevStats, erro
184186

185187
return metrics, nil
186188
}
189+
190+
func getNetDevLabels() (map[string]map[string]string, error) {
191+
if !*netdevLabelIfAlias {
192+
return nil, nil
193+
}
194+
195+
fs, err := sysfs.NewFS(*sysPath)
196+
if err != nil {
197+
return nil, err
198+
}
199+
200+
interfaces, err := fs.NetClass()
201+
if err != nil {
202+
return nil, err
203+
}
204+
205+
labels := make(map[string]map[string]string)
206+
for iface, params := range interfaces {
207+
labels[iface] = map[string]string{"ifalias": params.IfAlias}
208+
}
209+
210+
return labels, nil
211+
}

collector/netdev_openbsd.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,8 @@ func getNetDevStats(filter *deviceFilter, logger log.Logger) (netDevStats, error
7272

7373
return netDev, nil
7474
}
75+
76+
func getNetDevLabels() (map[string]map[string]string, error) {
77+
// to be implemented if needed
78+
return nil, nil
79+
}

collector/netdev_openbsd_amd64.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@ import (
2020
"github.com/go-kit/log"
2121
"github.com/go-kit/log/level"
2222

23-
"golang.org/x/sys/unix"
2423
"unsafe"
24+
25+
"golang.org/x/sys/unix"
2526
)
2627

2728
func getNetDevStats(filter *deviceFilter, logger log.Logger) (netDevStats, error) {
@@ -76,3 +77,8 @@ func getNetDevStats(filter *deviceFilter, logger log.Logger) (netDevStats, error
7677
}
7778
return netDev, nil
7879
}
80+
81+
func getNetDevLabels() (map[string]map[string]string, error) {
82+
// to be implemented if needed
83+
return nil, nil
84+
}

0 commit comments

Comments
 (0)