Report available fields if utmp is unreadable (#4043)

This commit is contained in:
Daniel Nelson 2018-04-18 16:55:18 -07:00 committed by GitHub
parent 32eb442e5b
commit 04c72df264
2 changed files with 34 additions and 32 deletions

View File

@ -1,8 +1,7 @@
# System Input Plugin # System Input Plugin
The system plugin gathers general stats on system load, uptime, The system plugin gathers general stats on system load, uptime,
and number of users logged in. It is basically equivalent and number of users logged in. It is similar to the unix `uptime` command.
to the unix `uptime` command.
### Configuration: ### Configuration:
@ -11,10 +10,15 @@ to the unix `uptime` command.
[[inputs.system]] [[inputs.system]]
# no configuration # 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 - system
- fields:
- load1 (float) - load1 (float)
- load15 (float) - load15 (float)
- load5 (float) - load5 (float)
@ -23,17 +27,10 @@ to the unix `uptime` command.
- uptime (integer, seconds) - uptime (integer, seconds)
- uptime_format (string) - uptime_format (string)
### Tags:
None
### Example Output: ### Example Output:
``` ```
$ telegraf --config ~/ws/telegraf.conf --input-filter system --test system,host=tyrion load1=3.72,load5=2.4,load15=2.1,n_users=3i,n_cpus=4i 1483964144000000000
* Plugin: system, Collection 1 system,host=tyrion uptime=1249632i 1483964144000000000
* Plugin: inputs.system, Collection 1 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
``` ```

View File

@ -4,6 +4,7 @@ import (
"bufio" "bufio"
"bytes" "bytes"
"fmt" "fmt"
"os"
"runtime" "runtime"
"strings" "strings"
@ -28,23 +29,27 @@ func (_ *SystemStats) Gather(acc telegraf.Accumulator) error {
return err 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() hostinfo, err := host.Info()
if err != nil { if err != nil {
return err 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{}{ acc.AddCounter("system", map[string]interface{}{
"uptime": hostinfo.Uptime, "uptime": hostinfo.Uptime,
}, nil) }, nil)