Specify host mount prefix with envvar.

closes #1120
This commit is contained in:
John Engelman 2016-04-28 14:24:09 -05:00 committed by Cameron Sparr
parent 4c8449f4bc
commit 0b9b7bddd7
3 changed files with 15 additions and 2 deletions

View File

@ -49,6 +49,9 @@ based on _prefix_ in addition to globs. This means that a filter like
- rethinkdb: `host -> rethinkdb_host`
- **Breaking Change**: The `win_perf_counters` input has been changed to sanitize field names, replacing `/Sec` and `/sec` with `_persec`, as well as spaces with underscores. This is needed because Graphite doesn't like slashes and spaces, and was failing to accept metrics that had them. The `/[sS]ec` -> `_persec` is just to make things clearer and uniform.
- 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

View File

@ -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

View File

@ -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
}