Netapp via Ontap Rest API fails for certain APIs on ASA-A30 9.18.1

CMK version: 2.4.0p22
OS version: 24.04.4 LTS

Error message: Agent exited with code 1: Agent failed - please submit a crash report! (Crash-ID: 041a0150-1c68-11f1-a635-005056b69bf3)

Output of “cmk --debug -vvn hostname”: (If it is a problem with checks or plugins)

Ich habe die neuste Checkmk Version OMD - Open Monitoring Distribution Version 2.4.0p22.cre installiert und habe eine “Netap via Ontap Rest API” Regel zum Abfragen der API meiner Netapp ASA-A30 Version 9.18.1 angelegt. Leider habe ich folgenden Fehler erhalten, wenn ich in der Regel selbst alle Felder/APIs zum abfragen auswähle:
Agent exited with code 1: Agent failed - please submit a crash report! (Crash-ID: 041a0150-1c68-11f1-a635-005056b69bf3)

Traceback (most recent call last):
File “/omd/sites/SKS_DE/lib/python3/cmk/special_agents/v0_unstable/agent_common.py”, line 151, in_special_agent_main_core
return main_fn(args)
AAA
File “/omd/sites/SKS_DE/lib/python3/cmk/special_agents/agent_netapp_ontap.py”, line 1058, in agent_netapp_main
raise exc
File “/omd/sites/SKS_DE/lib/python3/cmk/special_agents/agent_netapp_ontap.py”, line 1054, in agent_netapp_main
write_sections(connection, logger, args)
File “/omd/sites/SKS_DE/lib/python3/cmk/special_agents/agent_netapp_ontap.py”, line 909, in write_sections
write_section(“volumes_counters”, fetch_volumes_counters(connection, volumes), logger)
File “/omd/sites/SKS_DE/lib/python3/cmk/special_agents/agent_netapp_ontap.py”, line 63, in write_section
for element in generator:
AAAAAAAAA
File “/omd/sites/SKS_DE/lib/python3/cmk/special_agents/agent_netapp_ontap.py”, line 215, in fetch_volumes_counters
for element in NetAppResource.CounterRow.get_collection(
AAAAA

File “/omd/sites/SKS_DE/lib/python3.12/site-packages/netapp_ontap/resource.py”, line 767, in _get_collection
utils.on_api_fail(erro)
File “/omd/sites/SKS_DE/lib/python3.12/site-packages/netapp_ontap/utils.py”, line 78, in on_api_fail
raise NetAppRestError(cause=erro) from None
netapp_ontap.error.NetAppRestError: Caused by HTTPError('404 Client Error: Not Found for url:

API not found CRIT

Wenn ich das Skript im Debug Modus laufen lasse bekomme ich folgendes:

Traceback (most recent call last):
File “/omd/sites/SKS_DE/lib/python3/cmk/special_agents/agent_netapp_ontap.py”, line 1071, in
main()
File “/omd/sites/SKS_DE/lib/python3/cmk/special_agents/agent_netapp_ontap.py”, line 1066, in main
return special_agent_main(parse_arguments, agent_netapp_main)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/omd/sites/SKS_DE/lib/python3/cmk/special_agents/v0_unstable/agent_common.py”, line 180, in special_agent_main
return _special_agent_main_core(
^^^^^^^^^^^^^^^^^^^^^^^^^
File “/omd/sites/SKS_DE/lib/python3/cmk/special_agents/v0_unstable/agent_common.py”, line 151, in _special_agent_main_core
return main_fn(args)
^^^^^^^^^^^^^
File “/omd/sites/SKS_DE/lib/python3/cmk/special_agents/agent_netapp_ontap.py”, line 1058, in agent_netapp_main
raise exc
File “/omd/sites/SKS_DE/lib/python3/cmk/special_agents/agent_netapp_ontap.py”, line 1054, in agent_netapp_main
write_sections(connection, logger, args)
File “/omd/sites/SKS_DE/lib/python3/cmk/special_agents/agent_netapp_ontap.py”, line 909, in write_sections
write_section(“volumes_counters”, fetch_volumes_counters(connection, volumes), logger)
File “/omd/sites/SKS_DE/lib/python3/cmk/special_agents/agent_netapp_ontap.py”, line 63, in write_section
for element in generator:
^^^^^^^^^
File “/omd/sites/SKS_DE/lib/python3/cmk/special_agents/agent_netapp_ontap.py”, line 215, in fetch_volumes_counters
for element in NetAppResource.CounterRow.get_collection(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/omd/sites/SKS_DE/lib/python3.12/site-packages/netapp_ontap/resource.py”, line 767, in _get_collection
utils.on_api_fail(erro)
File “/omd/sites/SKS_DE/lib/python3.12/site-packages/netapp_ontap/utils.py”, line 78, in on_api_fail
raise NetAppRestError(cause=erro) from None
netapp_ontap.error.NetAppRestError: Caused by HTTPError(‘404 Client Error: Not Found for url: https://sto-de-26-asa1:443/api/cluster/counter/tables/volume/rows?id=*%3Aiscsi_svm%3Aiscsi_svm_root%3A24fa3c60-0da2-11f1-8272-d039eae42143&fields=counters&counters.name=fcp.write_data|fcp.read_latency|iscsi.write_latency|read_latency|nfs.write_ops|fcp.read_ops|fcp.read_data|cifs.write_ops|iscsi.read_latency|nfs.write_latency|iscsi.read_ops|total_read_ops|cifs.read_latency|nfs.read_latency|iscsi.read_data|bytes_written|cifs.write_data|iscsi.write_data|iscsi.write_ops|fcp.write_latency|fcp.write_ops|nfs.read_ops|bytes_read|cifs.read_ops|write_latency|cifs.read_data|nfs.read_data|total_write_ops|nfs.write_data|cifs.write_latency’): API not found

Nach sehr viel herumprobieren, habe ich erkannt, dass ich folgende Felder aus der Regel entfernen muss:

Leider verstehe ich nicht ganz warum einige APIs hier nicht richtig abgefragt werden können und natürlich auch wenn es kein sauberes Error Handling gibt. Ich musste API für API testen um herauszufinden welche Abfragen funktionieren und welche nicht. Ist hier zufällig ein Update des agent_netapp_ontap.py geplant, sodass auch die Netapp ASA vollständig abgefragt werden kann? Oder muss ich manuelle Änderungen im Skript selbst durchführen?

Sonnige Grüße
Tim

Ob da ein Update geplant ist kann ich nicht sagen nur, dass laut Netapp Doku die ASA Serie keine “normalen” ONTAP Geräte sind sondern dort die ONTAP API abweicht von der unified ONTAP Version der anderen Serien.

In der Doku sind eine ganz Menge Endpoints aufgeführt welche sich geändert haben. Hier müsste sehr wahrscheinlich ein eigener angepasster Special Agent erstellt werden für die ASA Serie. Einfach zu integrieren in den bestehenden Agent ist das jedenfalls nicht.

Hallo Andreas,

danke für dein Feedback. Leider bin ich auch etwas von dem Error Handling enttäuscht, welches hier nicht vorhanden zu sein scheint. Anstatt nicht vorhandene API Endpoints zu überspringen (und vielleicht als Warn oder Unkown auszugeben) crashst das gesamte Skript und ich musste müßelig selbst troubleshooten und herausfinden welche APIs hier den crash verursachen.

Dennoch Danke für deine Rückmeldung und ich kann nur hoffen, dass das Skript vielleicht bald ein Update bekommt.

Sonnige Grüße
Tim

Hier müsste Netapp selber nachbessern. Der Crash erfolgt innerhalb der “netapp_ontap” Library. Was man aber durchaus mal probieren kann in einer Testsite ist ein Update der “netapp_ontap” Python Bindings auf eine aktuellere Version mittels pip.

Wenn ich aber das Changelog mir anschaue zwischen der von CMK verwendeten Version und der aktuellen. Dann sind nur mehr Endpoints dazu gekommen welche möglich sind.

Der Code an der Stelle mit dem Crash ist auch “schön”.

            # our @utils.api wrapper cannot help us generically catch this error
            # since this is a generator function and not a normal function

Das die Abfrage dann einfach crasht ist von Netapp so gewollt. Im ganzen Code ist das auch die einzige Stelle wo er einfach so failed.

1 Like

Hi hab nochmal die Quellen gesucht und zusammengefasst,

Warum der Crash passiert

Die ASA r2-Serie (A20, A30, A50, A70, A90, A1K) verwendet eine grundlegend andere ONTAP-Persönlichkeit, die ausschließlich für block-basierte SAN-Workloads ausgelegt ist. Anders als bei klassischen ONTAP-Systemen gibt es auf ASA r2 keine benutzer-verwalteten Volumes oder
Aggregates — der Storage wird automatisch über sogenannte “Storage Availability Zones” verwaltet.
Daher existiert der Endpoint, den der Checkmk-Agent aufruft, schlicht nicht:

/api/cluster/counter/tables/volume/rows → 404

Dass der Agent dabei crasht statt den fehlenden Endpoint graceful zu überspringen, ist ein separates Problem — das im Code sogar kommentiert ist:

  # our @utils.api wrapper cannot help us generically catch this error
  # since this is a generator function and not a normal function

Dein Workaround ist korrekt

Den Abschnitt “Volume counters” in der Regel zu deaktivieren ist aktuell der richtige Weg. Alle anderen Endpoints (Cluster Health, Disk, Node, SVM etc.) die nicht von Volume-Level-Countern abhängen, sollten weiterhin funktionieren.

Was ein korrekter ASA r2 Agent stattdessen verwenden müsste

NetApp dokumentiert, welche Endpoints auf ASA r2 die klassischen Volume-basierten ersetzen:

Statt… Auf ASA r2 verwenden
/api/storage/volumes /api/storage/storage-units
/api/storage/luns + /api/storage/namespaces /api/storage/storage-units
/api/storage/aggregates /api/storage/availability-zones
/api/cluster/counter/tables/volume/rows nicht verfügbar (kein RestPerf)

Für Performance-Daten gilt: ASA r2 unterstützt den Standard-RestPerf Counter Collector gar nicht.
Tools wie NetApp Harvest lösen das über einen separaten “KeyPerf Collector” für Latenz, IOPS und Durchsatz auf Storage-Unit-Ebene. (ASA r2 - Harvest)

Quellen:

VG Bernd

1 Like

Guten Morgen Bernd,
Guten Morgen Andreas,

vielen Dank für euer Feedback und besonders dir Bernd für die ausführliche Analyse. Vielleicht spiele ich mal etwas mit dem Skript herum und versuche die abgefragten API Endpoints anzupassen…..ob dann daraus ein sauberer Service herauskommt, ist nochmal ein anderes Thema.

Vielen Dank für eure Unterstützung und Input.

Gruß
Tim

1 Like