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 9e4a330ee5
commit 120be7e87b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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)