mirror of
				https://github.com/prometheus/node_exporter.git
				synced 2025-08-20 18:33:52 -07:00 
			
		
		
		
	Add fallback for missing /proc/1/mounts (#1172)
* Add fallback for missing /proc/1/mounts On some systems, `/proc/1/mounts` is hidden from non-root users due to the `hidepid` procfs feature. Attempt to fallback to `/proc/mounts` if `/proc/1/mounts` is not found. Signed-off-by: Ben Kochie <superq@gmail.com> * Add tests. Signed-off-by: Ben Kochie <superq@gmail.com> * Add CHANGELOG entry. Signed-off-by: Ben Kochie <superq@gmail.com>
This commit is contained in:
		
							parent
							
								
									0cb0c4d911
								
							
						
					
					
						commit
						4abc6fba7d
					
				|  | @ -5,6 +5,7 @@ | |||
| ### Changes | ||||
| 
 | ||||
| * [BUGFIX] | ||||
| * [BUGFIX] Add fallback for missing /proc/1/mounts #1172 | ||||
| * [CHANGE] Add TCPSynRetrans to netstat default filter #1143 | ||||
| * [ENHANCEMENT] Add Infiniband counters #1120 | ||||
| * [FEATURE] Add a flag to disable exporter metrics #1148 | ||||
|  |  | |||
|  | @ -135,6 +135,11 @@ func stuckMountWatcher(mountPoint string, success chan struct{}) { | |||
| 
 | ||||
| func mountPointDetails() ([]filesystemLabels, error) { | ||||
| 	file, err := os.Open(procFilePath("1/mounts")) | ||||
| 	if os.IsNotExist(err) { | ||||
| 		// Fallback to `/proc/mounts` if `/proc/1/mounts` is missing due hidepid.
 | ||||
| 		log.Debugf("Got %q reading root mounts, falling back to system mounts", err) | ||||
| 		file, err = os.Open(procFilePath("mounts")) | ||||
| 	} | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  |  | |||
|  | @ -91,3 +91,24 @@ func TestMountPointDetails(t *testing.T) { | |||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestMountsFallback(t *testing.T) { | ||||
| 	if _, err := kingpin.CommandLine.Parse([]string{"--path.procfs", "./fixtures_hidepid/proc"}); err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	expected := map[string]string{ | ||||
| 		"/": "", | ||||
| 	} | ||||
| 
 | ||||
| 	filesystems, err := mountPointDetails() | ||||
| 	if err != nil { | ||||
| 		t.Log(err) | ||||
| 	} | ||||
| 
 | ||||
| 	for _, fs := range filesystems { | ||||
| 		if _, ok := expected[fs.mountPoint]; !ok { | ||||
| 			t.Errorf("Got unexpected %s", fs.mountPoint) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  |  | |||
							
								
								
									
										1
									
								
								collector/fixtures_hidepid/proc/mounts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								collector/fixtures_hidepid/proc/mounts
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | |||
| rootfs / rootfs rw 0 0 | ||||
		Loading…
	
		Reference in a new issue