mirror of
https://github.com/prometheus/node_exporter.git
synced 2024-12-28 23:19:46 -08:00
[continue 912] strip rootfs prefix for run in docker (#1058)
* strip rootfs prefix for run in docker * Use `/` as default value of path.rootfs, and parse mounts from `/proc/1/mounts`. * No need to mount `/proc` and `/sys` because we share host's PID namespace, which allows processes within the container to see all of the processes on the system. Closes: #66 Signed-off-by: Ivan Mikheykin <ivan.mikheykin@flant.com> Signed-off-by: Yecheng Fu <cofyc.jackson@gmail.com>
This commit is contained in:
parent
2269df255c
commit
0f9842f20a
|
@ -144,12 +144,17 @@ The `node_exporter` is designed to monitor the host system. It's not recommended
|
||||||
to deploy it as a Docker container because it requires access to the host system.
|
to deploy it as a Docker container because it requires access to the host system.
|
||||||
Be aware that any non-root mount points you want to monitor will need to be bind-mounted
|
Be aware that any non-root mount points you want to monitor will need to be bind-mounted
|
||||||
into the container.
|
into the container.
|
||||||
|
If you start container for host monitoring, specify `path.rootfs` argument.
|
||||||
|
This argument must match path in bind-mount of host root. The node\_exporter will use
|
||||||
|
`path.rootfs` as prefix to access host filesystem.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run -d \
|
docker run -d \
|
||||||
--net="host" \
|
--net="host" \
|
||||||
--pid="host" \
|
--pid="host" \
|
||||||
quay.io/prometheus/node-exporter
|
-v "/:/host:ro,rslave" \
|
||||||
|
quay.io/prometheus/node-exporter \
|
||||||
|
--path.rootfs /host
|
||||||
```
|
```
|
||||||
|
|
||||||
On some systems, the `timex` collector requires an additional Docker flag,
|
On some systems, the `timex` collector requires an additional Docker flag,
|
||||||
|
|
|
@ -70,7 +70,7 @@ func (c *filesystemCollector) GetStats() ([]filesystemStats, error) {
|
||||||
go stuckMountWatcher(labels.mountPoint, success)
|
go stuckMountWatcher(labels.mountPoint, success)
|
||||||
|
|
||||||
buf := new(syscall.Statfs_t)
|
buf := new(syscall.Statfs_t)
|
||||||
err = syscall.Statfs(labels.mountPoint, buf)
|
err = syscall.Statfs(rootfsFilePath(labels.mountPoint), buf)
|
||||||
|
|
||||||
stuckMountsMtx.Lock()
|
stuckMountsMtx.Lock()
|
||||||
close(success)
|
close(success)
|
||||||
|
@ -86,7 +86,7 @@ func (c *filesystemCollector) GetStats() ([]filesystemStats, error) {
|
||||||
labels: labels,
|
labels: labels,
|
||||||
deviceError: 1,
|
deviceError: 1,
|
||||||
})
|
})
|
||||||
log.Debugf("Error on statfs() system call for %q: %s", labels.mountPoint, err)
|
log.Debugf("Error on statfs() system call for %q: %s", rootfsFilePath(labels.mountPoint), err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ func stuckMountWatcher(mountPoint string, success chan struct{}) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func mountPointDetails() ([]filesystemLabels, error) {
|
func mountPointDetails() ([]filesystemLabels, error) {
|
||||||
file, err := os.Open(procFilePath("mounts"))
|
file, err := os.Open(procFilePath("1/mounts"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
32
collector/fixtures/proc/1/mounts
Normal file
32
collector/fixtures/proc/1/mounts
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
rootfs / rootfs rw 0 0
|
||||||
|
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
|
||||||
|
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
|
||||||
|
udev /dev devtmpfs rw,relatime,size=10240k,nr_inodes=1008585,mode=755 0 0
|
||||||
|
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
|
||||||
|
tmpfs /run tmpfs rw,nosuid,relatime,size=1617716k,mode=755 0 0
|
||||||
|
/dev/dm-2 / ext4 rw,relatime,errors=remount-ro,data=ordered 0 0
|
||||||
|
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
|
||||||
|
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
|
||||||
|
tmpfs /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k 0 0
|
||||||
|
tmpfs /sys/fs/cgroup tmpfs ro,nosuid,nodev,noexec,mode=755 0 0
|
||||||
|
cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd 0 0
|
||||||
|
pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0
|
||||||
|
cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0
|
||||||
|
cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpu,cpuacct 0 0
|
||||||
|
cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0
|
||||||
|
cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0
|
||||||
|
cgroup /sys/fs/cgroup/net_cls,net_prio cgroup rw,nosuid,nodev,noexec,relatime,net_cls,net_prio 0 0
|
||||||
|
cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0
|
||||||
|
cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0
|
||||||
|
systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=22,pgrp=1,timeout=300,minproto=5,maxproto=5,direct 0 0
|
||||||
|
mqueue /dev/mqueue mqueue rw,relatime 0 0
|
||||||
|
debugfs /sys/kernel/debug debugfs rw,relatime 0 0
|
||||||
|
hugetlbfs /dev/hugepages hugetlbfs rw,relatime 0 0
|
||||||
|
fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0
|
||||||
|
/dev/sda3 /boot ext2 rw,relatime 0 0
|
||||||
|
rpc_pipefs /run/rpc_pipefs rpc_pipefs rw,relatime 0 0
|
||||||
|
binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime 0 0
|
||||||
|
tmpfs /run/user/1000 tmpfs rw,nosuid,nodev,relatime,size=808860k,mode=700,uid=1000,gid=1000 0 0
|
||||||
|
gvfsd-fuse /run/user/1000/gvfs fuse.gvfsd-fuse rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
|
||||||
|
/dev/sda /var/lib/kubelet/plugins/kubernetes.io/vsphere-volume/mounts/[vsanDatastore]\040bafb9e5a-8856-7e6c-699c-801844e77a4a/kubernetes-dynamic-pvc-3eba5bba-48a3-11e8-89ab-005056b92113.vmdk ext4 rw,relatime,data=ordered 0 0
|
||||||
|
/dev/sda /var/lib/kubelet/plugins/kubernetes.io/vsphere-volume/mounts/[vsanDatastore]\011bafb9e5a-8856-7e6c-699c-801844e77a4a/kubernetes-dynamic-pvc-3eba5bba-48a3-11e8-89ab-005056b92113.vmdk ext4 rw,relatime,data=ordered 0 0
|
|
@ -22,8 +22,9 @@ import (
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// The path of the proc filesystem.
|
// The path of the proc filesystem.
|
||||||
procPath = kingpin.Flag("path.procfs", "procfs mountpoint.").Default(procfs.DefaultMountPoint).String()
|
procPath = kingpin.Flag("path.procfs", "procfs mountpoint.").Default(procfs.DefaultMountPoint).String()
|
||||||
sysPath = kingpin.Flag("path.sysfs", "sysfs mountpoint.").Default("/sys").String()
|
sysPath = kingpin.Flag("path.sysfs", "sysfs mountpoint.").Default("/sys").String()
|
||||||
|
rootfsPath = kingpin.Flag("path.rootfs", "rootfs mountpoint.").Default("/").String()
|
||||||
)
|
)
|
||||||
|
|
||||||
func procFilePath(name string) string {
|
func procFilePath(name string) string {
|
||||||
|
@ -33,3 +34,7 @@ func procFilePath(name string) string {
|
||||||
func sysFilePath(name string) string {
|
func sysFilePath(name string) string {
|
||||||
return path.Join(*sysPath, name)
|
return path.Join(*sysPath, name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func rootfsFilePath(name string) string {
|
||||||
|
return path.Join(*rootfsPath, name)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue