func (p *Processes) Gather(acc telegraf.Accumulator) error { // Get an empty map of metric fields fields := getEmptyFields() // Decide if we will use 'ps' to get stats (use procfs otherwise) usePS := true if runtime.GOOS == "linux" { usePS = false } if p.forcePS { usePS = true } else if p.forceProc { usePS = false } // Gather stats from 'ps' or procfs if usePS { if err := p.gatherFromPS(fields); err != nil { return err } } else { if err := p.gatherFromProc(fields); err != nil { return err } } acc.AddGauge("processes", fields, nil) return nil }
func (_ *SystemStats) Gather(acc telegraf.Accumulator) error { loadavg, err := load.Avg() if err != nil { return err } hostinfo, err := host.Info() if err != nil { 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{}{ "uptime": hostinfo.Uptime, "uptime_format": format_uptime(hostinfo.Uptime), }, nil) return nil }
func (s *SwapStats) Gather(acc telegraf.Accumulator) error { swap, err := s.ps.SwapStat() if err != nil { return fmt.Errorf("error getting swap memory info: %s", err) } fieldsG := map[string]interface{}{ "total": swap.Total, "used": swap.Used, "free": swap.Free, "used_percent": swap.UsedPercent, } fieldsC := map[string]interface{}{ "in": swap.Sin, "out": swap.Sout, } acc.AddGauge("swap", fieldsG, nil) acc.AddCounter("swap", fieldsC, nil) return nil }
func (s *DiskStats) Gather(acc telegraf.Accumulator) error { // Legacy support: if len(s.Mountpoints) != 0 { s.MountPoints = s.Mountpoints } disks, err := s.ps.DiskUsage(s.MountPoints, s.IgnoreFS) if err != nil { return fmt.Errorf("error getting disk usage info: %s", err) } for _, du := range disks { if du.Total == 0 { // Skip dummy filesystem (procfs, cgroupfs, ...) continue } tags := map[string]string{ "path": du.Path, "fstype": du.Fstype, } var used_percent float64 if du.Used+du.Free > 0 { used_percent = float64(du.Used) / (float64(du.Used) + float64(du.Free)) * 100 } fields := map[string]interface{}{ "total": du.Total, "free": du.Free, "used": du.Used, "used_percent": used_percent, "inodes_total": du.InodesTotal, "inodes_free": du.InodesFree, "inodes_used": du.InodesUsed, } acc.AddGauge("disk", fields, tags) } return nil }
func (s *CPUStats) Gather(acc telegraf.Accumulator) error { times, err := s.ps.CPUTimes(s.PerCPU, s.TotalCPU) if err != nil { return fmt.Errorf("error getting CPU info: %s", err) } now := time.Now() for i, cts := range times { tags := map[string]string{ "cpu": cts.CPU, } total := totalCpuTime(cts) if s.CollectCPUTime { // Add cpu time metrics fieldsC := map[string]interface{}{ "time_user": cts.User, "time_system": cts.System, "time_idle": cts.Idle, "time_nice": cts.Nice, "time_iowait": cts.Iowait, "time_irq": cts.Irq, "time_softirq": cts.Softirq, "time_steal": cts.Steal, "time_guest": cts.Guest, "time_guest_nice": cts.GuestNice, } acc.AddCounter("cpu", fieldsC, tags, now) } // Add in percentage if len(s.lastStats) == 0 { // If it's the 1st gather, can't get CPU Usage stats yet continue } lastCts := s.lastStats[i] lastTotal := totalCpuTime(lastCts) totalDelta := total - lastTotal if totalDelta < 0 { s.lastStats = times return fmt.Errorf("Error: current total CPU time is less than previous total CPU time") } if totalDelta == 0 { continue } fieldsG := map[string]interface{}{ "usage_user": 100 * (cts.User - lastCts.User) / totalDelta, "usage_system": 100 * (cts.System - lastCts.System) / totalDelta, "usage_idle": 100 * (cts.Idle - lastCts.Idle) / totalDelta, "usage_nice": 100 * (cts.Nice - lastCts.Nice) / totalDelta, "usage_iowait": 100 * (cts.Iowait - lastCts.Iowait) / totalDelta, "usage_irq": 100 * (cts.Irq - lastCts.Irq) / totalDelta, "usage_softirq": 100 * (cts.Softirq - lastCts.Softirq) / totalDelta, "usage_steal": 100 * (cts.Steal - lastCts.Steal) / totalDelta, "usage_guest": 100 * (cts.Guest - lastCts.Guest) / totalDelta, "usage_guest_nice": 100 * (cts.GuestNice - lastCts.GuestNice) / totalDelta, } acc.AddGauge("cpu", fieldsG, tags, now) } s.lastStats = times return nil }