Report available fields if utmp is unreadable (#4043)

(cherry picked from commit 120be7e87b)
This commit is contained in:
Daniel Nelson 2018-04-18 16:55:18 -07:00 committed by Daniel Nelson
parent cdc40783d5
commit 6081bd0b5f
No known key found for this signature in database
GPG Key ID: CAAD59C9444F6155
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,29 +10,27 @@ 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
- load1 (float) - fields:
- load15 (float) - load1 (float)
- load5 (float) - load15 (float)
- n_users (integer) - load5 (float)
- n_cpus (integer) - n_users (integer)
- uptime (integer, seconds) - n_cpus (integer)
- uptime_format (string) - uptime (integer, seconds)
- 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)