Skip to content

Commit 00ddf58

Browse files
committed
Merge pull request #76 from prometheus/fix-netdev-parsing
Fix /proc/net/dev column parsing.
2 parents 5b20dad + 072ddab commit 00ddf58

File tree

3 files changed

+13
-2
lines changed

3 files changed

+13
-2
lines changed

collector/fixtures/net-dev

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ Inter-| Receive | Transmit
33
tun0: 1888 24 0 0 0 0 0 0 67120 934 0 0 0 0 0 0
44
veth4B09XN: 648 8 0 0 0 0 0 0 1943284 10640 0 0 0 0 0 0
55
lo: 435303245 1832522 0 0 0 0 0 0 435303245 1832522 0 0 0 0 0 0
6+
eth0:68210035552 520993275 0 0 0 0 0 0 9315587528 43451486 0 0 0 0 0 0
67
lxcbr0: 0 0 0 0 0 0 0 0 2630299 28339 0 0 0 0 0 0
78
wlan0: 10437182923 13899359 0 0 0 0 0 0 2851649360 11726200 0 0 0 0 0 0
89
docker0: 64910168 1065585 0 0 0 0 0 0 2681662018 1929779 0 0 0 0 0 0

collector/netdev.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"fmt"
88
"io"
99
"os"
10+
"regexp"
1011
"strconv"
1112
"strings"
1213

@@ -18,6 +19,10 @@ const (
1819
netDevSubsystem = "network"
1920
)
2021

22+
var (
23+
fieldSep = regexp.MustCompile("[ :] *")
24+
)
25+
2126
type netDevCollector struct {
2227
config Config
2328
metrics map[string]*prometheus.GaugeVec
@@ -95,13 +100,14 @@ func parseNetDevStats(r io.Reader) (map[string]map[string]map[string]string, err
95100
}
96101
header := strings.Fields(parts[1])
97102
for scanner.Scan() {
98-
parts := strings.Fields(string(scanner.Text()))
103+
line := strings.TrimLeft(string(scanner.Text()), " ")
104+
parts := fieldSep.Split(line, -1)
99105
if len(parts) != 2*len(header)+1 {
100106
return nil, fmt.Errorf("Invalid line in %s: %s",
101107
procNetDev, scanner.Text())
102108
}
103109

104-
dev := parts[0][:len(parts[0])-1]
110+
dev := parts[0][:len(parts[0])]
105111
receive, err := parseNetDevLine(parts[1:len(header)+1], header)
106112
if err != nil {
107113
return nil, err

collector/netdev_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ func TestNetDevStats(t *testing.T) {
2121
t.Errorf("want netstat wlan0 bytes %s, got %s", want, got)
2222
}
2323

24+
if want, got := "68210035552", netStats["receive"]["eth0"]["bytes"]; want != got {
25+
t.Errorf("want netstat eth0 bytes %s, got %s", want, got)
26+
}
27+
2428
if want, got := "934", netStats["transmit"]["tun0"]["packets"]; want != got {
2529
t.Errorf("want netstat tun0 packets %s, got %s", want, got)
2630
}

0 commit comments

Comments
 (0)