Hello,
I need your advice on something I just found.
The short version is I started migrating from node_exporter to Telegraf
and found discrepancy between how Telegraf reports memory usage compared
to node_exporter.
I have come with this Telegraf patch:
```
Index: plugins/inputs/mem/mem.go
--- plugins/inputs/mem/mem.go.orig
+++ plugins/inputs/mem/mem.go
@@ -50,7 +50,7 @@ func (ms *Mem) Gather(acc telegraf.Accumulator) error
fields["wired"] = vm.Wired
case "openbsd":
fields["active"] = vm.Active
- fields["cached"] = vm.Cached
+ fields["cached"] = vm.Buffers
fields["free"] = vm.Free
fields["inactive"] = vm.Inactive
fields["wired"] = vm.Wired
```
It works.
The problem is that Telegraf reports cached = 0 because gopsutil sets
Cached = 0.
Here is the gopsutil part
https://github.com/shirou/gopsutil/blob/67304c33f246d9598551d61af85690d50b3e8606/mem/mem_openbsd.go#L41
```
ret := &VirtualMemoryStat{
Total: uint64(uvmexp.Npages) * p,
Free: uint64(uvmexp.Free) * p,
Active: uint64(uvmexp.Active) * p,
Inactive: uint64(uvmexp.Inactive) * p,
Cached: 0, // not available <-- explicitly hardcoded
Wired: uint64(uvmexp.Wired) * p,
}
```
The above patch uses `vm.Buffers` from gopsutil and this is what
node_exporter does.
I'm almost sure that you'll say that this should go upstream, right?
My question is where should I try to send the patch - to Telegraf or to
gopsutil? What would you suggest?
(a patch for the gopsutil would be something like adding:
```
ret.Cached = ret.Buffers <-- adds the Cached to be equal to Buffers
```
of course, if this is the path I'll see to check and test it more)
Thanks for you time and please add me in CC to the replies because I'm
not subscribed to the list.
Best wishes,
Atanas