diff --git a/CHANGELOG.md b/CHANGELOG.md index d66e4dd3a..89e4affff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,6 +48,10 @@ based on _prefix_ in addition to globs. This means that a filter like - disque: `host -> disque_host` - rethinkdb: `host -> rethinkdb_host` +- The `disk` input plugin can now be configured with the `HOST_MOUNT_PREFIX` environment variable. +This value is prepended to any mountpaths discovered before retrieving stats. +It is not included on the report path. This is necessary for reporting host disk stats when running from within a container. + ### Features - [#1031](https://github.com/influxdata/telegraf/pull/1031): Jolokia plugin proxy mode. Thanks @saiello! diff --git a/plugins/inputs/system/DISK_README.md b/plugins/inputs/system/DISK_README.md index c89007b45..c510615ee 100644 --- a/plugins/inputs/system/DISK_README.md +++ b/plugins/inputs/system/DISK_README.md @@ -16,6 +16,14 @@ https://en.wikipedia.org/wiki/Df_(Unix) for more details. # mount_points = ["/"] ``` +Additionally, the behavior of resolving the `mount_points` can be configured by using the `HOST_MOUNT_PREFIX` environment variable. +When present, this variable is prepended to the mountpoints discovered by the plugin before retrieving stats. +The prefix is stripped from the reported `path` in the measurement. +This settings is useful when running `telegraf` inside a docker container to report host machine metrics. +In this case, the host's root volume should be mounted into the container and the `HOST_MOUNT_PREFIX` and `HOST_ETC` environment variables set. + +`docker run -v /:/hostfs:ro -e HOST_MOUNT_PREFIX=/hostfs -e HOST_ETC=/hostfs/etc telegraf-docker` + ### Measurements & Fields: - disk diff --git a/plugins/inputs/system/ps.go b/plugins/inputs/system/ps.go index f1a1b27d7..9602acd55 100644 --- a/plugins/inputs/system/ps.go +++ b/plugins/inputs/system/ps.go @@ -81,8 +81,10 @@ func (s *systemPS) DiskUsage( continue } } - if _, err := os.Stat(p.Mountpoint); err == nil { - du, err := disk.DiskUsage(p.Mountpoint) + mountpoint := os.Getenv("HOST_MOUNT_PREFIX") + p.Mountpoint + if _, err := os.Stat(mountpoint); err == nil { + du, err := disk.DiskUsage(mountpoint) + du.Path = p.Mountpoint if err != nil { return nil, err }