NetWorker REST API: Er treedt af en toe een time-out op voor HTTP GET-verzoeken
Summary: De NetWorker Representational State Transfer (REST) Application Program Interface (API) wordt gebruikt om informatie (HTTP GET) op te vragen bij een NetWorker-server in de omgeving. Er treedt af en toe een time-out op voor de REST API-query's en de restapi.log geeft een interne serverfoutmelding weer als gevolg van een time-out van de socket. ...
Symptoms
De NetWorker Representational State Transfer (REST) Application Program Interface (API) wordt gebruikt om informatie (HTTP GET) op te vragen bij een NetWorker-server in de omgeving. Er treedt af en toe een time-out op voor de REST API-query's en de restapi.log geeft een interne serverfoutmelding weer als gevolg van een time-out van de socket.
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]
Een curl-opdracht voor de NetWorker Server REST API laat het volgende zien:
[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
Cause
De REST API roept "v3/global/backups", "v3/global/jobs", of "v3/global/volumes" alleen zijn resource-intensieve query's en kunnen leiden tot een time-out van de aanvraag in grotere omgevingen.
De NetWorker REST API-services worden gehost op een Apache Tomcat Java servlet-container die wordt uitgevoerd op een Java Virtual Machine (JVM). De REST API maakt gebruik van JVM-geheugen om elke aanvraag te verwerken en het is aangetoond dat niet al het geheugen wordt vrijgegeven na een resource-intensieve query. De toename in JVM-geheugengebruik kan uiteindelijk leiden tot andere, minder resource-intensieve REST API-aanvragen voor time-outs.
Resolution
Vermijd het gebruik van de resource-intensieve aanvragen om informatie op te halen van de NetWorker-server. Bijvoorbeeld, de "v3/global/backups" of "v3/global/clients/CLIENT_NUMBER/backups" met een gedefinieerd tijdsbereik kan worden gebruikt in plaats van de algemene "v3/global/backups" om alle back-ups op te halen.
Beperk bijvoorbeeld de resultaten voor saveTime tussen een opgegeven tijdsbereik. Een voorbeeld van een query voor taken die in de afgelopen 24 uur zijn voltooid:
../global/backups Voorbeeld:
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 Voorbeeld:
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
Additional Information
Raadpleeg de REST API-ontwikkelaarshandleiding met betrekking tot NetWorker API-aanroepen, "query list filter" (q) en "Veldenlijstfilter" (fl) instellingen.
REST API-foutopsporing wordt gedefinieerd in: NetWorker: Hoe REST API-foutopsporing
in te schakelenU kunt ook de volgende tests gebruiken:
Gebruik de volgende opties in de REST API-opdracht:
| Optie | Doel |
--max-time 3600 |
Hiermee stelt u een harde limiet in van 3600 seconden (1 uur) voor de gehele overdracht (DNS, Connect, TLS, aanvraag en antwoordtekst). Als de hele bewerking niet binnen 1 uur is voltooid, stopt curl met een time-outfout. |
--connect-timeout 60 |
Hiermee beperkt u de tijd die is toegestaan om de TCP/TLS-verbinding tot stand te brengen tot 60 seconden. Als curl niet binnen 60 seconden verbinding kan maken, mislukt die poging. Als --retry is ingeschakeld, kan het opnieuw proberen (met inachtneming van onderstaande regels voor opnieuw proberen). Deze waarde kan naar eigen goeddunken worden gewijzigd. |
--retry 3 |
Instrueert curl om het tot drie keer opnieuw te proberen bij tijdelijke fouten. Deze waarde kan naar eigen goeddunken worden gewijzigd. Typische triggers voor nieuwe pogingen:
|
--retry-delay 5 |
Hiermee stelt u een vaste wachttijd van 5 seconden in tussen nieuwe pogingen. Na een tijdelijke storing wacht curl 5 seconden voor de volgende poging. Deze waarde kan naar eigen goeddunken worden gewijzigd. |
-H "X-NW-AUTHC-BASE-URL:REMOTE_AUTHC_SERVER_ADDRESS:9090" |
(Optioneel.) Dit is alleen vereist als de NetWorker-host die wordt gebruikt voor het verwerken van aanmeldingsverzoeken, gescheiden is van de NetWorker-server in het REST API-eindpunt. Zie: NetWorker REST API: Een externe AUTHC-server gebruiken bij het verwerken van RESTAPI-aanvragen |
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 is een parameter voor de PowerShell's ConvertTo-Json Cmdlet. Het bepaalt hoeveel niveaus van geneste objecten en arrays worden opgenomen wanneer PowerShell uw data serialiseert naar JSON. Het aantal geneste objecten (als dat al het geval is) kan variëren, afhankelijk van het gebruikte REST API-eindpunt en een mogelijk querylijstfilter (q) of "Veldenlijstfilter" (fl) gebruikte parameters. 20 zou meer dan voldoende moeten zijn voor NetWorker REST API-aanroepen.
In het bovenstaande voorbeeld is de
volumes.json bestand in de map van waaruit curl.exe werd uitgevoerd. De inhoud van het bestand bevat de 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
Voorbeeld (zonder -v Kortheidshalve):
[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 dit voorbeeld wordt het bestand "volumes.json" is gemaakt in dezelfde map van waaruit de opdracht werd uitgevoerd.
Er kunnen verschillende tools worden gebruikt om de json-opmaak correct te parseren, de gebruikte tools kunnen variëren, afhankelijk van het besturingssysteem en de geïnstalleerde software.
[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
}
}
]
}