Add laundry to mem input plugin on FreeBSD (#7736)
Additionally only report fields that may be set on the platform.
This commit is contained in:
parent
6d120168fe
commit
810bb6da8f
|
|
@ -18,41 +18,42 @@ Available fields are dependent on platform.
|
||||||
|
|
||||||
- mem
|
- mem
|
||||||
- fields:
|
- fields:
|
||||||
- active (integer)
|
- active (integer, Darwin, FreeBSD, Linux, OpenBSD)
|
||||||
- available (integer)
|
- available (integer)
|
||||||
- buffered (integer)
|
- available_percent (float)
|
||||||
- cached (integer)
|
- buffered (integer, FreeBSD, Linux)
|
||||||
- free (integer)
|
- cached (integer, FreeBSD, Linux, OpenBSD)
|
||||||
- inactive (integer)
|
- commit_limit (integer, Linux)
|
||||||
- slab (integer)
|
- committed_as (integer, Linux)
|
||||||
|
- dirty (integer, Linux)
|
||||||
|
- free (integer, Darwin, FreeBSD, Linux, OpenBSD)
|
||||||
|
- high_free (integer, Linux)
|
||||||
|
- high_total (integer, Linux)
|
||||||
|
- huge_pages_free (integer, Linux)
|
||||||
|
- huge_page_size (integer, Linux)
|
||||||
|
- huge_pages_total (integer, Linux)
|
||||||
|
- inactive (integer, Darwin, FreeBSD, Linux, OpenBSD)
|
||||||
|
- laundry (integer, FreeBSD)
|
||||||
|
- low_free (integer, Linux)
|
||||||
|
- low_total (integer, Linux)
|
||||||
|
- mapped (integer, Linux)
|
||||||
|
- page_tables (integer, Linux)
|
||||||
|
- shared (integer, Linux)
|
||||||
|
- slab (integer, Linux)
|
||||||
|
- sreclaimable (integer, Linux)
|
||||||
|
- sunreclaim (integer, Linux)
|
||||||
|
- swap_cached (integer, Linux)
|
||||||
|
- swap_free (integer, Linux)
|
||||||
|
- swap_total (integer, Linux)
|
||||||
- total (integer)
|
- total (integer)
|
||||||
- used (integer)
|
- used (integer)
|
||||||
- available_percent (float)
|
|
||||||
- used_percent (float)
|
- used_percent (float)
|
||||||
- wired (integer)
|
- vmalloc_chunk (integer, Linux)
|
||||||
- commit_limit (integer)
|
- vmalloc_total (integer, Linux)
|
||||||
- committed_as (integer)
|
- vmalloc_used (integer, Linux)
|
||||||
- dirty (integer)
|
- wired (integer, Darwin, FreeBSD, OpenBSD)
|
||||||
- high_free (integer)
|
- write_back (integer, Linux)
|
||||||
- high_total (integer)
|
- write_back_tmp (integer, Linux)
|
||||||
- huge_page_size (integer)
|
|
||||||
- huge_pages_free (integer)
|
|
||||||
- huge_pages_total (integer)
|
|
||||||
- low_free (integer)
|
|
||||||
- low_total (integer)
|
|
||||||
- mapped (integer)
|
|
||||||
- page_tables (integer)
|
|
||||||
- shared (integer)
|
|
||||||
- sreclaimable (integer)
|
|
||||||
- sunreclaim (integer)
|
|
||||||
- swap_cached (integer)
|
|
||||||
- swap_free (integer)
|
|
||||||
- swap_total (integer)
|
|
||||||
- vmalloc_chunk (integer)
|
|
||||||
- vmalloc_total (integer)
|
|
||||||
- vmalloc_used (integer)
|
|
||||||
- write_back (integer)
|
|
||||||
- write_back_tmp (integer)
|
|
||||||
|
|
||||||
### Example Output:
|
### Example Output:
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package mem
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"runtime"
|
||||||
|
|
||||||
"github.com/influxdata/telegraf"
|
"github.com/influxdata/telegraf"
|
||||||
"github.com/influxdata/telegraf/plugins/inputs"
|
"github.com/influxdata/telegraf/plugins/inputs"
|
||||||
|
|
@ -9,7 +10,8 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type MemStats struct {
|
type MemStats struct {
|
||||||
ps system.PS
|
ps system.PS
|
||||||
|
platform string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *MemStats) Description() string {
|
func (_ *MemStats) Description() string {
|
||||||
|
|
@ -18,6 +20,11 @@ func (_ *MemStats) Description() string {
|
||||||
|
|
||||||
func (_ *MemStats) SampleConfig() string { return "" }
|
func (_ *MemStats) SampleConfig() string { return "" }
|
||||||
|
|
||||||
|
func (m *MemStats) Init() error {
|
||||||
|
m.platform = runtime.GOOS
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *MemStats) Gather(acc telegraf.Accumulator) error {
|
func (s *MemStats) Gather(acc telegraf.Accumulator) error {
|
||||||
vm, err := s.ps.VMStat()
|
vm, err := s.ps.VMStat()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -28,39 +35,62 @@ func (s *MemStats) Gather(acc telegraf.Accumulator) error {
|
||||||
"total": vm.Total,
|
"total": vm.Total,
|
||||||
"available": vm.Available,
|
"available": vm.Available,
|
||||||
"used": vm.Used,
|
"used": vm.Used,
|
||||||
"free": vm.Free,
|
|
||||||
"cached": vm.Cached,
|
|
||||||
"buffered": vm.Buffers,
|
|
||||||
"active": vm.Active,
|
|
||||||
"inactive": vm.Inactive,
|
|
||||||
"wired": vm.Wired,
|
|
||||||
"slab": vm.Slab,
|
|
||||||
"used_percent": 100 * float64(vm.Used) / float64(vm.Total),
|
"used_percent": 100 * float64(vm.Used) / float64(vm.Total),
|
||||||
"available_percent": 100 * float64(vm.Available) / float64(vm.Total),
|
"available_percent": 100 * float64(vm.Available) / float64(vm.Total),
|
||||||
"commit_limit": vm.CommitLimit,
|
|
||||||
"committed_as": vm.CommittedAS,
|
|
||||||
"dirty": vm.Dirty,
|
|
||||||
"high_free": vm.HighFree,
|
|
||||||
"high_total": vm.HighTotal,
|
|
||||||
"huge_page_size": vm.HugePageSize,
|
|
||||||
"huge_pages_free": vm.HugePagesFree,
|
|
||||||
"huge_pages_total": vm.HugePagesTotal,
|
|
||||||
"low_free": vm.LowFree,
|
|
||||||
"low_total": vm.LowTotal,
|
|
||||||
"mapped": vm.Mapped,
|
|
||||||
"page_tables": vm.PageTables,
|
|
||||||
"shared": vm.Shared,
|
|
||||||
"sreclaimable": vm.SReclaimable,
|
|
||||||
"sunreclaim": vm.SUnreclaim,
|
|
||||||
"swap_cached": vm.SwapCached,
|
|
||||||
"swap_free": vm.SwapFree,
|
|
||||||
"swap_total": vm.SwapTotal,
|
|
||||||
"vmalloc_chunk": vm.VMallocChunk,
|
|
||||||
"vmalloc_total": vm.VMallocTotal,
|
|
||||||
"vmalloc_used": vm.VMallocUsed,
|
|
||||||
"write_back": vm.Writeback,
|
|
||||||
"write_back_tmp": vm.WritebackTmp,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch s.platform {
|
||||||
|
case "darwin":
|
||||||
|
fields["active"] = vm.Active
|
||||||
|
fields["free"] = vm.Free
|
||||||
|
fields["inactive"] = vm.Inactive
|
||||||
|
fields["wired"] = vm.Wired
|
||||||
|
case "openbsd":
|
||||||
|
fields["active"] = vm.Active
|
||||||
|
fields["cached"] = vm.Cached
|
||||||
|
fields["free"] = vm.Free
|
||||||
|
fields["inactive"] = vm.Inactive
|
||||||
|
fields["wired"] = vm.Wired
|
||||||
|
case "freebsd":
|
||||||
|
fields["active"] = vm.Active
|
||||||
|
fields["buffered"] = vm.Buffers
|
||||||
|
fields["cached"] = vm.Cached
|
||||||
|
fields["free"] = vm.Free
|
||||||
|
fields["inactive"] = vm.Inactive
|
||||||
|
fields["laundry"] = vm.Laundry
|
||||||
|
fields["wired"] = vm.Wired
|
||||||
|
case "linux":
|
||||||
|
fields["active"] = vm.Active
|
||||||
|
fields["buffered"] = vm.Buffers
|
||||||
|
fields["cached"] = vm.Cached
|
||||||
|
fields["commit_limit"] = vm.CommitLimit
|
||||||
|
fields["committed_as"] = vm.CommittedAS
|
||||||
|
fields["dirty"] = vm.Dirty
|
||||||
|
fields["free"] = vm.Free
|
||||||
|
fields["high_free"] = vm.HighFree
|
||||||
|
fields["high_total"] = vm.HighTotal
|
||||||
|
fields["huge_pages_free"] = vm.HugePagesFree
|
||||||
|
fields["huge_page_size"] = vm.HugePageSize
|
||||||
|
fields["huge_pages_total"] = vm.HugePagesTotal
|
||||||
|
fields["inactive"] = vm.Inactive
|
||||||
|
fields["low_free"] = vm.LowFree
|
||||||
|
fields["low_total"] = vm.LowTotal
|
||||||
|
fields["mapped"] = vm.Mapped
|
||||||
|
fields["page_tables"] = vm.PageTables
|
||||||
|
fields["shared"] = vm.Shared
|
||||||
|
fields["slab"] = vm.Slab
|
||||||
|
fields["sreclaimable"] = vm.SReclaimable
|
||||||
|
fields["sunreclaim"] = vm.SUnreclaim
|
||||||
|
fields["swap_cached"] = vm.SwapCached
|
||||||
|
fields["swap_free"] = vm.SwapFree
|
||||||
|
fields["swap_total"] = vm.SwapTotal
|
||||||
|
fields["vmalloc_chunk"] = vm.VMallocChunk
|
||||||
|
fields["vmalloc_total"] = vm.VMallocTotal
|
||||||
|
fields["vmalloc_used"] = vm.VMallocUsed
|
||||||
|
fields["write_back_tmp"] = vm.WritebackTmp
|
||||||
|
fields["write_back"] = vm.Writeback
|
||||||
|
}
|
||||||
|
|
||||||
acc.AddGauge("mem", fields, nil)
|
acc.AddGauge("mem", fields, nil)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,9 @@ package mem
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/influxdata/telegraf"
|
||||||
"github.com/influxdata/telegraf/plugins/inputs/system"
|
"github.com/influxdata/telegraf/plugins/inputs/system"
|
||||||
"github.com/influxdata/telegraf/testutil"
|
"github.com/influxdata/telegraf/testutil"
|
||||||
"github.com/shirou/gopsutil/mem"
|
"github.com/shirou/gopsutil/mem"
|
||||||
|
|
@ -53,48 +55,62 @@ func TestMemStats(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
mps.On("VMStat").Return(vms, nil)
|
mps.On("VMStat").Return(vms, nil)
|
||||||
|
plugin := &MemStats{ps: &mps}
|
||||||
|
|
||||||
err = (&MemStats{&mps}).Gather(&acc)
|
err = plugin.Init()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
memfields := map[string]interface{}{
|
plugin.platform = "linux"
|
||||||
"total": uint64(12400),
|
|
||||||
"available": uint64(7600),
|
|
||||||
"used": uint64(5000),
|
|
||||||
"available_percent": float64(7600) / float64(12400) * 100,
|
|
||||||
"used_percent": float64(5000) / float64(12400) * 100,
|
|
||||||
"free": uint64(1235),
|
|
||||||
"cached": uint64(0),
|
|
||||||
"buffered": uint64(0),
|
|
||||||
"active": uint64(8134),
|
|
||||||
"inactive": uint64(1124),
|
|
||||||
"wired": uint64(134),
|
|
||||||
"slab": uint64(1234),
|
|
||||||
"commit_limit": uint64(1),
|
|
||||||
"committed_as": uint64(118680),
|
|
||||||
"dirty": uint64(4),
|
|
||||||
"high_free": uint64(0),
|
|
||||||
"high_total": uint64(0),
|
|
||||||
"huge_page_size": uint64(4096),
|
|
||||||
"huge_pages_free": uint64(0),
|
|
||||||
"huge_pages_total": uint64(0),
|
|
||||||
"low_free": uint64(69936),
|
|
||||||
"low_total": uint64(255908),
|
|
||||||
"mapped": uint64(42236),
|
|
||||||
"page_tables": uint64(1236),
|
|
||||||
"shared": uint64(0),
|
|
||||||
"sreclaimable": uint64(1923022848),
|
|
||||||
"sunreclaim": uint64(157728768),
|
|
||||||
"swap_cached": uint64(0),
|
|
||||||
"swap_free": uint64(524280),
|
|
||||||
"swap_total": uint64(524280),
|
|
||||||
"vmalloc_chunk": uint64(3872908),
|
|
||||||
"vmalloc_total": uint64(3874808),
|
|
||||||
"vmalloc_used": uint64(1416),
|
|
||||||
"write_back": uint64(0),
|
|
||||||
"write_back_tmp": uint64(0),
|
|
||||||
}
|
|
||||||
acc.AssertContainsTaggedFields(t, "mem", memfields, make(map[string]string))
|
|
||||||
|
|
||||||
acc.Metrics = nil
|
require.NoError(t, err)
|
||||||
|
err = plugin.Gather(&acc)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
expected := []telegraf.Metric{
|
||||||
|
testutil.MustMetric(
|
||||||
|
"mem",
|
||||||
|
map[string]string{},
|
||||||
|
map[string]interface{}{
|
||||||
|
"total": uint64(12400),
|
||||||
|
"available": uint64(7600),
|
||||||
|
"used": uint64(5000),
|
||||||
|
"available_percent": float64(7600) / float64(12400) * 100,
|
||||||
|
"used_percent": float64(5000) / float64(12400) * 100,
|
||||||
|
"free": uint64(1235),
|
||||||
|
"cached": uint64(0),
|
||||||
|
"buffered": uint64(0),
|
||||||
|
"active": uint64(8134),
|
||||||
|
"inactive": uint64(1124),
|
||||||
|
// "wired": uint64(134),
|
||||||
|
"slab": uint64(1234),
|
||||||
|
"commit_limit": uint64(1),
|
||||||
|
"committed_as": uint64(118680),
|
||||||
|
"dirty": uint64(4),
|
||||||
|
"high_free": uint64(0),
|
||||||
|
"high_total": uint64(0),
|
||||||
|
"huge_page_size": uint64(4096),
|
||||||
|
"huge_pages_free": uint64(0),
|
||||||
|
"huge_pages_total": uint64(0),
|
||||||
|
"low_free": uint64(69936),
|
||||||
|
"low_total": uint64(255908),
|
||||||
|
"mapped": uint64(42236),
|
||||||
|
"page_tables": uint64(1236),
|
||||||
|
"shared": uint64(0),
|
||||||
|
"sreclaimable": uint64(1923022848),
|
||||||
|
"sunreclaim": uint64(157728768),
|
||||||
|
"swap_cached": uint64(0),
|
||||||
|
"swap_free": uint64(524280),
|
||||||
|
"swap_total": uint64(524280),
|
||||||
|
"vmalloc_chunk": uint64(3872908),
|
||||||
|
"vmalloc_total": uint64(3874808),
|
||||||
|
"vmalloc_used": uint64(1416),
|
||||||
|
"write_back": uint64(0),
|
||||||
|
"write_back_tmp": uint64(0),
|
||||||
|
},
|
||||||
|
time.Unix(0, 0),
|
||||||
|
telegraf.Gauge,
|
||||||
|
),
|
||||||
|
}
|
||||||
|
|
||||||
|
testutil.RequireMetricsEqual(t, expected, acc.GetTelegrafMetrics(), testutil.IgnoreTime())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue