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
Configuration
collector:
storage:
netapp:
enabled: true
poll_interval: 60s
targets:
- name: "ontap-prod"
address: "https://ontap.example.com"
username: "monitor"
password: "${NETAPP_PASSWORD}"
verify_ssl: true
metrics:
aggregates: true
volumes: true
luns: true
network: true
performance: true
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
Metrics Collected
Metric |
Description |
|---|---|
|
Aggregate total size |
|
Aggregate used space |
|
Volume size |
|
Volume used space |
|
Volume IOPS |
|
Volume throughput |
|
Volume latency |
|
LUN size |
|
LUN used space |
|
Port speed |
|
Cluster health status |
Labels
Label |
Description |
|---|---|
|
Cluster name |
|
Node name |
|
Aggregate name |
|
Volume name |
|
Storage VM name |
|
LUN path |
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