fix(metrics): add cross-platform process metrics collector for non-Linux systems

The standard Prometheus ProcessCollector uses procfs (Linux-only /proc),
so process_resident_memory_bytes and process_virtual_memory_bytes were
silently absent on FreeBSD, Darwin, and other non-Linux platforms.

- Switch to a custom prometheus.Registry to isolate GOST metrics from
  the default registry auto-registrations
- Add gopsutil/v3-based process collector (process_other.go) for
  platforms without procfs (!linux && !windows)
- Keep standard ProcessCollector (process_standard.go) on Linux/Windows
- Update metrics service and handler/metrics to serve from
  promhttp.HandlerFor(customRegistry) instead of promhttp.Handler()
- Add Registry() accessor for the custom registry

Fixes go-gost/gost#509
This commit is contained in:
ginuerzh
2026-06-21 21:55:27 +08:00
parent 3ec3362ac4
commit 55a246869e
8 changed files with 218 additions and 9 deletions
+14
View File
@@ -0,0 +1,14 @@
//go:build linux || windows
package metrics
import (
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/collectors"
)
// registerProcessCollector registers the standard prometheus ProcessCollector
// which uses procfs on Linux and Win32 syscalls on Windows.
func registerProcessCollector(reg *prometheus.Registry) {
reg.MustRegister(collectors.NewProcessCollector(collectors.ProcessCollectorOpts{}))
}