Storage Adapters
Telegen’s storage adapters collect metrics from enterprise storage arrays via vendor APIs.
Overview
Storage adapters support:
Vendor |
Products |
API |
|---|---|---|
Dell |
PowerStore, PowerScale |
REST API |
HPE |
Primera, 3PAR |
WSAPI |
Pure Storage |
FlashArray, FlashBlade |
REST API v2 |
NetApp |
ONTAP, E-Series |
ONTAP REST API |
Dell PowerStore
Configuration
collector:
storage:
dell:
enabled: true
poll_interval: 60s
targets:
- name: "powerstore-prod-01"
address: "https://powerstore.example.com"
username: "monitor"
password: "${DELL_PASSWORD}"
verify_ssl: true
metrics:
performance: true
capacity: true
alerts: true
hardware: true
Metrics Collected
Metric |
Description |
|---|---|
|
Read IOPS per volume |
|
Write IOPS per volume |
|
Read latency (microseconds) |
|
Write latency (microseconds) |
|
Volume total size |
|
Volume used space |
|
Total cluster capacity |
|
Used cluster capacity |
|
Data reduction ratio |
|
Hardware component health |
Labels
Label |
Description |
|---|---|
|
Array name |
|
Volume name |
|
Appliance ID |
|
Host attachment |
HPE Primera/3PAR
Configuration
collector:
storage:
hpe:
enabled: true
poll_interval: 60s
targets:
- name: "primera-prod"
address: "https://primera.example.com:8080"
username: "monitor"
password: "${HPE_PASSWORD}"
verify_ssl: true
metrics:
system: true
cpgs: true
volumes: true
hosts: true
ports: true
Metrics Collected
Metric |
Description |
|---|---|
|
Total system capacity |
|
Allocated capacity |
|
Free capacity |
|
Compaction ratio |
|
Volume size |
|
Volume used space |
|
CPG capacity |
|
Port bandwidth |
|
Node CPU usage |
|
Cache hit ratio |
Labels
Label |
Description |
|---|---|
|
Array name |
|
Volume name |
|
Common provisioning group |
|
Controller node |
|
FC/iSCSI port |
Pure Storage FlashArray
Configuration
collector:
storage:
pure:
enabled: true
poll_interval: 60s
targets:
- name: "pure-prod-01"
address: "https://purestorage.example.com"
api_token: "${PURE_API_TOKEN}"
metrics:
arrays: true
volumes: true
hosts: true
pods: true
replication: true
Generating API Token
# On Pure Storage array
pureuser@array01> pureapitoken create --user monitor
Metrics Collected
Metric |
Description |
|---|---|
|
Total array capacity |
|
Used capacity |
|
Data reduction ratio |
|
Volume provisioned size |
|
Volume used space |
|
Volume read IOPS |
|
Volume write IOPS |
|
Read latency |
|
Write latency |
|
Pod replication status |
|
Hardware health |
Labels
Label |
Description |
|---|---|
|
Array name |
|
Volume name |
|
Connected host |
|
Replication pod |
|
Drive bay |
NetApp ONTAP (Harvest-Parity Collector)
Telegen includes a Harvest-parity ONTAP collector that provides comprehensive observability for NetApp ONTAP storage arrays. This collector is a drop-in replacement for NetApp Harvest with full metric catalog coverage.
Collector Types
Collector |
Engine |
Description |
|---|---|---|
Rest |
ONTAP REST API |
65+ inventory/configuration objects (capacity, state, config) |
RestPerf |
Counter Tables API |
54+ performance counter tables with rate cooking |
KeyPerf |
Resource Endpoints |
Performance via |
EMS |
Event Management System |
EMS events → OTLP logs (86 message types) |
Auto-Selection Logic
Telegen automatically probes ONTAP capabilities and selects the appropriate collectors:
RESTPerf enabled when
api/cluster/counter/tablesresponds (ONTAP ~9.11.1+)RESTPerf disabled for ASA r2 (disaggregated), GCNV mode, or older clusters → KeyPerf takes over
Default collectors:
[rest, restperf, keyperf, ems]
ONTAP Object Coverage
Rest Catalog (65 Objects)
Category |
Objects |
|---|---|
Core |
Cluster, Node, SVM, Volume, Aggregate, LUN, Namespace, Qtree, Snapshot, Quota |
Network |
LIF, NetPort, NetRoute, EthernetSwitchPort, NetConnections, NIC |
Protocols |
CIFS Session/Share, NFS Clients, iSCSI, FCP, OntapS3, OntapS3Policy |
Data Protection |
SnapMirror, SnapMirrorPolicy, SnapshotPolicy |
Security |
Security, SecurityAccount, SecurityCert, SecurityLogin, SecuritySsh, SecurityAuditDestination |
Hardware |
Disk, Shelf, Sensor, FRU, License |
Management |
ExportRule, Lock, MAVRequest, Mediator, NtpServer, ClusterSchedule, ClusterSoftware |
v3 Opt-In |
AuditLog, CIFSSession, CIFSShare, ExportRule, NFSClients, NDMPSession, NetConnections |
RestPerf Catalog (54+ Objects)
Protocol |
Objects |
|---|---|
NFS |
NFSv3, NFSv4, NFSv4.1, NFSv4.2 (per-node and per-SVM), NFSv4Pool |
SMB/CIFS |
CIFSNode, CIFSvserver, SMB2 |
Block |
iSCSI, FCP, FCPPort, FCPLif, FCVI |
NVMe |
Namespace, NVMfLif, NVMfRdmaPort, NVMfTcpPort |
Object |
OntapS3SVM |
System |
SystemNode, HostAdapter, Disk, Path, NicCommon, Netstat |
WAFL |
WAFL, WAFLAggr, WAFLSizer, WAFLCompBin |
QoS |
Workload, WorkloadVolume |
Other |
TokenManager, CopyManager, FlexCachePerf, Vscan, VscanSVM, FPolicy, Netstat |
KeyPerf Catalog (14 Objects)
Volume, Aggregate, CIFSvserver, Cluster, EthernetSwitchPort, LUN, Namespace, NFSv3, NFSv4, NFSv4.1, SystemNode, Qtree (opt-in)
Configuration
telegen:
mode: collector # or unified
netapp_ontap:
- name: "ontap-prod-01"
address: "https://10.0.10.140"
username: "monitor"
password: "${NETAPP_PASSWORD}"
verify_ssl: true
timeout: 30s
coverage: full # full | harvest_default
collectors: [rest, restperf, keyperf, ems]
templates_dir: "" # empty = configs/netapp
ems:
enabled: true
resolve_after: 672h
labels:
environment: "production"
# NetApp E-Series (SANtricity)
netapp_eseries:
- name: "eseries-prod-01"
address: "https://10.0.10.150"
username: "monitor"
password: "${NETAPP_ESERIES_PASSWORD}"
verify_ssl: true
timeout: 30s
labels:
environment: "production"
Required Permissions
Create a read-only monitoring role:
# On ONTAP cluster
security login role create -role monitor -cmddirname "volume show" -access readonly
security login role create -role monitor -cmddirname "aggregate show" -access readonly
security login role create -role monitor -cmddirname "lun show" -access readonly
security login role create -role monitor -cmddirname "statistics" -access readonly
security login create -user-or-group-name monitor -role monitor -application http -authmethod password
Performance Metrics (Exhaustive)
Cluster
Metric |
Description |
|---|---|
|
IOPS |
|
Throughput |
|
Latency |
|
Available space |
Volume
Metric |
Description |
|---|---|
|
Capacity |
|
IOPS |
|
Throughput |
|
Latency |
|
NFS ops, dedupe savings |
Node
Metric |
Description |
|---|---|
|
CPU |
|
IOPS |
|
Network |
|
Disk |
LUN / Namespace
Metric |
Description |
|---|---|
|
Capacity |
|
IOPS |
|
Throughput |
|
NVMe namespace metrics |
Plugin System
Telegen includes a plugin system for computed metrics:
Plugin |
Description |
|---|---|
MetricAgent |
|
LabelAgent |
Convert label strings to numeric metrics |
Volume |
Marks |
Aggregator |
Rolls up metrics by label (e.g., node-level summaries) |
Health |
Ensures synthetic |
Sensor |
Hardware sensor metrics (temperature, fan, power) |
Shelf |
Shelf hardware inventory |
Nic |
NIC utilization |
Fcp |
FCP utilization |
FabricPool |
Cloud tier metrics |
VolumeTopClients |
Top clients/files/users |
VolumeAnalytics |
Activity analytics |
QoS |
Workload throughput bounds |
EMS Events (OTLP Logs)
NetApp EMS events are exported as OTLP log records:
log_record:
body: "Volume vol01 is nearly full (95% used)"
severity: WARNING
attributes:
netapp.ems.message_name: "wafl.vol.full"
netapp.ems.severity: "WARNING"
netapp.cluster.name: "ontap-prod-01"
netapp.volume.name: "vol01"
telegen.signal.category: "Storage Logs"
telegen.signal.subcategory: "NetApp EMS"
E-Series Support (SANtricity)
NetApp E-Series arrays are supported via the SANtricity REST API:
Collector |
Objects |
|---|---|
E-Series Rest |
Volume, Array, Host, Hardware, SsdCache, Pool, Workload (7 objects) |
E-Series Perf |
Volume, Controller, Drive, Pool, Array, SsdCache, Interface, Application, Workload (9 objects) |
Dashboards
Six pre-built dashboards are available in docs/reference/netapp-ontap-dashboards.md:
Fleet Overview (9 panels) — Arrays, nodes, aggregates, volumes, capacity
Node Performance (8 panels) — CPU, IOPS, latency, throughput, network, disk
Aggregate & Volume Capacity (7 panels) — Capacity, free, used %, physical used
Volume / LUN Performance (8 panels) — IOPS, throughput, latency, top volumes
Data Protection / SnapMirror (4 panels) — Lag time, last transfer, failed updates
EMS / Events (7 panels) — Live EMS stream, severity, top messages, hardware events
Metric Parity
The NetApp ONTAP collector targets 1,558 unique Harvest-compatible metric families covering all Rest/RestPerf/KeyPerf templates, aggregator plugins, computed metrics, and ZAPI legacy aliases.
Labels
Label |
Description |
|---|---|
|
Cluster name |
|
Node name |
|
Aggregate name |
|
Volume name |
|
Storage VM name |
|
LUN path |
|
Array name (E-Series) |
Common Dashboards
Capacity Planning
# Total capacity across all arrays
sum(storage_capacity_total_bytes) by (vendor)
# Capacity utilization
sum(storage_capacity_used_bytes) / sum(storage_capacity_total_bytes) * 100
# Days until full (at current growth rate)
(storage_capacity_total_bytes - storage_capacity_used_bytes)
/ deriv(storage_capacity_used_bytes[7d])
/ 86400
Performance
# Total IOPS across arrays
sum(rate(storage_volume_read_iops[5m]) + rate(storage_volume_write_iops[5m]))
# Average latency
avg(storage_volume_read_latency_us + storage_volume_write_latency_us) / 2
# Top 10 volumes by IOPS
topk(10, rate(storage_volume_read_iops[5m]) + rate(storage_volume_write_iops[5m]))
Health Alerts
groups:
- name: storage
rules:
- alert: StorageArrayCapacityHigh
expr: storage_capacity_used_bytes / storage_capacity_total_bytes > 0.85
for: 5m
labels:
severity: warning
annotations:
summary: "Storage array {{ $labels.array }} is over 85% capacity"
- alert: StorageVolumeLatencyHigh
expr: storage_volume_read_latency_us > 10000
for: 5m
labels:
severity: warning
annotations:
summary: "Volume {{ $labels.volume }} has high latency"
- alert: StorageHardwareFailure
expr: storage_hardware_status != 1
for: 1m
labels:
severity: critical
annotations:
summary: "Hardware issue on {{ $labels.array }}"
Security Considerations
Credential Management
Use environment variables or secrets:
collector:
storage:
pure:
targets:
- name: "pure-prod"
address: "https://pure.example.com"
# Reference environment variable
api_token: "${PURE_API_TOKEN}"
In Kubernetes:
apiVersion: v1
kind: Secret
metadata:
name: storage-credentials
type: Opaque
stringData:
PURE_API_TOKEN: "your-token-here"
DELL_PASSWORD: "your-password"
NETAPP_PASSWORD: "your-password"
Network Security
Use HTTPS with valid certificates
Restrict collector IP access on storage arrays
Use read-only monitoring accounts
Rotate credentials regularly
Multi-Array Example
telegen:
mode: collector
service_name: "storage-collector"
otlp:
endpoint: "otel-collector:4317"
collector:
storage:
# Dell PowerStore
dell:
enabled: true
poll_interval: 60s
targets:
- name: "powerstore-dc1"
address: "https://10.0.10.100"
username: "monitor"
password: "${DELL_PASSWORD}"
- name: "powerstore-dc2"
address: "https://10.0.20.100"
username: "monitor"
password: "${DELL_PASSWORD}"
# Pure Storage
pure:
enabled: true
poll_interval: 60s
targets:
- name: "pure-prod"
address: "https://10.0.10.110"
api_token: "${PURE_TOKEN_PROD}"
- name: "pure-dev"
address: "https://10.0.10.111"
api_token: "${PURE_TOKEN_DEV}"
# NetApp
netapp:
enabled: true
poll_interval: 60s
targets:
- name: "ontap-nas"
address: "https://10.0.10.120"
username: "monitor"
password: "${NETAPP_PASSWORD}"
Next Steps
SNMP Receiver - Network device monitoring
Collector Mode Configuration - Collector configuration
Monitoring Telegen - Storage monitoring dashboards