diff --git a/plugins/inputs/system/SYSTEM_README.md b/plugins/inputs/system/SYSTEM_README.md index 09290832c..bea9bd2d9 100644 --- a/plugins/inputs/system/SYSTEM_README.md +++ b/plugins/inputs/system/SYSTEM_README.md @@ -1,8 +1,7 @@ # System Input Plugin The system plugin gathers general stats on system load, uptime, -and number of users logged in. It is basically equivalent -to the unix `uptime` command. +and number of users logged in. It is similar to the unix `uptime` command. ### Configuration: @@ -11,29 +10,27 @@ to the unix `uptime` command. [[inputs.system]] # no configuration ``` +#### Permissions: -### Measurements & Fields: +The `n_users` field requires read access to `/var/run/utmp`, and may require +the `telegraf` user to be added to the `utmp` group on some systems. + +### Metrics: - system - - load1 (float) - - load15 (float) - - load5 (float) - - n_users (integer) - - n_cpus (integer) - - uptime (integer, seconds) - - uptime_format (string) - -### Tags: - -None + - fields: + - load1 (float) + - load15 (float) + - load5 (float) + - n_users (integer) + - n_cpus (integer) + - uptime (integer, seconds) + - uptime_format (string) ### Example Output: ``` -$ telegraf --config ~/ws/telegraf.conf --input-filter system --test -* Plugin: system, Collection 1 -* Plugin: inputs.system, Collection 1 -> system,host=tyrion load1=3.72,load5=2.4,load15=2.1,n_users=3i,n_cpus=4i 1483964144000000000 -> system,host=tyrion uptime=1249632i 1483964144000000000 -> system,host=tyrion uptime_format="14 days, 11:07" 1483964144000000000 +system,host=tyrion load1=3.72,load5=2.4,load15=2.1,n_users=3i,n_cpus=4i 1483964144000000000 +system,host=tyrion uptime=1249632i 1483964144000000000 +system,host=tyrion uptime_format="14 days, 11:07" 1483964144000000000 ``` diff --git a/plugins/inputs/system/system.go b/plugins/inputs/system/system.go index 980e2fa38..fd204d6af 100644 --- a/plugins/inputs/system/system.go +++ b/plugins/inputs/system/system.go @@ -4,6 +4,7 @@ import ( "bufio" "bytes" "fmt" + "os" "runtime" "strings" @@ -28,23 +29,27 @@ func (_ *SystemStats) Gather(acc telegraf.Accumulator) error { return err } + fields := map[string]interface{}{ + "load1": loadavg.Load1, + "load5": loadavg.Load5, + "load15": loadavg.Load15, + "n_cpus": runtime.NumCPU(), + } + + users, err := host.Users() + if err == nil { + fields["n_users"] = len(users) + } else if !os.IsPermission(err) { + return err + } + + acc.AddGauge("system", fields, nil) + hostinfo, err := host.Info() if err != nil { return err } - users, err := host.Users() - if err != nil { - return err - } - - acc.AddGauge("system", map[string]interface{}{ - "load1": loadavg.Load1, - "load5": loadavg.Load5, - "load15": loadavg.Load15, - "n_users": len(users), - "n_cpus": runtime.NumCPU(), - }, nil) acc.AddCounter("system", map[string]interface{}{ "uptime": hostinfo.Uptime, }, nil)