Merge f527765193
into 02afa5c53c
commit
60ad580b95
|
@ -18,6 +18,7 @@
|
||||||
package collector
|
package collector
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
|
@ -61,3 +62,15 @@ func parseHostNameAndDomainName(utsname unix.Utsname) (hostname string, domainna
|
||||||
}
|
}
|
||||||
return hostname, domainname
|
return hostname, domainname
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getOSReleaseMajorMinor returns the Major.Minor version of the Operating System based on the uname's Release as a floating point number
|
||||||
|
// this is intended to assist in detecting OS compatibilty/support
|
||||||
|
func getOSReleaseMajorMinor() (float64, error) {
|
||||||
|
u, err := getUname()
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
majorMinor := versionRegex.FindString(u.Release)
|
||||||
|
f, err := strconv.ParseFloat(majorMinor, 64)
|
||||||
|
return f, err
|
||||||
|
}
|
||||||
|
|
|
@ -17,8 +17,9 @@
|
||||||
package collector
|
package collector
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
|
||||||
"log/slog"
|
"log/slog"
|
||||||
|
|
||||||
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
)
|
)
|
||||||
|
|
||||||
type zfsCollector struct {
|
type zfsCollector struct {
|
||||||
|
@ -31,7 +32,8 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewZFSCollector(logger *slog.Logger) (Collector, error) {
|
func NewZFSCollector(logger *slog.Logger) (Collector, error) {
|
||||||
return &zfsCollector{
|
c := &zfsCollector{
|
||||||
|
// Common ZFS sysctl metrics
|
||||||
sysctls: []bsdSysctl{
|
sysctls: []bsdSysctl{
|
||||||
{
|
{
|
||||||
name: "abdstats_linear_count_total",
|
name: "abdstats_linear_count_total",
|
||||||
|
@ -208,35 +210,6 @@ func NewZFSCollector(logger *slog.Logger) (Collector, error) {
|
||||||
dataType: bsdSysctlTypeUint64,
|
dataType: bsdSysctlTypeUint64,
|
||||||
valueType: prometheus.GaugeValue,
|
valueType: prometheus.GaugeValue,
|
||||||
},
|
},
|
||||||
// when FreeBSD 14.0+, `meta/pm/pd` install of `p`.
|
|
||||||
{
|
|
||||||
name: "arcstats_p_bytes",
|
|
||||||
description: "ZFS ARC MRU target size",
|
|
||||||
mib: "kstat.zfs.misc.arcstats.p",
|
|
||||||
dataType: bsdSysctlTypeUint64,
|
|
||||||
valueType: prometheus.GaugeValue,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "arcstats_meta_bytes",
|
|
||||||
description: "ZFS ARC metadata target frac ",
|
|
||||||
mib: "kstat.zfs.misc.arcstats.meta",
|
|
||||||
dataType: bsdSysctlTypeUint64,
|
|
||||||
valueType: prometheus.GaugeValue,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "arcstats_pd_bytes",
|
|
||||||
description: "ZFS ARC data MRU target frac",
|
|
||||||
mib: "kstat.zfs.misc.arcstats.pd",
|
|
||||||
dataType: bsdSysctlTypeUint64,
|
|
||||||
valueType: prometheus.GaugeValue,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "arcstats_pm_bytes",
|
|
||||||
description: "ZFS ARC meta MRU target frac",
|
|
||||||
mib: "kstat.zfs.misc.arcstats.pm",
|
|
||||||
dataType: bsdSysctlTypeUint64,
|
|
||||||
valueType: prometheus.GaugeValue,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: "arcstats_size_bytes",
|
name: "arcstats_size_bytes",
|
||||||
description: "ZFS ARC size",
|
description: "ZFS ARC size",
|
||||||
|
@ -260,7 +233,50 @@ func NewZFSCollector(logger *slog.Logger) (Collector, error) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
logger: logger,
|
logger: logger,
|
||||||
}, nil
|
}
|
||||||
|
|
||||||
|
v, err := getOSReleaseMajorMinor()
|
||||||
|
if err != nil {
|
||||||
|
c.logger.Warn("unable to determine OS release, zfs arcstats metrics may be missing or unsupported", "error", err)
|
||||||
|
return c, nil
|
||||||
|
}
|
||||||
|
// when FreeBSD 14.0+, use `meta/pm/pd` instead of `p`.
|
||||||
|
if v >= 14.0 {
|
||||||
|
c.sysctls = append(c.sysctls,
|
||||||
|
bsdSysctl{
|
||||||
|
name: "arcstats_meta_bytes",
|
||||||
|
description: "ZFS ARC metadata target frac ",
|
||||||
|
mib: "kstat.zfs.misc.arcstats.meta",
|
||||||
|
dataType: bsdSysctlTypeUint64,
|
||||||
|
valueType: prometheus.GaugeValue,
|
||||||
|
},
|
||||||
|
bsdSysctl{
|
||||||
|
name: "arcstats_pd_bytes",
|
||||||
|
description: "ZFS ARC data MRU target frac",
|
||||||
|
mib: "kstat.zfs.misc.arcstats.pd",
|
||||||
|
dataType: bsdSysctlTypeUint64,
|
||||||
|
valueType: prometheus.GaugeValue,
|
||||||
|
},
|
||||||
|
bsdSysctl{
|
||||||
|
name: "arcstats_pm_bytes",
|
||||||
|
description: "ZFS ARC meta MRU target frac",
|
||||||
|
mib: "kstat.zfs.misc.arcstats.pm",
|
||||||
|
dataType: bsdSysctlTypeUint64,
|
||||||
|
valueType: prometheus.GaugeValue,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
c.sysctls = append(c.sysctls,
|
||||||
|
bsdSysctl{
|
||||||
|
name: "arcstats_p_bytes",
|
||||||
|
description: "ZFS ARC MRU target size",
|
||||||
|
mib: "kstat.zfs.misc.arcstats.p",
|
||||||
|
dataType: bsdSysctlTypeUint64,
|
||||||
|
valueType: prometheus.GaugeValue,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return c, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *zfsCollector) Update(ch chan<- prometheus.Metric) error {
|
func (c *zfsCollector) Update(ch chan<- prometheus.Metric) error {
|
||||||
|
|
Loading…
Reference in New Issue