Skip to content

Metrics Reference

All series use the powerscale_ prefix — matching dell/csm-metrics-powerscale — and are gauges. Metric names are unit-explicit: _bytes, _bytes_per_second, _operations_per_second, _microseconds, _percent, _seconds.

Per-second gauges — do not rate()

_operations_per_second and _bytes_per_second metrics are already per-second gauges sampled from OneFS. Aggregate them with sum/avg in PromQL — never rate() or irate(). The inventory counts (NFS exports, SMB shares, snapshots, drives, power supplies) are also gauges (current counts), not cumulative counters; they carry no _total suffix, which Prometheus reserves for counters.

Labels

Every metric carries the canonical leading labels cluster and cluster_id, with scope-specific labels appended:

Scope Labels
Cluster cluster, cluster_id
Node cluster, cluster_id, node (logical node number / LNN)
Quota cluster, cluster_id, quota_id, quota_path, quota_type
Protocol cluster, cluster_id, node, protocol (e.g. nfs3, smb2), op
Health / meta cluster only

Cluster metrics

Metric Unit Description
powerscale_cluster_cpu_sys_percent percent System CPU usage.
powerscale_cluster_cpu_user_percent percent User CPU usage.
powerscale_cluster_cpu_idle_percent percent Idle CPU.
powerscale_cluster_total_capacity_bytes bytes Total /ifs filesystem capacity.
powerscale_cluster_used_capacity_bytes bytes Used capacity.
powerscale_cluster_available_capacity_bytes bytes Available (user-writable) capacity.
powerscale_cluster_free_capacity_bytes bytes Raw free capacity.
powerscale_cluster_disk_operations_per_second ops/s Cluster-wide disk transfer rate.
powerscale_cluster_net_in_bytes_per_second bytes/s External inbound network throughput.
powerscale_cluster_net_out_bytes_per_second bytes/s External outbound network throughput.

Node metrics

Per-node series; the node label is the logical node number (LNN).

Metric Unit Description
powerscale_node_cpu_idle_percent percent Per-node idle CPU.
powerscale_node_cpu_sys_percent percent Per-node system CPU.
powerscale_node_cpu_user_percent percent Per-node user CPU.
powerscale_node_memory_used_bytes bytes Per-node memory used.
powerscale_node_disk_operations_per_second ops/s Per-node disk transfer rate.
powerscale_node_used_capacity_bytes bytes Per-node used /ifs capacity.

Cache

Per-node read-cache metrics for the L1/L2/L3 data-read path. Keys are node-scoped under the OneFS node.ifs.cache.* namespace, confirmed against a live cluster via isi statistics list keys (equivalently GET /platform/1/statistics/keys). Note that statistics/current is all-or-nothing: a single invalid key fails the entire batch and drops all current-statistics metrics — so any new key here must be validated against a live cluster first. Compute hit ratio in PromQL as hit / (hit + miss).

Unit semantics are confirmed against a live cluster via --trace: OneFS reports these as per-second rates in bytes/second (fractional byte counts averaged over its sample window), so aggregate with sum/avg — never rate().

Metric Unit
powerscale_node_cache_l1_read_hit_bytes_per_second / ..._miss_... bytes/s
powerscale_node_cache_l2_read_hit_bytes_per_second / ..._miss_... bytes/s
powerscale_node_cache_l3_read_hit_bytes_per_second / ..._miss_... bytes/s

Node health

Metric Unit Description
powerscale_node_readonly bool 1 if the node is mounted read-only.
powerscale_node_smartfail bool 1 if the node is smartfailing / smartfailed.
powerscale_node_drives count Drive count per node, labelled by state (e.g. HEALTHY, SMARTFAIL, DEAD).

Hardware (provisional)

Per-node power-supply health and temperature/fan sensors, from the node status / sensors payload. Best-effort; schema is provisional — emits nothing if your OneFS release shapes these differently. Temperature/fan series carry a sensor label.

Metric Unit Description
powerscale_node_power_supplies count Power supplies present on the node.
powerscale_node_power_supply_failures count Failed power supplies on the node.
powerscale_node_temperature_celsius °C Temperature sensor reading.
powerscale_node_fan_speed_rpm rpm Fan speed reading.
powerscale_node_hardware_info — Always 1; the node's hardware identity is in the product, series and hwgen labels.

Virtual clusters have no hardware metrics

The four sensor metrics above are absent on a virtual cluster — a hypervisor exposes no physical fans, temperature probes or power supplies, so OneFS returns powersupplies.count: 0 and empty sensor groups. This is the expected result, not a broken exporter.

powerscale_node_hardware_info is how you tell. A node counts as virtual on either marker — series="virtual_series" or a hwgen naming the hypervisor (VMware) — since OneFS does not guarantee both; the simulator reports both, and additionally a product starting with SIMULATOR-. The exporter also logs the reason once per cluster at startup:

cluster "pscale-cluster1": 4/4 nodes report virtual hardware (series=virtual_series,
hwgen=VMware, product=SIMULATOR-1U-Dual-6144MB-1x1GE-100GB) and expose no physical
sensors, so powerscale_node_temperature_celsius, powerscale_node_fan_speed_rpm,
powerscale_node_power_supplies and powerscale_node_power_supply_failures are
absent for those nodes

To count virtual nodes in PromQL:

count(
  powerscale_node_hardware_info{series="virtual_series"}
  or powerscale_node_hardware_info{hwgen=~"(?i).*vmware.*"}
) by (cluster)

If only some nodes go quiet on a physical cluster, the same log line names them and does not call them virtual — that case is worth investigating as a real sensor fault.

Quota metrics

Metric Unit Description
powerscale_quota_usage_bytes bytes Logical usage for the quota.
powerscale_quota_application_usage_bytes bytes Application logical usage (usage.applogical), the size as users see it. Always emitted; 0 when the API version lacks the field.
powerscale_quota_physical_usage_bytes bytes Physical usage (post data-reduction). Emitted when > 0.
powerscale_quota_reduction_ratio ratio Logical ÷ physical space (compression + dedupe). OneFS 9.15+ only (quota API v25); emitted when non-null. Not yet validated on a live cluster.
powerscale_quota_hard_threshold_bytes bytes Hard limit. Emitted only when set (> 0).
powerscale_quota_soft_threshold_bytes bytes Soft limit. Emitted only when set (> 0).
powerscale_quota_advisory_threshold_bytes bytes Advisory limit. Emitted only when set (> 0).

Protocol metrics

Per-node, per-protocol, per-operation, from the OneFS protocol summary.

Metric Unit Description
powerscale_protocol_operations_per_second ops/s Operation rate for protocol/op.
powerscale_protocol_latency_microseconds µs Average latency for protocol/op.
powerscale_protocol_latency_stage_microseconds µs Average latency per processing stage (auth, export, fha_blocking, fiber_block_quota, kernel = QoS blocking, spark_dispatch, total_elapsed). OneFS 9.15+ only (protocol API v26); stages the cluster omits are not emitted. Not yet validated on a live cluster.

Inventory counts

Metric Unit Description
powerscale_nfs_exports count Number of NFS exports.
powerscale_smb_shares count Number of SMB shares.
powerscale_snapshots count Number of snapshots.

Data protection

All best-effort: a cluster without SyncIQ (or where the account lacks privilege) simply emits no series.

Metric Unit Description Labels
powerscale_snapshot_used_bytes bytes Aggregate space held by snapshots. cluster, cluster_id
powerscale_synciq_policy_enabled bool 1 if the SyncIQ replication policy is enabled. + policy
powerscale_synciq_last_run_failed bool 1 if the policy's last run failed / needs attention. + policy
powerscale_active_events count Unresolved OneFS event-group occurrences. + severity

Storage efficiency

Cluster-wide deduplication, from dedupe/dedupe-summary. Best-effort; bytes are derived as block counts × block size (validated against the OneFS 9.14.0 schema).

Metric Unit Description
powerscale_dedupe_logical_saved_bytes bytes Logical space saved by deduplication.
powerscale_dedupe_deduplicated_bytes bytes Logical data that has been deduplicated.

Licenses

Per-feature OneFS license state, fetched best-effort from license/licenses (requires ISI_PRIV_LICENSE; absent if the account lacks it). The OneFS expiration date is parsed to an absolute Unix timestamp; perpetual/unlicensed features carry no expiration and report 0.

Metric Labels Description
powerscale_license_expiration_timestamp_seconds name Unix timestamp when the feature's license expires; 0 for perpetual/unlicensed features.
powerscale_license_active name, status 1 when the feature is licensed and usable (OneFS status Licensed / Activated / Evaluation), else 0. The raw OneFS status is carried as a label.

Alert on a feature expiring within 30 days (perpetual features report 0 and are excluded by the > 0 guard):

powerscale_license_expiration_timestamp_seconds > 0
  and (powerscale_license_expiration_timestamp_seconds - time()) < 30 * 86400

Storage pools

Per-pool and per-tier capacity from SmartPools, fetched best-effort from storagepool/storagepools (requires ISI_PRIV_SMARTPOOLS; absent if the account lacks it). Labels: pool (pool/tier name) and type (nodepool or tier).

The list contains both node pools and tiers, and a tier's capacity is the sum of its child node pools — so summing a metric across all rows double-counts. Filter type="nodepool" for a non-overlapping cluster-wide total. Every metric is emitted for every pool; an all-HDD pool simply reports ssd=0.

Metric Description
powerscale_storagepool_total_capacity_bytes Total capacity of the pool/tier.
powerscale_storagepool_used_capacity_bytes Used capacity.
powerscale_storagepool_available_capacity_bytes Available (user-writable) capacity.
powerscale_storagepool_ssd_total_capacity_bytes SSD-media total capacity.
powerscale_storagepool_ssd_used_capacity_bytes SSD-media used capacity.
powerscale_storagepool_ssd_available_capacity_bytes SSD-media available capacity.
powerscale_storagepool_hdd_total_capacity_bytes HDD-media total capacity.
powerscale_storagepool_hdd_used_capacity_bytes HDD-media used capacity.
powerscale_storagepool_hdd_available_capacity_bytes HDD-media available capacity.

Alert on a node pool over 85% full:

100 * powerscale_storagepool_used_capacity_bytes
  / powerscale_storagepool_total_capacity_bytes > 85

Per-drive

From statistics/summary/drive. Best-effort. Labels: cluster, cluster_id, node, bay, type (e.g. SSD, HDD).

Metric Unit Description
powerscale_drive_operations_per_second ops/s Per-drive operation rate.
powerscale_drive_busy_percent percent Per-drive busy time.

Per-client

From statistics/summary/client, aggregated by node / protocol / class to bound cardinality (individual remote clients are intentionally not exported). Best-effort.

Metric Unit Description
powerscale_client_operations_per_second ops/s Operation rate per node/protocol/class.
powerscale_client_in_bytes_per_second bytes/s Inbound throughput.
powerscale_client_out_bytes_per_second bytes/s Outbound throughput.

Workloads

Per-workload performance, from statistics/summary/workload. Best-effort and covered by ISI_PRIV_STATISTICS (already required for the other statistics).

Requires a configured performance dataset

Workload rows are produced by OneFS performance datasets (isi performance datasets). Without a configured dataset this endpoint returns few or only aggregate rows, so these metrics may be empty until you define one. The dataset's pinned dimensions also determine which labels are populated — an unpinned dimension is the empty string.

Labels: cluster, cluster_id, node (0 = cluster-scoped), zone, protocol, username, system_name, job_type. The high-cardinality dimensions OneFS also reports (path, client IP addresses, SIDs) are intentionally not exported; control cardinality through your dataset definition. A dataset pinned only on an excluded dimension (e.g. path alone) will have all its rows collapse to a single label tuple, so some rows are silently dropped — pin datasets on at least one exported dimension.

Metric Unit Description
powerscale_workload_operations_per_second ops/s Operation rate for the workload.
powerscale_workload_in_bytes_per_second bytes/s Inbound throughput.
powerscale_workload_out_bytes_per_second bytes/s Outbound throughput.
powerscale_workload_cpu_microseconds_per_second µs/s CPU time consumed per second across all cores (a per-second gauge — sum/avg, never rate()).

Top 5 workloads by operation rate, per cluster:

topk(5, sum by (cluster, zone, username, protocol) (powerscale_workload_operations_per_second))

Per-workload disk/cache detail (reads, writes, l2, l3) and latency are planned follow-ups — latency is held back until a live workload body confirms its unit.

Health & metadata

These carry only the cluster label.

Metric Unit Description
powerscale_up bool 1 if the cluster was scraped successfully, 0 otherwise.
powerscale_last_scrape_timestamp_seconds unix seconds Time of the last successful collection.
powerscale_cluster_api_version version Detected OneFS platform API version.

Exporter metadata

Exporter-level, not tied to any cluster (no cluster label).

Metric Unit Description
pscale_exporter_build_info constant 1 Exporter build information; the running version and Go version are carried in the version and goversion labels.

Example queries

# Cluster capacity used %, per cluster
100 * powerscale_cluster_used_capacity_bytes
  / powerscale_cluster_total_capacity_bytes

# Total protocol ops per cluster (per-second gauge — sum, never rate)
sum by (cluster) (powerscale_protocol_operations_per_second)

# Top 5 quotas by usage
topk(5, powerscale_quota_usage_bytes)

# Clusters currently down
powerscale_up == 0

These same series back the bundled alert rules and the Grafana dashboard.

Extending coverage

To add a curated OneFS statistic, add a row to internal/powerscale/statisticsKeys.json with key, metric, and scope (cluster | node) — no code change is needed. Node-scope keys map a devid to a node LNN automatically. Keep names unit-explicit and prefixed with powerscale_.

Add the optional divisor when OneFS reports the key in a different unit than the metric name claims. Check this against a live cluster: the cpu.*.avg keys, for instance, are reported in tenths of a percent (idle + user + sys sums to 1000, not 100), so their rows carry "divisor": 10. Omitting it passes the raw value through.