mirror of
				https://github.com/prometheus/node_exporter.git
				synced 2025-08-20 18:33:52 -07:00 
			
		
		
		
	Merge 7df3a8b94c into be19d537cd
				
					
				
			This commit is contained in:
		
						commit
						f03f1540bb
					
				| 
						 | 
					@ -22,14 +22,20 @@ import (
 | 
				
			||||||
	"log/slog"
 | 
						"log/slog"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
 | 
						"strconv"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/prometheus/client_golang/prometheus"
 | 
						"github.com/prometheus/client_golang/prometheus"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type bondingCollector struct {
 | 
					type bondingCollector struct {
 | 
				
			||||||
	slaves, active typedDesc
 | 
						slaves, active, miimon typedDesc
 | 
				
			||||||
	logger         *slog.Logger
 | 
						logger                 *slog.Logger
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type bondingStats struct {
 | 
				
			||||||
 | 
						name                   string
 | 
				
			||||||
 | 
						slaves, active, miimon int
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func init() {
 | 
					func init() {
 | 
				
			||||||
| 
						 | 
					@ -50,6 +56,11 @@ func NewBondingCollector(logger *slog.Logger) (Collector, error) {
 | 
				
			||||||
			"Number of active slaves per bonding interface.",
 | 
								"Number of active slaves per bonding interface.",
 | 
				
			||||||
			[]string{"master"}, nil,
 | 
								[]string{"master"}, nil,
 | 
				
			||||||
		), prometheus.GaugeValue},
 | 
							), prometheus.GaugeValue},
 | 
				
			||||||
 | 
							miimon: typedDesc{prometheus.NewDesc(
 | 
				
			||||||
 | 
								prometheus.BuildFQName(namespace, "bonding", "miimon"),
 | 
				
			||||||
 | 
								"MII link monitoring frequency in milliseconds.",
 | 
				
			||||||
 | 
								[]string{"master"}, nil,
 | 
				
			||||||
 | 
							), prometheus.GaugeValue},
 | 
				
			||||||
		logger: logger,
 | 
							logger: logger,
 | 
				
			||||||
	}, nil
 | 
						}, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -65,15 +76,16 @@ func (c *bondingCollector) Update(ch chan<- prometheus.Metric) error {
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for master, status := range bondingStats {
 | 
						for _, bond := range bondingStats {
 | 
				
			||||||
		ch <- c.slaves.mustNewConstMetric(float64(status[0]), master)
 | 
							ch <- c.slaves.mustNewConstMetric(float64(bond.slaves), bond.name)
 | 
				
			||||||
		ch <- c.active.mustNewConstMetric(float64(status[1]), master)
 | 
							ch <- c.active.mustNewConstMetric(float64(bond.active), bond.name)
 | 
				
			||||||
 | 
							ch <- c.miimon.mustNewConstMetric(float64(bond.miimon), bond.name)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func readBondingStats(root string) (status map[string][2]int, err error) {
 | 
					func readBondingStats(root string) (status []bondingStats, err error) {
 | 
				
			||||||
	status = map[string][2]int{}
 | 
						status = []bondingStats{}
 | 
				
			||||||
	masters, err := os.ReadFile(filepath.Join(root, "bonding_masters"))
 | 
						masters, err := os.ReadFile(filepath.Join(root, "bonding_masters"))
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
| 
						 | 
					@ -98,7 +110,22 @@ func readBondingStats(root string) (status map[string][2]int, err error) {
 | 
				
			||||||
				sstat[1]++
 | 
									sstat[1]++
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		status[master] = sstat
 | 
					
 | 
				
			||||||
 | 
							miimon, err := os.ReadFile(filepath.Join(root, master, "bonding", "miimon"))
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return nil, err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							intMiimon, err := strconv.Atoi(strings.TrimSpace(string(miimon)))
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return nil, err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							status = append(status, bondingStats{
 | 
				
			||||||
 | 
								name:   master,
 | 
				
			||||||
 | 
								slaves: sstat[0],
 | 
				
			||||||
 | 
								active: sstat[1],
 | 
				
			||||||
 | 
								miimon: intMiimon,
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return status, err
 | 
						return status, err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,15 +25,15 @@ func TestBonding(t *testing.T) {
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatal(err)
 | 
							t.Fatal(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if bondingStats["bond0"][0] != 0 || bondingStats["bond0"][1] != 0 {
 | 
						if bondingStats[0].name != "bond0" || bondingStats[0].slaves != 0 || bondingStats[0].active != 0 || bondingStats[0].miimon != 100 {
 | 
				
			||||||
		t.Fatal("bond0 in unexpected state")
 | 
							t.Fatal("bond0 in unexpected state")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if bondingStats["int"][0] != 2 || bondingStats["int"][1] != 1 {
 | 
						if bondingStats[1].name != "dmz" || bondingStats[1].slaves != 2 || bondingStats[1].active != 2 || bondingStats[1].miimon != 0 {
 | 
				
			||||||
		t.Fatal("int in unexpected state")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if bondingStats["dmz"][0] != 2 || bondingStats["dmz"][1] != 2 {
 | 
					 | 
				
			||||||
		t.Fatal("dmz in unexpected state")
 | 
							t.Fatal("dmz in unexpected state")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if bondingStats[2].name != "int" || bondingStats[2].slaves != 2 || bondingStats[2].active != 1 || bondingStats[2].miimon != 200 {
 | 
				
			||||||
 | 
							t.Fatal("int in unexpected state")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1723,6 +1723,11 @@ Path: sys/class/net/bond0/bonding/slaves
 | 
				
			||||||
Lines: 0
 | 
					Lines: 0
 | 
				
			||||||
Mode: 644
 | 
					Mode: 644
 | 
				
			||||||
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
					# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
				
			||||||
 | 
					Path: sys/class/net/bond0/bonding/miimon
 | 
				
			||||||
 | 
					Lines: 1
 | 
				
			||||||
 | 
					100
 | 
				
			||||||
 | 
					Mode: 644
 | 
				
			||||||
 | 
					# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
				
			||||||
Path: sys/class/net/bond0/broadcast
 | 
					Path: sys/class/net/bond0/broadcast
 | 
				
			||||||
Lines: 1
 | 
					Lines: 1
 | 
				
			||||||
ff:ff:ff:ff:ff:ff
 | 
					ff:ff:ff:ff:ff:ff
 | 
				
			||||||
| 
						 | 
					@ -1865,6 +1870,11 @@ Lines: 1
 | 
				
			||||||
eth0 eth4
 | 
					eth0 eth4
 | 
				
			||||||
Mode: 644
 | 
					Mode: 644
 | 
				
			||||||
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
					# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
				
			||||||
 | 
					Path: sys/class/net/dmz/bonding/miimon
 | 
				
			||||||
 | 
					Lines: 1
 | 
				
			||||||
 | 
					0
 | 
				
			||||||
 | 
					Mode: 644
 | 
				
			||||||
 | 
					# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
				
			||||||
Path: sys/class/net/dmz/broadcast
 | 
					Path: sys/class/net/dmz/broadcast
 | 
				
			||||||
Lines: 1
 | 
					Lines: 1
 | 
				
			||||||
ff:ff:ff:ff:ff:ff
 | 
					ff:ff:ff:ff:ff:ff
 | 
				
			||||||
| 
						 | 
					@ -2037,6 +2047,11 @@ Lines: 1
 | 
				
			||||||
eth5 eth1
 | 
					eth5 eth1
 | 
				
			||||||
Mode: 644
 | 
					Mode: 644
 | 
				
			||||||
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
					# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
				
			||||||
 | 
					Path: sys/class/net/int/bonding/miimon
 | 
				
			||||||
 | 
					Lines: 1
 | 
				
			||||||
 | 
					200
 | 
				
			||||||
 | 
					Mode: 644
 | 
				
			||||||
 | 
					# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
				
			||||||
Path: sys/class/net/int/broadcast
 | 
					Path: sys/class/net/int/broadcast
 | 
				
			||||||
Lines: 1
 | 
					Lines: 1
 | 
				
			||||||
ff:ff:ff:ff:ff:ff
 | 
					ff:ff:ff:ff:ff:ff
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue