NetWorker REST API: HTTP GET-begäranden överskrider ibland tidsgränsen
Summary: 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. ...
Symptoms
API:et (NetWorker 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.
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]
Ett curl-kommando 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
Cause
REST API-anropen "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 det har visat sig att inte allt minne släpps 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.
Resolution
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.
Du kan till exempel begränsa resultatet 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
Additional 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 stoppas curl 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 curl inte kan ansluta inom 60 sekunder misslyckas det försöket. Med --retry aktiverat 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 att 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 nya försök. Efter ett tillfälligt fel väntar curl 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 tolka json-formateringen korrekt, de verktyg som används kan variera beroende på vilket operativsystem och vilken programvara som är installerad.
[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
}
}
]
}