Interfejs API REST NetWorker: Żądania HTTP GET sporadycznie przekraczają limit czasu
Summary: Interfejs aplikacji (API) transferu stanu reprezentacji (REST) NetWorker służy do żądania informacji (HTTP GET) z serwera NetWorker w środowisku. Interfejs API REST sporadycznie przekracza limit czasu, a restapi.log wyświetla wewnętrzny komunikat o błędzie serwera z powodu przekroczenia limitu czasu gniazda. ...
Symptoms
Interfejs aplikacji (API) NetWorker Representational State Transfer (REST) służy do żądania informacji (HTTP GET) z serwera NetWorker w środowisku. Interfejs API REST sporadycznie przekracza limit czasu, a restapi.log wyświetla wewnętrzny komunikat o błędzie serwera z powodu przekroczenia limitu czasu gniazda.
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]
Polecenie curl do interfejsu API REST serwera NetWorker pokazuje:
[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
Wywołania interfejsu API REST "v3/global/backups", "v3/global/jobs", lub "v3/global/volumes" są zapytaniami wymagającymi dużej ilości zasobów i mogą spowodować przekroczenie limitu czasu żądania w większych środowiskach.
Usługi interfejsu API REST NetWorker są hostowane w kontenerze serwletów Java Apache Tomcat, który jest uruchamiany na wirtualnej maszynie Java (JVM). Interfejs API REST używa pamięci JVM do przetwarzania każdego żądania i wykazano, że nie cała pamięć jest zwalniana po zapytaniu wymagającym dużej ilości zasobów. Wzrost wykorzystania pamięci JVM może ostatecznie doprowadzić do przekroczenia limitu czasu innych, mniej zasobożernych żądań interfejsu API REST.
Resolution
Należy unikać korzystania z żądań wymagających dużej ilości zasobów w celu pobierania informacji z serwera NetWorker. Na przykład "v3/global/backups" lub "v3/global/clients/CLIENT_NUMBER/backups" ze zdefiniowanym zakresem czasu może być używany zamiast używać globalnego "v3/global/backups", aby pobrać wszystkie kopie zapasowe.
Na przykład ogranicz wyniki saveTime między dowolnym określonym zakresem czasu. Przykład zapytania dotyczącego zadań, które zostały ukończone w ciągu ostatnich 24 godzin:
../global/backups Przykład:
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 Przykład:
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
Zapoznaj się z podręcznikiem dla programistów interfejsu API REST dotyczącym wywołań interfejsu API NetWorker, "filtru listy zapytań" (q) i "filtr listy pól" (fl) ustawień.
Debugowanie interfejsu REST API jest zdefiniowane w: NetWorker: Jak włączyć debugowanie
interfejsu API RESTAlternatywnie można użyć następujących testów:
Użyj następujących opcji w poleceniu interfejsu API REST:
| Opcja | Zastosowanie |
--max-time 3600 |
Ustawia twardy limit 3600 sekund (1 godzina) dla całego transferu (DNS, połączenie, TLS, żądanie i treść odpowiedzi). Jeśli cała operacja nie zostanie zakończona w ciągu 1 godziny, curl zatrzyma się z błędem przekroczenia limitu czasu. |
--connect-timeout 60 |
Ogranicza czas przeznaczony na nawiązanie połączenia TCP/TLS do 60 sekund. Jeśli curl nie może nawiązać połączenia w ciągu 60 sekund, próba zakończy się niepowodzeniem. Po włączeniu opcji --retry można spróbować ponownie (zgodnie z poniższymi regułami ponawiania prób). Wartość tę można zmienić według własnego uznania. |
--retry 3 |
Instruuje curl, aby ponowił próbę do trzech razy w przypadku przejściowych błędów. Wartość tę można zmienić według własnego uznania. Typowe wyzwalacze ponawiania prób:
|
--retry-delay 5 |
Ustawia stały czas oczekiwania wynoszący 5 sekund między ponownymi próbami. Po przejściowym niepowodzeniu curl czeka 5 sekund przed następną próbą. Wartość tę można zmienić według własnego uznania. |
-H "X-NW-AUTHC-BASE-URL:REMOTE_AUTHC_SERVER_ADDRESS:9090" |
(Opcjonalnie). Jest to wymagane tylko wtedy, gdy host NetWorker, który jest używany do przetwarzania żądań logowania, jest oddzielony od serwera NetWorker w punkcie końcowym interfejsu API REST. Zobacz: Interfejs API REST NetWorker: Jak korzystać ze zdalnego serwera AUTHC podczas przetwarzania żądań 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 jest parametrem dla programu PowerShell ConvertTo-Json . Kontroluje liczbę poziomów zagnieżdżonych obiektów i tablic, które są uwzględniane, gdy program PowerShell serializuje dane do formatu JSON. Liczba zagnieżdżonych obiektów (jeśli w ogóle występują) może się różnić w zależności od używanego punktu końcowego interfejsu API REST i potencjalnego "filtru listy zapytań" (q) lub "filtr listy pól" (fl) zastosowanych parametrów. 20 powinno być więcej niż wystarczające dla wywołań interfejsu API REST NetWorker.
W powyższym przykładzie utworzono metodę
volumes.json w katalogu, z którego curl.exe został uruchomiony. Zawartość pliku zawiera ładunek interfejsu API REST:
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
Przykład (bez -v dla zwięzłości):
[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
W tym przykładzie plik "volumes.json" został utworzony w tym samym katalogu, z którego uruchomiono polecenie.
Do prawidłowego analizowania formatowania JSON można użyć różnych narzędzi, które mogą się różnić w zależności od systemu operacyjnego i zainstalowanego oprogramowania.
[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
}
}
]
}