NetWorker REST API: U požadavků HTTP GET občas dochází k vypršení časového limitu
Summary: Rozhraní aplikačního programu (API) NetWorker Representational State Transfer (REST) se používá k vyžádání informací (HTTP GET) ze serveru NetWorker v prostředí. Dotazy rozhraní REST API občas vyprší a restapi.log zobrazí interní chybovou zprávu serveru z důvodu vypršení časového limitu soketu. ...
Symptoms
Aplikační programové rozhraní (API) NetWorker Representational State Transfer (REST) se používá k vyžádání informací (HTTP GET) ze serveru NetWorker v prostředí. Dotazy rozhraní REST API občas vyprší a restapi.log zobrazí interní chybovou zprávu serveru z důvodu vypršení časového limitu soketu.
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]
Příkaz curl pro rozhraní REST API serveru NetWorker zobrazí:
[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
Rozhraní REST API volá "v3/global/backups", "v3/global/jobs", nebo "v3/global/volumes" jsou dotazy náročné na prostředky a můžou způsobit vypršení časového limitu požadavku ve větších prostředích.
Služby rozhraní NetWorker REST API jsou hostovány v kontejneru Apache Tomcat Java servlet, který je spuštěn na virtuálním počítači Java (JVM). REST API používá paměť JVM ke zpracování každého požadavku a ukázalo se, že ne všechna paměť se uvolní po dotazu náročném na prostředky. Zvýšení využití paměti JVM může nakonec vést k vypršení časového limitu dalších požadavků rozhraní REST API méně náročných na prostředky.
Resolution
Nepoužívejte k načtení informací ze serveru NetWorker požadavky náročné na zdroje. Například "v3/global/backups" nebo "v3/global/clients/CLIENT_NUMBER/backups" s definovaným časovým rozsahem lze použít místo použití globálního "v3/global/backups" pro načtení všech záloh.
Můžete například omezit výsledky pro saveTime mezi libovolným zadaným časovým rozsahem. Příklad dotazu na úlohy, které se dokončily během posledních 24 hodin:
../global/backups Příklad:
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 Příklad:
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
Přečtěte si příručku pro vývojáře rozhraní REST API týkající se volání rozhraní NetWorker API "query list filter" (q) a "filtr seznamu polí" (fl) nastavení.
Ladění REST API je definováno v: NetWorker: Jak povolit ladění
REST APIAlternativně lze použít následující testování:
V příkazu REST API použijte následující možnosti:
| Možnost | Účel |
--max-time 3600 |
Nastaví pevný limit 3600 sekund (1 hodina) pro celý přenos (DNS, připojení, TLS, text požadavku a odpovědi). Pokud se celá operace nedokončí do 1 hodiny, curl se zastaví s chybou vypršení časového limitu. |
--connect-timeout 60 |
Omezuje dobu potřebnou k navázání připojení TCP/TLS na 60 sekund. Pokud se curl nemůže připojit do 60 sekund, tento pokus se nezdaří. Když je --retry povolená, může to zkusit znovu (v souladu s níže uvedenými pravidly opakování). Tuto hodnotu lze podle vašeho uvážení změnit. |
--retry 3 |
Instruuje curl, aby se při přechodných selháních opakoval až třikrát. Tuto hodnotu lze podle vašeho uvážení změnit. Typické triggery opakování:
|
--retry-delay 5 |
Nastaví pevné čekání 5 sekund mezi opakovanými pokusy. Po přechodném selhání curl počká 5 sekund před dalším pokusem. Tuto hodnotu lze podle vašeho uvážení změnit. |
-H "X-NW-AUTHC-BASE-URL:REMOTE_AUTHC_SERVER_ADDRESS:9090" |
(Volitelné.) To je vyžadováno pouze v případě, že je hostitel NetWorker, který se používá ke zpracování požadavků na přihlášení, oddělen od serveru NetWorker v koncovém bodě rozhraní REST API. Viz: Rozhraní NetWorker REST API: Jak používat vzdálený server AUTHC při zpracování požadavků RESTAPI |
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 je parametrem pro PowerShell ConvertTo-Json . Určuje, kolik úrovní vnořených objektů a polí je zahrnuto, když PowerShell serializuje data do formátu JSON. Počet vnořených objektů (pokud vůbec existuje) se může lišit v závislosti na použitém koncovém bodu rozhraní REST API a případném "filtru seznamu dotazů" (q) nebo "filtr seznamu polí" (fl) parametry. 20 by mělo být více než dostačující pro volání rozhraní NetWorker REST API.
Výše uvedený příklad vytvořil
volumes.json v adresáři, ze kterého curl.exe byl spuštěn. Obsah souboru zahrnuje datovou část rozhraní REST API:
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
Příklad (bez -v pro stručnost):
[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
V tomto příkladu je soubor "volumes.json" byl vytvořen ve stejném adresáři, ze kterého byl příkaz spuštěn.
Ke správné analýze formátování json lze použít různé nástroje, použité nástroje se mohou lišit v závislosti na nainstalovaném operačním systému a softwaru.
[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
}
}
]
}