mirror of
https://github.com/prometheus/node_exporter.git
synced 2024-12-28 06:59:44 -08:00
Fix /proc/net/dev column parsing.
This fixes https://github.com/prometheus/node_exporter/issues/73
This commit is contained in:
parent
5b20dad9ad
commit
072ddabf62
|
@ -3,6 +3,7 @@ Inter-| Receive | Transmit
|
||||||
tun0: 1888 24 0 0 0 0 0 0 67120 934 0 0 0 0 0 0
|
tun0: 1888 24 0 0 0 0 0 0 67120 934 0 0 0 0 0 0
|
||||||
veth4B09XN: 648 8 0 0 0 0 0 0 1943284 10640 0 0 0 0 0 0
|
veth4B09XN: 648 8 0 0 0 0 0 0 1943284 10640 0 0 0 0 0 0
|
||||||
lo: 435303245 1832522 0 0 0 0 0 0 435303245 1832522 0 0 0 0 0 0
|
lo: 435303245 1832522 0 0 0 0 0 0 435303245 1832522 0 0 0 0 0 0
|
||||||
|
eth0:68210035552 520993275 0 0 0 0 0 0 9315587528 43451486 0 0 0 0 0 0
|
||||||
lxcbr0: 0 0 0 0 0 0 0 0 2630299 28339 0 0 0 0 0 0
|
lxcbr0: 0 0 0 0 0 0 0 0 2630299 28339 0 0 0 0 0 0
|
||||||
wlan0: 10437182923 13899359 0 0 0 0 0 0 2851649360 11726200 0 0 0 0 0 0
|
wlan0: 10437182923 13899359 0 0 0 0 0 0 2851649360 11726200 0 0 0 0 0 0
|
||||||
docker0: 64910168 1065585 0 0 0 0 0 0 2681662018 1929779 0 0 0 0 0 0
|
docker0: 64910168 1065585 0 0 0 0 0 0 2681662018 1929779 0 0 0 0 0 0
|
||||||
|
|
|
@ -7,6 +7,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
@ -18,6 +19,10 @@ const (
|
||||||
netDevSubsystem = "network"
|
netDevSubsystem = "network"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
fieldSep = regexp.MustCompile("[ :] *")
|
||||||
|
)
|
||||||
|
|
||||||
type netDevCollector struct {
|
type netDevCollector struct {
|
||||||
config Config
|
config Config
|
||||||
metrics map[string]*prometheus.GaugeVec
|
metrics map[string]*prometheus.GaugeVec
|
||||||
|
@ -95,13 +100,14 @@ func parseNetDevStats(r io.Reader) (map[string]map[string]map[string]string, err
|
||||||
}
|
}
|
||||||
header := strings.Fields(parts[1])
|
header := strings.Fields(parts[1])
|
||||||
for scanner.Scan() {
|
for scanner.Scan() {
|
||||||
parts := strings.Fields(string(scanner.Text()))
|
line := strings.TrimLeft(string(scanner.Text()), " ")
|
||||||
|
parts := fieldSep.Split(line, -1)
|
||||||
if len(parts) != 2*len(header)+1 {
|
if len(parts) != 2*len(header)+1 {
|
||||||
return nil, fmt.Errorf("Invalid line in %s: %s",
|
return nil, fmt.Errorf("Invalid line in %s: %s",
|
||||||
procNetDev, scanner.Text())
|
procNetDev, scanner.Text())
|
||||||
}
|
}
|
||||||
|
|
||||||
dev := parts[0][:len(parts[0])-1]
|
dev := parts[0][:len(parts[0])]
|
||||||
receive, err := parseNetDevLine(parts[1:len(header)+1], header)
|
receive, err := parseNetDevLine(parts[1:len(header)+1], header)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -21,6 +21,10 @@ func TestNetDevStats(t *testing.T) {
|
||||||
t.Errorf("want netstat wlan0 bytes %s, got %s", want, got)
|
t.Errorf("want netstat wlan0 bytes %s, got %s", want, got)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if want, got := "68210035552", netStats["receive"]["eth0"]["bytes"]; want != got {
|
||||||
|
t.Errorf("want netstat eth0 bytes %s, got %s", want, got)
|
||||||
|
}
|
||||||
|
|
||||||
if want, got := "934", netStats["transmit"]["tun0"]["packets"]; want != got {
|
if want, got := "934", netStats["transmit"]["tun0"]["packets"]; want != got {
|
||||||
t.Errorf("want netstat tun0 packets %s, got %s", want, got)
|
t.Errorf("want netstat tun0 packets %s, got %s", want, got)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue