mirror of
				https://github.com/prometheus/node_exporter.git
				synced 2025-08-20 18:33:52 -07: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 | ||||
| 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 | ||||
|   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 | ||||
|  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 | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ import ( | |||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"os" | ||||
| 	"regexp" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| 
 | ||||
|  | @ -18,6 +19,10 @@ const ( | |||
| 	netDevSubsystem = "network" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	fieldSep = regexp.MustCompile("[ :] *") | ||||
| ) | ||||
| 
 | ||||
| type netDevCollector struct { | ||||
| 	config  Config | ||||
| 	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]) | ||||
| 	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 { | ||||
| 			return nil, fmt.Errorf("Invalid line in %s: %s", | ||||
| 				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) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
|  |  | |||
|  | @ -21,6 +21,10 @@ func TestNetDevStats(t *testing.T) { | |||
| 		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 { | ||||
| 		t.Errorf("want netstat tun0 packets %s, got %s", want, got) | ||||
| 	} | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue