NetWorker REST-API: HTTP GET-anmodninger får periodisk timeout
Summary: NetWorker REST-applikationsprogramgrænsefladen (REST) bruges til at anmode om oplysninger (HTTP GET) fra en NetWorker-server i miljøet. REST API-forespørgslerne får periodisk timeout, og restapi.log viser en intern serverfejlmeddelelse på grund af en socket-timeout. ...
Symptoms
NetWorker REST-applikationsprogramgrænsefladen (REST) bruges til at anmode om oplysninger (HTTP GET) fra en NetWorker-server i miljøet. REST API-forespørgslerne får periodisk timeout, og restapi.log viser en intern serverfejlmeddelelse på grund af 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]
En curl-kommando til NetWorker Server REST API viser:
[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 kalder "v3/global/backups", "v3/global/jobs", eller "v3/global/volumes" alene er ressourcekrævende forespørgsler og kan medføre, at anmodningen timeout i større miljøer.
NetWorker REST API-tjenesterne hostes på en Apache Tomcat Java servlet-beholder, der køres på en Java Virtual Machine (JVM). REST API bruger JVM-hukommelse til at behandle alle anmodninger, og det har vist sig, at ikke al hukommelsen frigives efter en ressourceintensiv forespørgsel. Stigningen i JVM-hukommelsesudnyttelse kan i sidste ende føre til andre mindre ressourceintensive REST API-anmodninger om timeout.
Resolution
Undgå at bruge ressourceintensive anmodninger om at hente oplysninger fra NetWorker-serveren. For eksempel "v3/global/backups" eller "v3/global/clients/CLIENT_NUMBER/backups" med et defineret tidsinterval kan bruges i stedet for at bruge den globale "v3/global/backups" for at hente alle sikkerhedskopierne.
Du kan f.eks. begrænse resultaterne for saveTime mellem et angivet tidsinterval. Et eksempel på en forespørgsel om job, der er fuldført inden for de seneste 24 timer:
../global/backups eksempel:
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 eksempel:
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 udviklervejledningen til REST API vedrørende NetWorker API-kald, "forespørgselslistefilter" (q) og "feltlistefilter" (fl) indstillinger.
REST API-fejlfinding er defineret i: NetWorker: Sådan aktiveres REST API-fejlfinding
Alternativt kan følgende test bruges:
Brug følgende indstillinger i REST API-kommandoen:
| MULIGHEDER | Formål |
--max-time 3600 |
Indstiller et hårdt loft på 3600 sekunder (1 time) for hele overførslen (DNS, connect, TLS, request og response body). Hvis hele operationen ikke er færdig inden for 1 time, stopper krøllen med en timeout-fejl. |
--connect-timeout 60 |
Begrænser den tid, det tager at oprette TCP/TLS-forbindelsen, til 60 sekunder. Hvis curl ikke kan oprette forbindelse inden for 60 sekunder, mislykkes det forsøg. Når --try er aktiveret igen, kan den prøve igen (underlagt nedenstående regler for genforsøg). Denne værdi kan ændres efter eget skøn. |
--retry 3 |
Instruerer curl i at prøve igen op til tre gange ved forbigående fejl. Denne værdi kan ændres efter eget skøn. Typiske udløsere til genforsøg:
|
–-retry-delay 5 |
Indstiller en fast ventetid på 5 sekunder mellem gentagne forsøg. Efter en forbigående fejl venter curl 5 sekunder før næste forsøg. Denne værdi kan ændres efter eget skøn. |
-H "X-NW-AUTHC-BASE-URL:REMOTE_AUTHC_SERVER_ADDRESS:9090" |
(Valgfrit.) Dette kræves kun, hvis den NetWorker-vært, der bruges til at behandle loginanmodninger, er adskilt fra NetWorker-serveren i REST API-slutpunktet. Se: NetWorker REST API: Sådan bruges en ekstern AUTHC-server, når du behandler RESTAPI-anmodninger |
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 er en parameter for PowerShells ConvertTo-Json Cmdlet. Den styrer, hvor mange niveauer af indlejrede objekter og arrays der medtages, når PowerShell serialiserer dine data til JSON. Antallet af indlejrede objekter (hvis der overhovedet er nogen) kan variere afhængigt af det anvendte REST API-slutpunkt og et eventuelt "forespørgselslistefilter" (q) eller "feltlistefilter" (fl) anvendte parametre. 20 bør være mere end tilstrækkeligt til NetWorker REST API-kald.
Ovenstående eksempel oprettede
volumes.json fil i den mappe, hvorfra curl.exe blev kørt. Indholdet af filen indeholder REST API-data:
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
Eksempel (uden -v For korthedens skyld):
[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 dette eksempel vil filen "volumes.json" blev oprettet i den samme mappe, hvorfra kommandoen blev kørt.
Forskellige værktøjer kan bruges til at analysere json-formateringen korrekt, de anvendte værktøjer kan variere afhængigt af det installerede operativsystem og 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
}
}
]
}