156 lines
5.4 KiB
Markdown
156 lines
5.4 KiB
Markdown
# Pure FlashArray OpenMetrics Exporter - Deployment Summary
|
|
|
|
**Deployment Date:** 2026-06-19
|
|
**Status:** ✅ Successfully Deployed
|
|
**Namespace:** monitoring
|
|
**Array:** utilidor.local.mk-labs.cloud (10.1.71.5)
|
|
|
|
## What Was Deployed
|
|
|
|
### 1. **Container Deployment**
|
|
- **Image:** `quay.io/purestorage/pure-fa-om-exporter:v1.0.27` (latest stable)
|
|
- **Port:** 9490 (standard exporter port)
|
|
- **Resources:** 50m CPU / 64Mi memory (requests), 200m CPU / 128Mi memory (limits)
|
|
- **Health Checks:** Liveness and readiness probes on / endpoint
|
|
- **Security:** Running as non-root user (65534)
|
|
|
|
### 2. **Secret Configuration**
|
|
- **Secret Name:** `pure-fa-exporter-token`
|
|
- **Contains:** tokens.yaml with FlashArray endpoint and API token
|
|
- **Array ID:** utilidor
|
|
- **Endpoint:** utilidor.local.mk-labs.cloud
|
|
- **API Token:** 6157dea0-4c0d-b14b-6e6a-453aa649355d (jarvis readonly user)
|
|
|
|
### 3. **Service**
|
|
- **Type:** ClusterIP (east/west traffic only)
|
|
- **Port:** 9490
|
|
- **Selector:** app.kubernetes.io/name=pure-fa-exporter
|
|
|
|
### 4. **ServiceMonitor**
|
|
- **Scrape Interval:** 60s (storage metrics low frequency)
|
|
- **Scrape Timeout:** 30s
|
|
- **Path:** /metrics?endpoint=utilidor
|
|
- **Label Selector:** release=monitoring (for kube-prometheus-stack)
|
|
- **Relabeling:** Adds 'array' label from endpoint parameter
|
|
|
|
### 5. **ArgoCD Application**
|
|
- **Wave:** 3 (monitoring infrastructure)
|
|
- **Sync Policy:** Automated with prune and self-heal
|
|
- **Source:** cluster/platform/pure-exporter/
|
|
- **Health:** ✅ Healthy
|
|
- **Sync Status:** ✅ Synced
|
|
|
|
## Verification Results
|
|
|
|
### ✅ Pod Status
|
|
```
|
|
NAME READY STATUS RESTARTS AGE
|
|
pure-fa-exporter-7d45dcfb7-9rxj2 1/1 Running 0 21s
|
|
```
|
|
|
|
### ✅ Service Endpoint
|
|
```
|
|
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
|
pure-fa-exporter ClusterIP 10.111.204.251 <none> 9490/TCP 29s
|
|
```
|
|
|
|
### ✅ Metrics Available
|
|
Successfully scraped FlashArray metrics including:
|
|
- `purefa_info` - System information (Purity//FA 6.5.13)
|
|
- `purefa_alerts_open` - Alert events
|
|
- `purefa_array_performance_*` - Performance metrics (IOPS, bandwidth, latency)
|
|
- `purefa_array_space_*` - Capacity metrics
|
|
- `purefa_volume_*` - Volume metrics
|
|
- `purefa_host_*` - Host metrics
|
|
- And many more...
|
|
|
|
Sample output:
|
|
```
|
|
purefa_info{array_name="utilidor",os="Purity//FA",subscription_type="FlashArray",system_id="b78a62d3-57fc-45ab-b73f-6203fb30f28d",version="6.5.13"} 1
|
|
```
|
|
|
|
## Files Created
|
|
|
|
All manifests committed to homelab repo:
|
|
|
|
1. **application.yaml** - ArgoCD Application definition (wave 3)
|
|
2. **deployment.yaml** - Exporter deployment with health checks and resource limits
|
|
3. **secret.yaml** - FlashArray API credentials (tokens.yaml format)
|
|
4. **service.yaml** - ClusterIP service exposing /metrics
|
|
5. **servicemonitor.yaml** - Prometheus Operator integration
|
|
|
|
**Git Commit:** cb5ffc1 - "Add Pure FlashArray OpenMetrics exporter to monitoring namespace"
|
|
|
|
## Next Steps for JARVIS
|
|
|
|
1. **Verify Prometheus Scraping**
|
|
- Check Prometheus UI → Status → Targets
|
|
- Look for `serviceMonitor/monitoring/pure-fa-exporter/0` target
|
|
- Should show state: UP
|
|
|
|
2. **Test Metrics in Prometheus**
|
|
- Navigate to Prometheus UI → Graph
|
|
- Query: `purefa_info` - Should return array information
|
|
- Query: `purefa_array_space_bytes{space="capacity"}` - Total capacity
|
|
- Query: `purefa_array_performance_throughput_iops` - IOPS metrics
|
|
|
|
3. **Grafana Dashboard (Optional)**
|
|
- The Pure Storage community provides Grafana dashboards
|
|
- Reference: https://github.com/PureStorage-OpenConnect/pure-fa-openmetrics-exporter/tree/master/extra/grafana
|
|
- Can import dashboard JSON for fleet-wide overview
|
|
|
|
## Configuration Notes
|
|
|
|
### Multi-Target Exporter Pattern
|
|
The exporter follows Prometheus multi-target pattern:
|
|
- Single exporter instance can scrape multiple arrays
|
|
- Array selection via `?endpoint=<array_id>` query parameter
|
|
- Array credentials in tokens.yaml (array_id → endpoint + api_token mapping)
|
|
|
|
### Scrape Frequency
|
|
- **Current:** 60s interval
|
|
- **Rationale:** Storage metrics are relatively static, high frequency unnecessary
|
|
- **Adjustable:** Modify servicemonitor.yaml if faster updates needed
|
|
|
|
### Security Context
|
|
- Runs as non-root user (UID 65534)
|
|
- Read-only token mount
|
|
- No elevated privileges required
|
|
|
|
## Troubleshooting
|
|
|
|
If metrics are not appearing in Prometheus:
|
|
|
|
1. **Check ServiceMonitor Selection**
|
|
```bash
|
|
kubectl get servicemonitor -n monitoring pure-fa-exporter -o yaml
|
|
```
|
|
Ensure `release: monitoring` label exists for prometheus-operator selector
|
|
|
|
2. **Verify Exporter Logs**
|
|
```bash
|
|
kubectl logs -n monitoring -l app.kubernetes.io/name=pure-fa-exporter
|
|
```
|
|
|
|
3. **Test Endpoint Directly**
|
|
```bash
|
|
kubectl run curl-test --image=curlimages/curl:latest --rm -i --restart=Never -n monitoring -- \
|
|
curl -s http://pure-fa-exporter:9490/metrics?endpoint=utilidor | head
|
|
```
|
|
|
|
4. **Check Prometheus Operator Logs**
|
|
```bash
|
|
kubectl logs -n monitoring -l app.kubernetes.io/name=prometheus-operator
|
|
```
|
|
|
|
## References
|
|
|
|
- **Official Repo:** https://github.com/PureStorage-OpenConnect/pure-fa-openmetrics-exporter
|
|
- **Metrics Specification:** See repo for full purefa_* metric namespace documentation
|
|
- **Deployment Pattern:** Based on portworx-csi GitOps structure
|
|
- **ServiceMonitor Pattern:** Based on kube-prometheus-stack conventions
|
|
|
|
---
|
|
|
|
**Deployment completed successfully.** Prometheus should begin scraping FlashArray metrics within 60 seconds.
|