NetWorker-REST-API: Zeitweises Timeout von HTTP-GET-Anforderungen
Zusammenfassung: Die Anwendungsprogrammschnittstelle (API) von NetWorker Representational State Transfer (REST) wird verwendet, um Informationen (HTTP GET) von einem NetWorker-Server in der Umgebung anzufordern. Bei den REST-API-Abfragen tritt zeitweise ein Timeout auf und der restapi.log zeigt aufgrund eines Socket-Timeouts eine interne Serverfehlermeldung an. ...
Symptome
Die NetWorker-REST-API wird zum Anfordern von Informationen (HTTP GET) von einem NetWorker-Server in der Umgebung. Die REST API-Abfragen führen gelegentlich zu einem Timeout und die restapi.log zeigt eine interne Server-Fehlermeldung aufgrund eines Socket-Timeouts.
YYYY-MM-DD HH:MM:SS INFO [https-jsse-nio-9090-exec-26] c.e.n.w.WebApiResponse - Response status Method: 'GET', URI:'v3/global/backups', Status '200' YYYY-MM-DD HH:MM:SS INFO [https-jsse-nio-9090-exec-26] c.e.n.w.WebApiResponse - Response status Method: 'GET', URI:'v3/global/backups', Status '500' ... YYYY-MM-DD HH:MM:SS ERROR [https-jsse-nio-9090-exec-11] c.e.n.w.WebApiExceptionMapper - Status 'Internal Server Error', msg: java.io.IOException: Broken pipe org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:333) ~[catalina.jar:9.0.10]
A curl Befehl für die NetWorker-Server-REST-API zeigt Folgendes an:
[root@NetworkerServer]# curl -X GET -H "Content-Type: application/json" "https://mynsr.mydomain.com:9090/nwrestapi/v3/global/backups" -u "administrator" -k -1
Enter host password for user 'administrator':
curl: (28) Operation timed out after 300406 milliseconds with 0 out of 0 bytes received
Ursache
v3/global/backups," "v3/global/jobs" oder "v3/global/volumes" allein sind ressourcenintensive Abfragen und können in größeren Umgebungen zu einem Timeout der Anforderung führen.
Die NetWorker-REST-API-Services werden auf einem Apache Tomcat-Java-Servlet-Container gehostet, der auf einer Java Virtual Machine (JVM) ausgeführt wird. Die REST API verwendet JVM-Speicher, um jede Anforderung zu verarbeiten, und es wird festgestellt, dass nicht der gesamte Speicher nach einer ressourcenintensiven Abfrage freigegeben wird. Die Erhöhung der JVM-Speicherauslastung kann schließlich zu einem Timeout bei anderen, weniger ressourcenintensiven REST API-Anforderungen führen.
Lösung
Vermeiden Sie die Verwendung ressourcenintensiver Anfragen zum Abrufen von Informationen vom NetWorker-Server. Beispiel: "v3/global/backups" oder "v3/global/clients/CLIENT_NUMBER/backups" mit einem definierten Zeitbereich anstelle der globalen "v3/global/backups", um alle Backups abzurufen.
Schränken Sie beispielsweise die Ergebnisse ein für saveTime zwischen einem beliebigen angegebenen Zeitraum. Beispiel für eine Abfrage von Jobs, die innerhalb der letzten 24 Stunden abgeschlossen wurden:
../global/backups Beispiel:
https://NETWORKER_SERVER_ADDRESS:9090/nwrestapi/v3/global/backups?q=saveTime:["START" TO "END"]
https://nsr.amer.lan:9090/nwrestapi/v3/global/backups?q=saveTime:["2024-07-24T00:00:01" TO "2024-07-24T23:59:59"]
../global/clients/client_resourceId_number/backups
https://NETWORKER_SERVER_ADDRESS:9090/nwrestapi/v3/global/clients/client_resourceID_number/backups?q=saveTime:["START" TO "END"]
https://nsr.amer.lan:9090/nwrestapi/v3/global/clients/87.0.90.20.0.0.0.0.196.80.99.102.192.168.9.150/backups?q=saveTime:["2024-07-24T00:00:01" TO "2024-07-24T23:59:59"]
../global/jobs:
https://NETWORKER_SERVER_ADDRESS:9090/nwrestapi/v3/global/jobs?q=endTime:["START" TO "END"]
https://nsr.amer.lan:9090/nwrestapi/v3/global/jobs?q=endTime:["2024-07-29T00:00:01" TO "2024-07-29T23:59:59"]
../global/volumes Beispiel:
https://NETWORKER_SERVER_ADDRESS:9090/nwrestapi/v3/global/volumes?q=type:"MEDIA_TYPE"&fl=location,name,mode,pool,written
https://nsr.amer.lan:9090/nwrestapi/v3/global/volumes?q=type:"Data Domain"&fl=location,name,mode,pool,written
Weitere Informationen
Weitere Informationen zu NetWorker-API-Aufrufen finden Sie im REST API-Entwicklerhandbuch unter "Abfragelistenfilter" (q) und "Feldlistenfilter" (fl) eingestellt.
REST-API-Debugging ist definiert in: NetWorker: So aktivieren Sie das REST-API-Debugging
Alternativ können die folgenden Tests verwendet werden:
Verwenden Sie die folgenden Optionen im REST API-Befehl:
| Option | Zweck |
--max-time 3600 |
Legt eine feste Obergrenze von 3600 Sekunden (1 Stunde) für die gesamte Übertragung fest (DNS, Verbindung, TLS, Anforderungs- und Antworttext) - Wenn der gesamte Vorgang nicht innerhalb von 1 Stunde abgeschlossen ist, curl Stoppt mit einem Timeout-Fehler. |
--connect-timeout 60 |
Begrenzt die Zeit für den Aufbau der TCP/TLS-Verbindung auf 60 Sekunden. Wenn die curl Kann innerhalb von 60 Sekunden keine Verbindung hergestellt werden, schlägt dieser Versuch fehl. Mit --retry aktiviert ist, kann es dann erneut versucht werden (vorbehaltlich der folgenden Wiederholungsregeln). Dieser Wert kann nach eigenem Ermessen geändert werden. |
--retry 3 |
Weist curl Bis zu drei Wiederholungsversuche bei vorübergehenden Fehlern: Dieser Wert kann nach eigenem Ermessen geändert werden.
Typische Wiederholungsauslöser:
|
--retry-delay 5 |
Legt eine feste Wartezeit von 5 Sekunden zwischen Wiederholungsversuchen fest - Nach einem vorübergehenden Fehler curl Wartet 5 Sekunden vor dem nächsten Versuch. Dieser Wert kann nach eigenem Ermessen geändert werden. |
-H "X-NW-AUTHC-BASE-URL:REMOTE_AUTHC_SERVER_ADDRESS:9090" |
(Optional.) Dies ist nur erforderlich, wenn der NetWorker-Host, der zur Verarbeitung von Anmeldeanforderungen verwendet wird, vom NetWorker-Server im REST API-Endpunkt getrennt ist. Siehe:
NetWorker-REST-API: So verwenden Sie einen Remote-AUTHC-Server bei der Verarbeitung von RESTAPI-Anforderungen |
Windows Powershell:
curl.exe -k -v --compressed ` --max-time 3600 ` --connect-timeout 60 ` --retry 3 ` --retry-delay 5 ` -u NETWORKER_USERNAME:'PASSWORD' ` -H "Accept: application/json" ` "https://NETWORKER_SERVER_ADDRESS:9090/nwrestapi/v3/global/volumes/ENDPOINT" ` | ConvertFrom-Json ` | ConvertTo-Json -Depth 20 ` | Out-File -Encoding UTF8 OUTPUT_FILE_NAME
-Depth 20 ist ein Parameter für PowerShell's ConvertTo-Json cmdlet. Es steuert, wie viele Ebenen von geschachtelten Objekten und Arrays enthalten sind, wenn PowerShell Ihre Daten in JSON serialisiert. Die Anzahl der verschachtelten Objekte (wenn überhaupt) kann je nach verwendetem REST API-Endpunkt und potenziellem "Abfragelistenfilter" (q) oder "Feldlistenfilter" (fl) verwendeten Parametern. 20 sollte für NetWorker-REST-API-Aufrufe mehr als ausreichend sein.
Im obigen Beispiel wurde die
volumes.json Datei in dem Verzeichnis, aus dem curl.exe ausgeführt wurde. Der Inhalt der Datei umfasst die REST API-Payload:
Linux:
curl -k -v --compressed \ --max-time 3600 \ --connect-timeout 60 \ --retry 3 \ --retry-all-errors \ --retry-delay 5 \ -u NETWORKER_USERNAME:'PASSWORD' \ -H "Accept: application/json" \ "https://NETWORKER_SERVER_ADDRESS:9090/nwrestapi/v3/global/volumes/ENDPOINT" \ -o volumes.json
Beispiel (ohne -v Der Kürze halber):
[root@nsr ~]# curl -k --compressed \
--max-time 3600 \
--connect-timeout 60 \
--retry 3 \
--retry-all-errors \
--retry-delay 5 \
-u Administrator:'!Password1' \
-H "Accept: application/json" \
"https://nsr.amer.lan:9090/nwrestapi/v3/global/volumes?q=type%3A%22Data%20Domain%22&fl=location,name,mode,pool,written" \
-o volumes.json
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 908 0 908 0 0 22700 0 --:--:-- --:--:-- --:--:-- 22146
In diesem Beispiel wird die Datei "volumes.json" wurde in demselben Verzeichnis erstellt, in dem der Befehl ausgeführt wurde. Verschiedene Tools können verwendet werden, um die JSON-Formatierung korrekt zu analysieren, die verwendeten Tools können je nach installiertem Betriebssystem und Software variieren.
[root@nsr ~]# cat volumes.json | python -m json.tool
{
"count": 6,
"volumes": [
{
"location": "ddve01.amer.lan",
"mode": "Appendable",
"name": "nsr.amer.lan.dddefault.001",
"pool": "Data Domain Default",
"written": {
"unit": "KB",
"value": 429
}
},
{
"location": "ddve01.amer.lan",
"mode": "Appendable",
"name": "nsr.amer.lan.dddefault.002",
"pool": "Data Domain Default",
"written": {
"unit": "KB",
"value": 25917027
}
},
{
"location": "ddve01.amer.lan",
"mode": "Appendable",
"name": "VMBackupPool.001",
"pool": "VMBackupPool",
"written": {
"unit": "KB",
"value": 209818962
}
},
{
"location": "ddve01.amer.lan",
"mode": "Appendable",
"name": "VMBackupPool.002",
"pool": "VMBackupPool",
"written": {
"unit": "KB",
"value": 2308309500
}
},
{
"location": "ddve02.amer.lan",
"mode": "Appendable",
"name": "nsr.amer.lan_c.dddefault.001",
"pool": "Data Domain Default Clone",
"written": {
"unit": "KB",
"value": 36752
}
},
{
"location": "ddve02.amer.lan",
"mode": "Appendable",
"name": "VMClonePool.001",
"pool": "VMClonePool",
"written": {
"unit": "KB",
"value": 0
}
}
]
}