NetWorker REST API: HTTP GET-forespørsler blir periodevis tidsavbrutt
Summary: API-en (NetWorker representational state transfer) (REST) brukes til å be om informasjon (HTTP GET) fra en NetWorker-server i miljøet. REST-API-spørringer blir periodevis tidsavbrutt, og restapi.log viser en intern serverfeilmelding på grunn av tidsavbrudd for socket. ...
Symptoms
API-et (NetWorker Representational State Transfer) (REST) brukes til å be om informasjon (HTTP GET) fra en NetWorker-server i miljøet. REST-API-spørringer blir periodevis tidsavbrutt, og restapi.log viser en intern serverfeilmelding på grunn av tidsavbrudd for 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]
En curl-kommando til REST API-en for NetWorker-serveren 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-kallene "v3/global/backups", "v3/global/jobs", eller "v3/global/volumes" alene er ressurskrevende spørringer og kan føre til at forespørselen blir tidsavbrutt i større miljøer.
NetWorker REST API-tjenestene driftes i en Apache Tomcat Java-servletbeholder som kjøres på en Java Virtual Machine (JVM). REST API bruker JVM-minne til å behandle hver forespørsel, og det har vist seg at ikke alt minnet frigjøres etter en ressurskrevende spørring. Økningen i JVM-minneutnyttelse kan til slutt føre til andre mindre ressurskrevende REST API-forespørsler om tidsavbrudd.
Resolution
Unngå å bruke ressurskrevende forespørsler til å hente informasjon fra NetWorker-serveren. For eksempel "v3/global/backups" eller "v3/global/clients/CLIENT_NUMBER/backups" med et definert tidsintervall kan brukes i stedet for å bruke den globale "v3/global/backups" for å hente alle sikkerhetskopiene.
Du kan for eksempel begrense resultatene for saveTime mellom et angitt tidsintervall. Et eksempel på en spørring etter jobber som ble fullført i løpet av de siste 24 timene:
../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 utviklerveiledningen for REST API angående NetWorker API-kall, "spørringslistefilter" (q) og "Feltlistefilter" (fl) innstillinger.
REST API-feilsøking er definert i: NetWorker: Slik aktiverer du feilsøking
i REST APIAlternativt kan følgende testing brukes:
Bruk følgende alternativer i REST API-kommandoen:
| Alternativ | Purpose |
--max-time 3600 |
Angir en hard grense på 3600 sekunder (1 time) for hele overføringen (DNS, tilkobling, TLS, forespørsel og svartekst). Hvis hele operasjonen ikke er ferdig innen 1 time, stopper curl med en tidsavbruddsfeil. |
--connect-timeout 60 |
Begrenser tiden det tar å opprette TCP/TLS-tilkoblingen, til 60 sekunder. Hvis curl ikke kan koble til innen 60 sekunder, mislykkes det forsøket. Når --retry er aktivert, kan den prøve på nytt (underlagt reglene nedenfor for å prøve på nytt). Denne verdien kan endres etter eget skjønn. |
--retry 3 |
Gir beskjed om å prøve på nytt opptil tre ganger ved forbigående feil. Denne verdien kan endres etter eget skjønn. Typiske utløsere for nye forsøk:
|
--retry-delay 5 |
Angir en fast ventetid på 5 sekunder mellom nye forsøk. Etter en forbigående feil venter curl 5 sekunder før neste forsøk. Denne verdien kan endres etter eget skjønn. |
-H "X-NW-AUTHC-BASE-URL:REMOTE_AUTHC_SERVER_ADDRESS:9090" |
(Valgfritt.) Dette er bare nødvendig hvis NetWorker-verten som brukes til å behandle påloggingsforespørsler, er atskilt fra NetWorker-serveren i REST API-endepunktet. Se: NetWorker REST API: Slik bruker du en ekstern AUTC-server når du behandler RESTAPI-forespørsler |
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 Cmdleten. Den kontrollerer hvor mange nivåer av nestede objekter og matriser som inkluderes når PowerShell serialiserer dataene til JSON. Antallet nestede objekter (hvis noen i det hele tatt) kan variere avhengig av REST API-endepunktet som brukes, og eventuelle potensielle "spørringslistefilter" (q) eller "feltlistefilter" (fl) parametere som brukes. 20 skal være mer enn tilstrekkelig for NetWorker REST API-kall.
Eksemplet ovenfor opprettet
volumes.json fil i katalogen som curl.exe ble kjørt. Innholdet i filen inkluderer REST API-nyttelasten:
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 (uten -v for korthets 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 eksemplet vises filen "volumes.json" ble opprettet i samme katalog som kommandoen ble kjørt fra.
Ulike verktøy kan brukes til å analysere json-formateringen riktig, verktøyene som brukes kan variere avhengig av operativsystemet og programvaren som er installert.
[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
}
}
]
}