NetWorker REST API: HTTP GET-begäranden överskrider ibland tidsgränsen
Sammanfattning: API:et (Representational State Transfer) för NetWorker-programgränssnittet (Representational State Transfer) används för att begära information (HTTP GET) från en NetWorker-server i miljön. REST API-frågorna överskrider tillfälligt tidsgränsen och restapi.log visar ett internt serverfelmeddelande på grund av en socket-timeout. ...
Symptom
NetWorker REST API används för att begära information (HTTP GET) från en NetWorker-server i miljön. REST API-frågorna överskrider tillfälligt tidsgränsen och restapi.log visar ett internt serverfelmeddelande på grund av en socket-timeout.
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 kommandot till NetWorker-serverns REST API visar:
[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
Orsak
v3/global/backups," "v3/global/jobs" eller "v3/global/volumes" i sig är resurskrävande frågor och kan leda till att begäran överskrider tidsgränsen i större miljöer.
NetWorker REST API-tjänsterna finns på en Apache Tomcat Java-servletbehållare som körs på en virtuell Java-maskin (JVM). REST-API:et använder JVM-minne för att bearbeta varje begäran, och du ser att inte allt minne frigörs efter en resursintensiv fråga. Ökningen av JVM-minnesanvändningen kan så småningom leda till att andra mindre resurskrävande REST API-begäranden överskrider tidsgränsen.
Upplösning
Undvik att använda resursintensiva begäranden för att hämta information från NetWorker-servern. Till exempel "v3/global/backups" eller "v3/global/clients/CLIENT_NUMBER/backups" med ett definierat tidsintervall kan användas i stället för att använda den globala "v3/global/backups" för att hämta alla säkerhetskopior.
Begränsa till exempel resultaten för saveTime mellan ett angivet tidsintervall. Ett exempel på en fråga för jobb som har slutförts under de senaste 24 timmarna:
../global/backups exempel:
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 exempel:
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
Ytterligare information
Se utvecklarhandboken för REST API angående NetWorker API-anrop, "frågelistfilter" (q) och "fältlistefilter" (fl) inställningar.
REST API-felsökning definieras i: NetWorker: Så här aktiverar du REST API-felsökning
Alternativt kan följande testning användas:
Använd följande alternativ i REST API-kommandot:
| Alternativ | Syfte |
--max-time 3600 |
Anger ett hårt tak på 3600 sekunder (1 timme) för hela överföringen (DNS, anslutning, TLS, begäran och svarstext) – Om hela åtgärden inte har slutförts inom 1 timme, curl Stoppas med ett timeout-fel. |
--connect-timeout 60 |
Begränsar den tid som tillåts för att upprätta TCP/TLS-anslutningen till 60 sekunder. Om den curl Det går inte att ansluta inom 60 sekunder, misslyckas det försöket. Med --retry aktiverad kan den sedan försöka igen (med förbehåll för nedanstående regler för återförsök). Det här värdet kan ändras efter eget gottfinnande. |
--retry 3 |
Instruerar curl om du vill försöka igen upp till tre gånger vid tillfälliga fel – Det här värdet kan ändras efter eget gottfinnande.
Vanliga utlösare för återförsök:
|
--retry-delay 5 |
Ställer in en fast väntetid på 5 sekunder mellan återförsök – Efter ett tillfälligt fel, curl Väntar 5 sekunder innan nästa försök. Det här värdet kan ändras efter eget gottfinnande. |
-H "X-NW-AUTHC-BASE-URL:REMOTE_AUTHC_SERVER_ADDRESS:9090" |
(Valfritt.) Detta krävs endast om NetWorker-värden som används för att bearbeta inloggningsbegäranden är separat från NetWorker-servern i REST API-slutpunkten. Se:
NetWorker REST API: Så här använder du en fjärransluten AUTHC-server när du bearbetar RESTAPI-begäranden |
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 är en parameter för PowerShell ConvertTo-Json Cmdlet. Den styr hur många nivåer av kapslade objekt och matriser som ingår när PowerShell serialiserar dina data till JSON. Antalet kapslade objekt (om det finns några alls) kan variera beroende på vilken REST API-slutpunkt som används och eventuella "frågelistfilter" (q) eller "fältlistefilter" (fl) parametrar som används. 20 bör vara mer än tillräckligt för NetWorker REST API-anrop.
I exemplet ovan skapades
volumes.json filen i den katalog från vilken curl.exe kördes. Innehållet i filen innehåller REST API-nyttolasten:
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
Exempel (utan -v för korthet):
[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
I det här exemplet visas filen "volumes.json" skapades i samma katalog som kommandot kördes från. Olika verktyg kan användas för att analysera json-formateringen korrekt, verktygen som används kan variera beroende på installerat operativsystem och programvara.
[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
}
}
]
}