diff options
author | Sachi King <nakato@nakato.io> | 2019-02-10 21:00:04 +1100 |
---|---|---|
committer | Ben Kochie <superq@gmail.com> | 2019-02-10 11:00:04 +0100 |
commit | 18fc512fc4d50c2463fa4de8845d33c04a0ed529 (patch) | |
tree | f67aa27f91e5313289545728dbaff57e1ca2e0d0 | |
parent | e0d6d1185988bb1eb33779539399dd0e6cab0238 (diff) | |
download | prometheus_node_collector-18fc512fc4d50c2463fa4de8845d33c04a0ed529.tar.bz2 prometheus_node_collector-18fc512fc4d50c2463fa4de8845d33c04a0ed529.tar.xz prometheus_node_collector-18fc512fc4d50c2463fa4de8845d33c04a0ed529.zip |
Bond: Monitor bond mii_status not link operstate (#1124)
With a bond interface the state of the slave interface from the bond's
point of view is reflected in `mii_status` and is independent of the
link's `operstate`.
When a bond is monitored with `miimon`, `mii_status` will reflect the
state of the physical link as configured via the operator.
When a bond is monitored via `arp_interval` the `mii_status` will
reflect the results of the bond ARP checking. This means the link can
be down from the bond's point of view, but up from a physical
connection point of view.
If a bond is not monitored via miimon or arp, the `mii_status` should
likely be always `up`, however I have observed a case where this is not
true and the `operstate` is `up` while `mii_status` is `down`. Kernel
bond documentation stresses that a bond should not be configured without
one of `mii_mon` or `arp_interval` configured however.
This change results in the metric 'node_bonding_active' matching the
up/down state of the bond's point of view rather than operstate.
Signed-off-by: Sachi King <nakato@nakato.io>
-rw-r--r-- | CHANGELOG.md | 2 | ||||
-rw-r--r-- | collector/bonding_linux.go | 4 | ||||
-rw-r--r-- | collector/fixtures/sys.ttar | 32 |
3 files changed, 36 insertions, 2 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 77f84cb..6d6abb2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md | |||
@@ -6,6 +6,7 @@ | |||
6 | other network metrics #1224 | 6 | other network metrics #1224 |
7 | * The cpufreq metrics now separate the `cpufreq` and `scaling` data based on what the driver provides. #1248 | 7 | * The cpufreq metrics now separate the `cpufreq` and `scaling` data based on what the driver provides. #1248 |
8 | * The labels for the network_up metric have changed, see issue #1236 | 8 | * The labels for the network_up metric have changed, see issue #1236 |
9 | * Bonding collector now uses `mii_status` instead of `operstatus` #1124 | ||
9 | 10 | ||
10 | ### Changes | 11 | ### Changes |
11 | 12 | ||
@@ -21,6 +22,7 @@ | |||
21 | * [FEATURE] Add kstat-based Solaris metrics for boottime, cpu and zfs collectors #1197 | 22 | * [FEATURE] Add kstat-based Solaris metrics for boottime, cpu and zfs collectors #1197 |
22 | * [FEATURE] Add uname collector for FreeBSD #1239 | 23 | * [FEATURE] Add uname collector for FreeBSD #1239 |
23 | * [FEATURE] Add diskstats collector for OpenBSD #1250 | 24 | * [FEATURE] Add diskstats collector for OpenBSD #1250 |
25 | * [CHANGE] Bonding state uses mii_status #1124 | ||
24 | 26 | ||
25 | ## 0.17.0 / 2018-11-30 | 27 | ## 0.17.0 / 2018-11-30 |
26 | 28 | ||
diff --git a/collector/bonding_linux.go b/collector/bonding_linux.go index 829ab6d..f67e2a3 100644 --- a/collector/bonding_linux.go +++ b/collector/bonding_linux.go | |||
@@ -82,10 +82,10 @@ func readBondingStats(root string) (status map[string][2]int, err error) { | |||
82 | } | 82 | } |
83 | sstat := [2]int{0, 0} | 83 | sstat := [2]int{0, 0} |
84 | for _, slave := range strings.Fields(string(slaves)) { | 84 | for _, slave := range strings.Fields(string(slaves)) { |
85 | state, err := ioutil.ReadFile(filepath.Join(root, master, fmt.Sprintf("lower_%s", slave), "operstate")) | 85 | state, err := ioutil.ReadFile(filepath.Join(root, master, fmt.Sprintf("lower_%s", slave), "bonding_slave", "mii_status")) |
86 | if os.IsNotExist(err) { | 86 | if os.IsNotExist(err) { |
87 | // some older? kernels use slave_ prefix | 87 | // some older? kernels use slave_ prefix |
88 | state, err = ioutil.ReadFile(filepath.Join(root, master, fmt.Sprintf("slave_%s", slave), "operstate")) | 88 | state, err = ioutil.ReadFile(filepath.Join(root, master, fmt.Sprintf("slave_%s", slave), "bonding_slave", "mii_status")) |
89 | } | 89 | } |
90 | if err != nil { | 90 | if err != nil { |
91 | return nil, err | 91 | return nil, err |
diff --git a/collector/fixtures/sys.ttar b/collector/fixtures/sys.ttar index 27b0cb4..ee30c81 100644 --- a/collector/fixtures/sys.ttar +++ b/collector/fixtures/sys.ttar | |||
@@ -704,6 +704,14 @@ Mode: 644 | |||
704 | Directory: sys/class/net/dmz/slave_eth0 | 704 | Directory: sys/class/net/dmz/slave_eth0 |
705 | Mode: 755 | 705 | Mode: 755 |
706 | # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 706 | # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
707 | Directory: sys/class/net/dmz/slave_eth0/bonding_slave | ||
708 | Mode: 755 | ||
709 | # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
710 | Path: sys/class/net/dmz/slave_eth0/bonding_slave/mii_status | ||
711 | Lines: 1 | ||
712 | up | ||
713 | Mode: 644 | ||
714 | # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
707 | Path: sys/class/net/dmz/slave_eth0/operstate | 715 | Path: sys/class/net/dmz/slave_eth0/operstate |
708 | Lines: 1 | 716 | Lines: 1 |
709 | up | 717 | up |
@@ -712,6 +720,14 @@ Mode: 644 | |||
712 | Directory: sys/class/net/dmz/slave_eth4 | 720 | Directory: sys/class/net/dmz/slave_eth4 |
713 | Mode: 755 | 721 | Mode: 755 |
714 | # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 722 | # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
723 | Directory: sys/class/net/dmz/slave_eth4/bonding_slave | ||
724 | Mode: 755 | ||
725 | # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
726 | Path: sys/class/net/dmz/slave_eth4/bonding_slave/mii_status | ||
727 | Lines: 1 | ||
728 | up | ||
729 | Mode: 644 | ||
730 | # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
715 | Path: sys/class/net/dmz/slave_eth4/operstate | 731 | Path: sys/class/net/dmz/slave_eth4/operstate |
716 | Lines: 1 | 732 | Lines: 1 |
717 | up | 733 | up |
@@ -860,6 +876,14 @@ Mode: 644 | |||
860 | Directory: sys/class/net/int/slave_eth1 | 876 | Directory: sys/class/net/int/slave_eth1 |
861 | Mode: 755 | 877 | Mode: 755 |
862 | # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 878 | # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
879 | Directory: sys/class/net/int/slave_eth1/bonding_slave | ||
880 | Mode: 755 | ||
881 | # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
882 | Path: sys/class/net/int/slave_eth1/bonding_slave/mii_status | ||
883 | Lines: 1 | ||
884 | down | ||
885 | Mode: 644 | ||
886 | # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
863 | Path: sys/class/net/int/slave_eth1/operstate | 887 | Path: sys/class/net/int/slave_eth1/operstate |
864 | Lines: 1 | 888 | Lines: 1 |
865 | down | 889 | down |
@@ -868,6 +892,14 @@ Mode: 644 | |||
868 | Directory: sys/class/net/int/slave_eth5 | 892 | Directory: sys/class/net/int/slave_eth5 |
869 | Mode: 755 | 893 | Mode: 755 |
870 | # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 894 | # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
895 | Directory: sys/class/net/int/slave_eth5/bonding_slave | ||
896 | Mode: 755 | ||
897 | # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
898 | Path: sys/class/net/int/slave_eth5/bonding_slave/mii_status | ||
899 | Lines: 1 | ||
900 | up | ||
901 | Mode: 644 | ||
902 | # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
871 | Path: sys/class/net/int/slave_eth5/operstate | 903 | Path: sys/class/net/int/slave_eth5/operstate |
872 | Lines: 1 | 904 | Lines: 1 |
873 | up | 905 | up |