Can turn pid into tag instead of field

This commit is contained in:
Rikaard Hosein 2016-10-03 20:24:18 -04:00
parent 93e3973be5
commit d5d1d1fc1e
2 changed files with 12 additions and 1 deletions

View File

@ -21,6 +21,7 @@ type Procstat struct {
Prefix string Prefix string
ProcessName string ProcessName string
User string User string
PidTag bool
// pidmap maps a pid to a process object, so we don't recreate every gather // pidmap maps a pid to a process object, so we don't recreate every gather
pidmap map[int32]*process.Process pidmap map[int32]*process.Process
@ -53,6 +54,8 @@ var sampleConfig = `
prefix = "" prefix = ""
## comment this out if you want raw cpu_time stats ## comment this out if you want raw cpu_time stats
fielddrop = ["cpu_time_*"] fielddrop = ["cpu_time_*"]
## This is optional; moves pid into a tag instead of a field
pid_tag = false
` `
func (_ *Procstat) SampleConfig() string { func (_ *Procstat) SampleConfig() string {
@ -70,6 +73,9 @@ func (p *Procstat) Gather(acc telegraf.Accumulator) error {
p.Exe, p.PidFile, p.Pattern, p.User, err.Error()) p.Exe, p.PidFile, p.Pattern, p.User, err.Error())
} else { } else {
for pid, proc := range p.pidmap { for pid, proc := range p.pidmap {
if p.PidTag {
p.tagmap[pid]["pid"] = fmt.Sprint(pid)
}
p := NewSpecProcessor(p.ProcessName, p.Prefix, pid, acc, proc, p.tagmap[pid]) p := NewSpecProcessor(p.ProcessName, p.Prefix, pid, acc, proc, p.tagmap[pid])
p.pushMetrics() p.pushMetrics()
} }

View File

@ -48,7 +48,12 @@ func (p *SpecProcessor) pushMetrics() {
if p.Prefix != "" { if p.Prefix != "" {
prefix = p.Prefix + "_" prefix = p.Prefix + "_"
} }
fields := map[string]interface{}{"pid": p.pid} fields := map[string]interface{}{}
//If pid is not present as a tag, include it as a field.
if _, pidInTags := p.tags["pid"]; !pidInTags {
fields["pid"] = p.pid
}
numThreads, err := p.proc.NumThreads() numThreads, err := p.proc.NumThreads()
if err == nil { if err == nil {