diff --git a/plugins/inputs/procstat/README.md b/plugins/inputs/procstat/README.md index 96777b797..425b15f5b 100644 --- a/plugins/inputs/procstat/README.md +++ b/plugins/inputs/procstat/README.md @@ -124,6 +124,7 @@ the `win_perf_counters` input plugin as a more mature alternative. - num_threads (int) - pid (int) - ppid (int) + - status (string) - read_bytes (int, *telegraf* may need to be ran as **root**) - read_count (int, *telegraf* may need to be ran as **root**) - realtime_priority (int) diff --git a/plugins/inputs/procstat/process.go b/plugins/inputs/procstat/process.go index 37da0b507..543d36c4f 100644 --- a/plugins/inputs/procstat/process.go +++ b/plugins/inputs/procstat/process.go @@ -28,6 +28,7 @@ type Process interface { Username() (string, error) CreateTime() (int64, error) Ppid() (int32, error) + Status() ([]string, error) } type PIDFinder interface { diff --git a/plugins/inputs/procstat/procstat.go b/plugins/inputs/procstat/procstat.go index 2aad8ba25..fef649504 100644 --- a/plugins/inputs/procstat/procstat.go +++ b/plugins/inputs/procstat/procstat.go @@ -284,6 +284,11 @@ func (p *Procstat) addMetric(proc Process, acc telegraf.Accumulator, t time.Time fields[prefix+"ppid"] = ppid } + status, err := proc.Status() + if err == nil { + fields[prefix+"status"] = status[0] + } + acc.AddFields("procstat", fields, proc.Tags(), t) } diff --git a/plugins/inputs/procstat/procstat_test.go b/plugins/inputs/procstat/procstat_test.go index 24beed1e2..0b35d3d1f 100644 --- a/plugins/inputs/procstat/procstat_test.go +++ b/plugins/inputs/procstat/procstat_test.go @@ -169,6 +169,10 @@ func (p *testProc) Ppid() (int32, error) { return 0, nil } +func (p *testProc) Status() ([]string, error) { + return []string{"running"}, nil +} + var pid = PID(42) var exe = "foo"