Tech ONTAP Blogs
Tech ONTAP Blogs
In today’s multi-cloud environment, customers need a single pane of glass to visualize and monitor their storage estate across all platforms. Now, with Google Cloud NetApp Volumes (GCNV) Flex Unified with ONTAP mode enabled, customers can use NetApp Harvest to connect their storage estate to modern monitoring infrastructure.
Enterprises now run ONTAP® across multiple clouds — Google Cloud, AWS, ANF etc. — alongside on-premises clusters. Each platform has its own metrics vocabulary, and customers are forced to go to multiple dashboards to manage their storage estate.
NetApp Harvest solves this by providing a single collection and visualization layer that works the same way everywhere. This eliminates the fragmentation that comes from using a different monitoring tool in every environment.
NetApp Harvest is an open-source metrics collection engine purpose-built for all NetApp offerings like ONTAP, StorageGRID & E-series. It connects your storage infrastructure to modern observability platforms — Prometheus, Grafana, Google Cloud Monitoring, InfluxDB — plugging into your existing monitoring infrastructure. Enabling you to see every performance counter, capacity trend, and hardware health signal in real time.
Out-of-the-box Harvest provides a set of pollers, collectors, templates, exporters, an optional auto-discover daemon, and a set of ONTAP, StorageGRID, E-Series and Cisco Nexus Switch dashboards for Prometheus and Grafana.
The full metric catalog is documented at netapp.github.io/harvest/24.08/ontap-metrics.
On GCNV, Harvest supports:
Harvest seamlessly integrates into your monitoring estate by abstracting away the hyperscaler & ONTAP version. It runs as a local collector alongside each deployment & pushes a consistent set of metrics to a central time-series database.
If your team prefers to use a cloud-native backend — Stackdriver on GCP, Azure Monitor on Azure — Harvest supports that too, through connectors like OpenTelemetry.
Harvest has a clean, modular architecture built around five components:
Authentication is straightforward: Harvest connects using a read-only ONTAP user account, so there's zero risk of accidental configuration changes.
┌──────────────────────────────────────────────────────────────┐
│ DATA SOURCES │
│ │
│ ┌──────────┐ ┌──────────────┐ ┌─────────┐ │
│ │ ONTAP │ │ StorageGRID │ │ E-Series│ │
│ └────┬─────┘ └──────┬───────┘ └────┬────┘ │
└────────┼───────────────────┼───────────────────┼─────────────┘
│ │ │
▼ ▼ ▼
┌──────────────────────────────────────────────────────────────┐
│ COLLECTORS │
│ │
│ ┌──────┐ ┌──────────┐ ┌─────┐ ┌──────────┐ │
│ │ REST │ │ RestPerf │ │ EMS │ │ ZAPI* │ │
│ └──┬───┘ └────┬─────┘ └──┬──┘ └────┬─────┘ │
└──────┼───────────┼───────────┼──────────┼───────────────────-┘
│ │ │ │
▼ ▼ ▼ ▼
┌──────────────────────────────────────────────────────────────┐
│ HARVEST POLLER │
│ (one per monitored cluster) │
│ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Templates (YAML) │ │
│ │ volumes · SVMs · aggregates · nodes · LUNs │ │
│ │ NFS ops · SnapMirror · disks · shelves │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ harvest.yml config │ credentials (Basic / OAuth) │
└──────────────────────┬───────────────────────────────────────┘
│
│ exposes /metrics (:2000+)
▼
┌──────────────────────────────────────────────────────────────┐
│ EXPORTERS │
│ │
│ ┌────────────────────┐ ┌────────────────────┐ │
│ │ Prometheus (pull) │ │ InfluxDB (push) │ │
│ └─────────┬──────────┘ └─────────┬──────────┘ │
└─────────────┼───────────────────────────┼────────────────────┘
│ │
▼ ▼
┌──────────────────────────┐ ┌────────────────────────────────┐
│ Prometheus :9090 │ │ InfluxDB │
│ (time-series storage) │ │ (time-series storage) │
└────────────┬─────────────┘ └──────────────┬─────────────────┘
│ │
├──────────┐ │
▼ ▼ ▼
┌────────────────┐ ┌─────────────────┐ ┌────────────────┐
│ Grafana :3000 │ │ OTEL Collector │ │ Grafana :3000 │
│ (dashboards) │ │ │ │ │ (dashboards) │
└────────────────┘ │ ▼ │ └────────────────┘
│ Google Cloud │
│ Monitoring / │
│ Azure Monitor │
└─────────────────┘
* ZAPI: legacy, for older ONTAP releases
Find the latest guide at: netapp.github.io/harvest/latest
Let’s take a look at a quick setup to hit the ground running. Harvest is container-ready and supports several deployment options. Today, I will tell you how to set up harvest natively and use Docker Compose to set up Prometheus and Grafana in one go.
Prerequisites:
git clone https://github.com/NetApp/harvest.git
cd harvest
# check the version of go required in the go.mod file
make build
bin/harvest version
Configure harvest.yml:
Add a poller to your harvest.yml with the full GCNV resource path as addr and set gcnv_ontap_mode: true. We also add an exporter for Prometheus.
Exporters:
prometheus1:
exporter: Prometheus
addr: 0.0.0.0
port_range: 2000-2030
Defaults:
exporters:
- prometheus1
Pollers:
gcnv-pool:
datacenter: <region-label>
addr: netapp.googleapis.com/v1/projects/<PROJECT>/locations/<LOCATION>/storagePools/<POOL>/ontap
gcnv_ontap_mode: true
credentials_script:
path: /opt/harvest/gcnv-token.sh
schedule: 5m
timeout: 10s
collectors:
- Rest
- KeyPerf
- Ems
exporters:
- prometheus1
One-time requirement:
gcloud config set project <PROJECT>
gcloud auth login # or activate-service-account
gcloud auth application-default login
gcloud auth print-access-token # must work
GCNV uses Bearer token authentication. Use credentials_script to supply a token at runtime. The script must print authToken: <token> to stdout.
Sample Script (gcnv-token.sh):
#!/bin/bash
echo "authToken: $(gcloud auth print-access-token)"
Check:
chmod +x /path/to/gcnv-token.sh
/path/to/gcnv-token.sh \# must print authToken: ...
We are now ready to start Harvest!
bin/harvest start
bin/harvest status
The output should look similar to this:
Datacenter | Poller | PID | PromPort | Status
-----------+---------+---------+----------+----------
DC-01 | gcnv-pool | 1280145 | 13000 | running
The logs of each poller can be found in /var/log/harvest/
With Harvest ready, it can be plugged into your existing infrastructure. For now, let’s set up prometheus and graphana through docker.
docker pull ghcr.io/netapp/harvest:latest
docker run --rm \
--env UID=$(id -u) --env GID=$(id -g) \
--env HARVEST_DOCKER=1 \
--entrypoint "bin/harvest" \
--volume "$(pwd):/opt/temp" \
--volume "$(pwd)/harvest.yml:/opt/harvest/harvest.yml" \
ghcr.io/netapp/harvest:latest \
generate docker full \
--output harvest-compose.yml
Check status with docker ps.
HOST_IP=$(hostname -I | awk '{print $1}')
cat > container/prometheus/harvest_targets.yml <<EOF
- targets:
- ${HOST_IP}:2000
EOF
In prom-stack.yml, under prometheus, add:
extra_hosts: - "host.docker.internal:host-gateway"
docker compose -f prom-stack.yml up -d
And you should now be able to see the prometheus and grafana dashboards up and running.
Verify:
Prometheus: http://<host>:9090/targets
Grafana: http://<host>:3000
In GCNV, today you can look at ONTAP dashboards for LUN, Security, SVM, Volumes, Volumes by SVM and Volume Deep Dive.
Let’s check out the volume dashboards:
ONTAP: Volume
ONTAP: Volume Deep Dive
Harvest is open-source under the Apache 2.0 license. You can deploy it right now! Leverage the power of NetApp Harvest, and connect your storage infrastructure to modern observability platforms today.
Follow the documentation: https://netapp.github.io/harvest/26.05/
It transforms telemetry into an AI-accessible layer that delivers intelligent, conversational, insights into your entire NetApp data estate, with a consistent experience across all three. The result is an AI-driven, conversational interface that queries, analyzes and interprets real time.
Read about it here: