mirror of
				https://github.com/prometheus/node_exporter.git
				synced 2025-08-20 18:33:52 -07:00 
			
		
		
		
	Add ifAlias label to netdev collector (#3087)
Signed-off-by: Tomas Vilemaitis <tomas.vilemaitis@gmail.com>
This commit is contained in:
		
							parent
							
								
									f63b64ec63
								
							
						
					
					
						commit
						041d67d269
					
				| 
						 | 
					@ -93,7 +93,7 @@ func NewNetDevCollector(logger log.Logger) (Collector, error) {
 | 
				
			||||||
	}, nil
 | 
						}, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *netDevCollector) metricDesc(key string) *prometheus.Desc {
 | 
					func (c *netDevCollector) metricDesc(key string, labels []string) *prometheus.Desc {
 | 
				
			||||||
	c.metricDescsMutex.Lock()
 | 
						c.metricDescsMutex.Lock()
 | 
				
			||||||
	defer c.metricDescsMutex.Unlock()
 | 
						defer c.metricDescsMutex.Unlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -101,7 +101,7 @@ func (c *netDevCollector) metricDesc(key string) *prometheus.Desc {
 | 
				
			||||||
		c.metricDescs[key] = prometheus.NewDesc(
 | 
							c.metricDescs[key] = prometheus.NewDesc(
 | 
				
			||||||
			prometheus.BuildFQName(namespace, c.subsystem, key+"_total"),
 | 
								prometheus.BuildFQName(namespace, c.subsystem, key+"_total"),
 | 
				
			||||||
			fmt.Sprintf("Network device statistic %s.", key),
 | 
								fmt.Sprintf("Network device statistic %s.", key),
 | 
				
			||||||
			[]string{"device"},
 | 
								labels,
 | 
				
			||||||
			nil,
 | 
								nil,
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -114,13 +114,29 @@ func (c *netDevCollector) Update(ch chan<- prometheus.Metric) error {
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return fmt.Errorf("couldn't get netstats: %w", err)
 | 
							return fmt.Errorf("couldn't get netstats: %w", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						netDevLabels, err := getNetDevLabels()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return fmt.Errorf("couldn't get netdev labels: %w", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for dev, devStats := range netDev {
 | 
						for dev, devStats := range netDev {
 | 
				
			||||||
		if !*netdevDetailedMetrics {
 | 
							if !*netdevDetailedMetrics {
 | 
				
			||||||
			legacy(devStats)
 | 
								legacy(devStats)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							labels := []string{"device"}
 | 
				
			||||||
 | 
							labelValues := []string{dev}
 | 
				
			||||||
 | 
							if devLabels, exists := netDevLabels[dev]; exists {
 | 
				
			||||||
 | 
								for labelName, labelValue := range devLabels {
 | 
				
			||||||
 | 
									labels = append(labels, labelName)
 | 
				
			||||||
 | 
									labelValues = append(labelValues, labelValue)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for key, value := range devStats {
 | 
							for key, value := range devStats {
 | 
				
			||||||
			desc := c.metricDesc(key)
 | 
								desc := c.metricDesc(key, labels)
 | 
				
			||||||
			ch <- prometheus.MustNewConstMetric(desc, prometheus.CounterValue, float64(value), dev)
 | 
								ch <- prometheus.MustNewConstMetric(desc, prometheus.CounterValue, float64(value), labelValues...)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if *netdevAddressInfo {
 | 
						if *netdevAddressInfo {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -118,3 +118,8 @@ type ifData64 struct {
 | 
				
			||||||
	Xmittiming uint32
 | 
						Xmittiming uint32
 | 
				
			||||||
	Lastchange unix.Timeval32
 | 
						Lastchange unix.Timeval32
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func getNetDevLabels() (map[string]map[string]string, error) {
 | 
				
			||||||
 | 
						// to be implemented if needed
 | 
				
			||||||
 | 
						return nil, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,10 +24,12 @@ import (
 | 
				
			||||||
	"github.com/go-kit/log/level"
 | 
						"github.com/go-kit/log/level"
 | 
				
			||||||
	"github.com/jsimonetti/rtnetlink"
 | 
						"github.com/jsimonetti/rtnetlink"
 | 
				
			||||||
	"github.com/prometheus/procfs"
 | 
						"github.com/prometheus/procfs"
 | 
				
			||||||
 | 
						"github.com/prometheus/procfs/sysfs"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
	netDevNetlink      = kingpin.Flag("collector.netdev.netlink", "Use netlink to gather stats instead of /proc/net/dev.").Default("true").Bool()
 | 
						netDevNetlink      = kingpin.Flag("collector.netdev.netlink", "Use netlink to gather stats instead of /proc/net/dev.").Default("true").Bool()
 | 
				
			||||||
 | 
						netdevLabelIfAlias = kingpin.Flag("collector.netdev.label-ifalias", "Add ifAlias label").Default("false").Bool()
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func getNetDevStats(filter *deviceFilter, logger log.Logger) (netDevStats, error) {
 | 
					func getNetDevStats(filter *deviceFilter, logger log.Logger) (netDevStats, error) {
 | 
				
			||||||
| 
						 | 
					@ -184,3 +186,26 @@ func procNetDevStats(filter *deviceFilter, logger log.Logger) (netDevStats, erro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return metrics, nil
 | 
						return metrics, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func getNetDevLabels() (map[string]map[string]string, error) {
 | 
				
			||||||
 | 
						if !*netdevLabelIfAlias {
 | 
				
			||||||
 | 
							return nil, nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						fs, err := sysfs.NewFS(*sysPath)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						interfaces, err := fs.NetClass()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						labels := make(map[string]map[string]string)
 | 
				
			||||||
 | 
						for iface, params := range interfaces {
 | 
				
			||||||
 | 
							labels[iface] = map[string]string{"ifalias": params.IfAlias}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return labels, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -72,3 +72,8 @@ func getNetDevStats(filter *deviceFilter, logger log.Logger) (netDevStats, error
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return netDev, nil
 | 
						return netDev, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func getNetDevLabels() (map[string]map[string]string, error) {
 | 
				
			||||||
 | 
						// to be implemented if needed
 | 
				
			||||||
 | 
						return nil, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,8 +20,9 @@ import (
 | 
				
			||||||
	"github.com/go-kit/log"
 | 
						"github.com/go-kit/log"
 | 
				
			||||||
	"github.com/go-kit/log/level"
 | 
						"github.com/go-kit/log/level"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"golang.org/x/sys/unix"
 | 
					 | 
				
			||||||
	"unsafe"
 | 
						"unsafe"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"golang.org/x/sys/unix"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func getNetDevStats(filter *deviceFilter, logger log.Logger) (netDevStats, error) {
 | 
					func getNetDevStats(filter *deviceFilter, logger log.Logger) (netDevStats, error) {
 | 
				
			||||||
| 
						 | 
					@ -76,3 +77,8 @@ func getNetDevStats(filter *deviceFilter, logger log.Logger) (netDevStats, error
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return netDev, nil
 | 
						return netDev, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func getNetDevLabels() (map[string]map[string]string, error) {
 | 
				
			||||||
 | 
						// to be implemented if needed
 | 
				
			||||||
 | 
						return nil, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue