Filter disk stats by filesystem type, for Linux.
If we don't want to record the stats of NFS, tmpfs, /proc and similar then specify: fstypes = ["ext4", "xfs"] In the config file.
This commit is contained in:
parent
6eb4bdcf0e
commit
f1af559f11
|
@ -8,16 +8,25 @@ import (
|
||||||
|
|
||||||
type DiskStats struct {
|
type DiskStats struct {
|
||||||
ps PS
|
ps PS
|
||||||
|
Fstypes []string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *DiskStats) Description() string {
|
func (_ *DiskStats) Description() string {
|
||||||
return "Read metrics about disk usage by mount point"
|
return "Read metrics about disk usage by mount point"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *DiskStats) SampleConfig() string { return "" }
|
var diskSampleConfig = `
|
||||||
|
# By default, telegraf gathers stats from any mounted partition, including
|
||||||
|
# NFS shares, /proc, tmpfs.
|
||||||
|
# fstypes = ["xfs", "ext4", ...]
|
||||||
|
`
|
||||||
|
|
||||||
|
func (_ *DiskStats) SampleConfig() string {
|
||||||
|
return diskSampleConfig
|
||||||
|
}
|
||||||
|
|
||||||
func (s *DiskStats) Gather(acc plugins.Accumulator) error {
|
func (s *DiskStats) Gather(acc plugins.Accumulator) error {
|
||||||
disks, err := s.ps.DiskUsage()
|
disks, err := s.ps.DiskUsage(s.Fstypes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error getting disk usage info: %s", err)
|
return fmt.Errorf("error getting disk usage info: %s", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ type DockerContainerStat struct {
|
||||||
type PS interface {
|
type PS interface {
|
||||||
LoadAvg() (*load.LoadAvgStat, error)
|
LoadAvg() (*load.LoadAvgStat, error)
|
||||||
CPUTimes() ([]cpu.CPUTimesStat, error)
|
CPUTimes() ([]cpu.CPUTimesStat, error)
|
||||||
DiskUsage() ([]*disk.DiskUsageStat, error)
|
DiskUsage(fstypes []string) ([]*disk.DiskUsageStat, error)
|
||||||
NetIO() ([]net.NetIOCountersStat, error)
|
NetIO() ([]net.NetIOCountersStat, error)
|
||||||
DiskIO() (map[string]disk.DiskIOCountersStat, error)
|
DiskIO() (map[string]disk.DiskIOCountersStat, error)
|
||||||
VMStat() (*mem.VirtualMemoryStat, error)
|
VMStat() (*mem.VirtualMemoryStat, error)
|
||||||
|
@ -53,8 +53,8 @@ func (s *systemPS) CPUTimes() ([]cpu.CPUTimesStat, error) {
|
||||||
return cpu.CPUTimes(true)
|
return cpu.CPUTimes(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *systemPS) DiskUsage() ([]*disk.DiskUsageStat, error) {
|
func (s *systemPS) DiskUsage(fstypes []string) ([]*disk.DiskUsageStat, error) {
|
||||||
parts, err := disk.DiskPartitions(true)
|
parts, err := disk.DiskPartitions(fstypes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ const (
|
||||||
|
|
||||||
// Get disk partitions.
|
// Get disk partitions.
|
||||||
// should use setmntent(3) but this implement use /etc/mtab file
|
// should use setmntent(3) but this implement use /etc/mtab file
|
||||||
func DiskPartitions(all bool) ([]DiskPartitionStat, error) {
|
func DiskPartitions(fstypes []string) ([]DiskPartitionStat, error) {
|
||||||
|
|
||||||
filename := "/etc/mtab"
|
filename := "/etc/mtab"
|
||||||
lines, err := common.ReadLines(filename)
|
lines, err := common.ReadLines(filename)
|
||||||
|
@ -25,10 +25,17 @@ func DiskPartitions(all bool) ([]DiskPartitionStat, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set := make(map[string]struct{}, len(fstypes))
|
||||||
|
for _, s := range fstypes {
|
||||||
|
set[s] = struct{}{}
|
||||||
|
}
|
||||||
|
|
||||||
ret := make([]DiskPartitionStat, 0, len(lines))
|
ret := make([]DiskPartitionStat, 0, len(lines))
|
||||||
|
|
||||||
for _, line := range lines {
|
for _, line := range lines {
|
||||||
fields := strings.Fields(line)
|
fields := strings.Fields(line)
|
||||||
|
_, ok := set[fields[2]]
|
||||||
|
if ok || len(fstypes) == 0 {
|
||||||
d := DiskPartitionStat{
|
d := DiskPartitionStat{
|
||||||
Device: fields[0],
|
Device: fields[0],
|
||||||
Mountpoint: fields[1],
|
Mountpoint: fields[1],
|
||||||
|
@ -37,6 +44,7 @@ func DiskPartitions(all bool) ([]DiskPartitionStat, error) {
|
||||||
}
|
}
|
||||||
ret = append(ret, d)
|
ret = append(ret, d)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return ret, nil
|
return ret, nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue