Skip to content

Commit

Permalink
collector/zfs: consistent metric names
Browse files Browse the repository at this point in the history
Make metric names between `freebsd` and `linux` consistent. This is
gated behind the `ConsistentZFSLinuxMetricNames` gate, and disabled
by default.

Fixes: #1945
Signed-off-by: Pranshu Srivastava <[email protected]>
  • Loading branch information
rexagod committed May 24, 2024
1 parent 679c906 commit f22b4e3
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 34 deletions.
13 changes: 12 additions & 1 deletion collector/zfs.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,21 @@ package collector

import (
"errors"
"github.com/prometheus/node_exporter/featuregate"
"strings"

"github.com/go-kit/log"
"github.com/go-kit/log/level"
"github.com/prometheus/client_golang/prometheus"
)

var errZFSNotAvailable = errors.New("ZFS / ZFS statistics are not available")
var (
errZFSNotAvailable = errors.New("ZFS / ZFS statistics are not available")
consistentZFSLinuxMetricNames = featuregate.NewFeatureGate(
"ConsistentZFSLinuxMetricNames",
"Use consistent metric names for ZFS metrics on Linux (similar to the ones from FreeBSD)",
"v1.8.1", "v1.9.0")
)

type zfsSysctl string

Expand Down Expand Up @@ -91,6 +98,10 @@ func (c *zfsCollector) Update(ch chan<- prometheus.Metric) error {
}

func (s zfsSysctl) metricName() string {
if isEnabled, _ := consistentZFSLinuxMetricNames.IsEnabled(); isEnabled {
mib := string(s)
return bsdsysctl[mib]
}
parts := strings.Split(string(s), ".")
return strings.Replace(parts[len(parts)-1], "-", "_", -1)
}
Expand Down
38 changes: 38 additions & 0 deletions collector/zfs_common.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package collector

var (
bsdsysctl = map[string]string{
"kstat.zfs.misc.abdstats.linear_cnt": "abdstats_linear_count_total",
"kstat.zfs.misc.abdstats.linear_data_size": "abdstats_linear_data_bytes",
"kstat.zfs.misc.abdstats.scatter_chunk_waste": "abdstats_scatter_chunk_waste_bytes",
"kstat.zfs.misc.abdstats.scatter_cnt": "abdstats_scatter_count_total",
"kstat.zfs.misc.abdstats.scatter_data_size": "abdstats_scatter_data_bytes",
"kstat.zfs.misc.abdstats.struct_size": "abdstats_struct_bytes",
"kstat.zfs.misc.arcstats.anon_size": "arcstats_anon_bytes",
"kstat.zfs.misc.arcstats.c": "arcstats_c_bytes",
"kstat.zfs.misc.arcstats.c_max": "arcstats_c_max_bytes",
"kstat.zfs.misc.arcstats.c_min": "arcstats_c_min_bytes",
"kstat.zfs.misc.arcstats.data_size": "arcstats_data_bytes",
"kstat.zfs.misc.arcstats.demand_data_hits": "arcstats_demand_data_hits_total",
"kstat.zfs.misc.arcstats.demand_data_misses": "arcstats_demand_data_misses_total",
"kstat.zfs.misc.arcstats.demand_metadata_hits": "arcstats_demand_metadata_hits_total",
"kstat.zfs.misc.arcstats.demand_metadata_misses": "arcstats_demand_metadata_misses_total",
"kstat.zfs.misc.arcstats.hdr_size": "arcstats_hdr_bytes",
"kstat.zfs.misc.arcstats.hits": "arcstats_hits_total",
"kstat.zfs.misc.arcstats.misses": "arcstats_misses_total",
"kstat.zfs.misc.arcstats.mfu_ghost_hits": "arcstats_mfu_ghost_hits_total",
"kstat.zfs.misc.arcstats.mfu_ghost_size": "arcstats_mfu_ghost_size",
"kstat.zfs.misc.arcstats.mfu_size": "arcstats_mfu_bytes",
"kstat.zfs.misc.arcstats.mru_ghost_hits": "arcstats_mru_ghost_hits_total",
"kstat.zfs.misc.arcstats.mru_ghost_size": "arcstats_mru_ghost_bytes",
"kstat.zfs.misc.arcstats.mru_size": "arcstats_mru_bytes",
"kstat.zfs.misc.arcstats.other_size": "arcstats_other_bytes",
"kstat.zfs.misc.arcstats.p": "arcstats_p_bytes",
"kstat.zfs.misc.arcstats.meta": "arcstats_meta_bytes",
"kstat.zfs.misc.arcstats.pd": "arcstats_pd_bytes",
"kstat.zfs.misc.arcstats.pm": "arcstats_pm_bytes",
"kstat.zfs.misc.arcstats.size": "arcstats_size_bytes",
"kstat.zfs.misc.zfetchstats.hits": "zfetchstats_hits_total",
"kstat.zfs.misc.zfetchstats.misses": "zfetchstats_misses_total",
}
)
34 changes: 1 addition & 33 deletions collector/zfs_freebsd.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,225 +39,193 @@ func NewZfsCollector(logger log.Logger) (Collector, error) {
return &zfsCollector{
sysctls: []bsdSysctl{
{
name: "abdstats_linear_count_total",
description: "ZFS ARC buffer data linear count",
mib: "kstat.zfs.misc.abdstats.linear_cnt",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.CounterValue,
},
{
name: "abdstats_linear_data_bytes",
description: "ZFS ARC buffer data linear data size",
mib: "kstat.zfs.misc.abdstats.linear_data_size",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.GaugeValue,
},
{
name: "abdstats_scatter_chunk_waste_bytes",
description: "ZFS ARC buffer data scatter chunk waste",
mib: "kstat.zfs.misc.abdstats.scatter_chunk_waste",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.GaugeValue,
},
{
name: "abdstats_scatter_count_total",
description: "ZFS ARC buffer data scatter count",
mib: "kstat.zfs.misc.abdstats.scatter_cnt",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.CounterValue,
},
{
name: "abdstats_scatter_data_bytes",
description: "ZFS ARC buffer data scatter data size",
mib: "kstat.zfs.misc.abdstats.scatter_data_size",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.GaugeValue,
},
{
name: "abdstats_struct_bytes",
description: "ZFS ARC buffer data struct size",
mib: "kstat.zfs.misc.abdstats.struct_size",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.GaugeValue,
},
{
name: "arcstats_anon_bytes",
description: "ZFS ARC anon size",
mib: "kstat.zfs.misc.arcstats.anon_size",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.GaugeValue,
},
{
name: "arcstats_c_bytes",
description: "ZFS ARC target size",
mib: "kstat.zfs.misc.arcstats.c",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.GaugeValue,
},
{
name: "arcstats_c_max_bytes",
description: "ZFS ARC maximum size",
mib: "kstat.zfs.misc.arcstats.c_max",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.GaugeValue,
},
{
name: "arcstats_c_min_bytes",
description: "ZFS ARC minimum size",
mib: "kstat.zfs.misc.arcstats.c_min",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.GaugeValue,
},
{
name: "arcstats_data_bytes",
description: "ZFS ARC data size",
mib: "kstat.zfs.misc.arcstats.data_size",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.GaugeValue,
},
{
name: "arcstats_demand_data_hits_total",
description: "ZFS ARC demand data hits",
mib: "kstat.zfs.misc.arcstats.demand_data_hits",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.CounterValue,
},
{
name: "arcstats_demand_data_misses_total",
description: "ZFS ARC demand data misses",
mib: "kstat.zfs.misc.arcstats.demand_data_misses",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.CounterValue,
},
{
name: "arcstats_demand_metadata_hits_total",
description: "ZFS ARC demand metadata hits",
mib: "kstat.zfs.misc.arcstats.demand_metadata_hits",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.CounterValue,
},
{
name: "arcstats_demand_metadata_misses_total",
description: "ZFS ARC demand metadata misses",
mib: "kstat.zfs.misc.arcstats.demand_metadata_misses",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.CounterValue,
},
{
name: "arcstats_hdr_bytes",
description: "ZFS ARC header size",
mib: "kstat.zfs.misc.arcstats.hdr_size",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.GaugeValue,
},
{
name: "arcstats_hits_total",
description: "ZFS ARC hits",
mib: "kstat.zfs.misc.arcstats.hits",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.CounterValue,
},
{
name: "arcstats_misses_total",
description: "ZFS ARC misses",
mib: "kstat.zfs.misc.arcstats.misses",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.CounterValue,
},
{
name: "arcstats_mfu_ghost_hits_total",
description: "ZFS ARC MFU ghost hits",
mib: "kstat.zfs.misc.arcstats.mfu_ghost_hits",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.CounterValue,
},
{
name: "arcstats_mfu_ghost_size",
description: "ZFS ARC MFU ghost size",
mib: "kstat.zfs.misc.arcstats.mfu_ghost_size",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.GaugeValue,
},
{
name: "arcstats_mfu_bytes",
description: "ZFS ARC MFU size",
mib: "kstat.zfs.misc.arcstats.mfu_size",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.GaugeValue,
},
{
name: "arcstats_mru_ghost_hits_total",
description: "ZFS ARC MRU ghost hits",
mib: "kstat.zfs.misc.arcstats.mru_ghost_hits",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.CounterValue,
},
{
name: "arcstats_mru_ghost_bytes",
description: "ZFS ARC MRU ghost size",
mib: "kstat.zfs.misc.arcstats.mru_ghost_size",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.GaugeValue,
},
{
name: "arcstats_mru_bytes",
description: "ZFS ARC MRU size",
mib: "kstat.zfs.misc.arcstats.mru_size",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.GaugeValue,
},
{
name: "arcstats_other_bytes",
description: "ZFS ARC other size",
mib: "kstat.zfs.misc.arcstats.other_size",
dataType: bsdSysctlTypeUint64,
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",
description: "ZFS ARC size",
mib: "kstat.zfs.misc.arcstats.size",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.GaugeValue,
},
{
name: "zfetchstats_hits_total",
description: "ZFS cache fetch hits",
mib: "kstat.zfs.misc.zfetchstats.hits",
dataType: bsdSysctlTypeUint64,
valueType: prometheus.CounterValue,
},
{
name: "zfetchstats_misses_total",
description: "ZFS cache fetch misses",
mib: "kstat.zfs.misc.zfetchstats.misses",
dataType: bsdSysctlTypeUint64,
Expand All @@ -279,7 +247,7 @@ func (c *zfsCollector) Update(ch chan<- prometheus.Metric) error {

ch <- prometheus.MustNewConstMetric(
prometheus.NewDesc(
prometheus.BuildFQName(namespace, zfsCollectorSubsystem, m.name),
prometheus.BuildFQName(namespace, zfsCollectorSubsystem, bsdsysctl[m.mib]),
m.description,
nil, nil,
), m.valueType, v)
Expand Down

0 comments on commit f22b4e3

Please sign in to comment.