# 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 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=` 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.