NetWorker REST API: HTTP GET istekleri zaman zaman aşımına uğruyor
Résumé: NetWorker temsili durum aktarımı (REST) uygulama programı arayüzü (API), ortamdaki bir NetWorker Sunucusundan bilgi istemek (HTTP GET) için kullanılır. REST API sorguları zaman zaman zaman zaman aşımına uğruyor ve restapi.log, Yuva Zaman Aşımı nedeniyle dahili bir sunucu hata mesajı gösteriyor. ...
Symptômes
NetWorker Temsili Durum Aktarımı (REST) uygulama programı arayüzü (API), ortamdaki bir NetWorker Sunucusundan bilgi (HTTP GET) istemek için kullanılır. REST API sorguları zaman zaman zaman zaman aşımına uğruyor ve restapi.log, Yuva Zaman Aşımı nedeniyle dahili bir sunucu hata mesajı gösteriyor.
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]
NetWorker Sunucusu REST API'sinde curl komutu şunları gösterir:
[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, "v3/global/backups", "v3/global/jobs", veya "v3/global/volumes" tek başına yoğun kaynak kullanan sorgulardır ve isteğin daha büyük ortamlarda zaman aşımına uğramasına neden olabilir.
NetWorker REST API hizmetleri, Java Sanal Makinesi'nde (JVM) çalıştırılan bir Apache Tomcat Java servlet kapsayıcısında barındırılır. REST API, her isteği işlemek için JVM belleğini kullanır ve yoğun kaynak kullanan bir sorgudan sonra belleğin tamamının serbest bırakılmadığı gösterilmiştir. JVM bellek kullanımındaki artış, daha az kaynak kullanan diğer REST API isteklerinin zaman aşımına uğramasına neden olabilir.
Résolution
NetWorker Sunucusundan bilgi almak için yoğun kaynak kullanımlı istekler kullanmaktan kaçının. Örneğin, "v3/global/backups" veya "v3/global/clients/CLIENT_NUMBER/backups" belirli bir zaman aralığı ile global kullanmak yerine kullanılabilir "v3/global/backups" tüm yedekleri almak için.
Örneğin, saveTime sonuçlarını belirtilen bir zaman aralığı arasında kısıtlayın. Son 24 saat içinde tamamlanan işler için bir sorgu örneği:
../global/backups örnek:
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 örnek:
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
Informations supplémentaires
NetWorker API çağrıları ile ilgili REST API Geliştirici Kılavuzu'nda yer alan "query list filter" (q) ve "alan listesi filtresi" (fl) ayarlarını seçin.
REST API hata ayıklaması şurada tanımlanır: NetWorker: REST API Hata Ayıklamasını
EtkinleştirmeAlternatif olarak aşağıdaki testler kullanılabilir:
REST API komutunda aşağıdaki seçenekleri kullanın:
| Seçenek | Amaç |
--max-time 3600 |
Aktarımın tamamı (DNS, bağlantı, TLS, istek ve yanıt gövdesi) için 3600 saniyelik (1 saat) bir sabit sınır ayarlar. Tüm işlem 1 saat içinde bitmezse, curl bir zaman aşımı hatası ile durur. |
--connect-timeout 60 |
TCP/TLS bağlantısı kurmak için izin verilen süreyi 60 saniyeyle sınırlar. curl 60 saniye içinde bağlanamazsa, bu girişim başarısız olur. --retry etkinleştirildiğinde yeniden deneyebilir (aşağıdaki yeniden deneme kurallarına tabidir). Bu değer sizin takdirinize göre değiştirilebilir. |
--retry 3 |
curl'e geçici hatalarda en fazla üç kez yeniden denemesini söyler. Bu değer sizin takdirinize göre değiştirilebilir. Tipik yeniden deneme tetikleyicileri:
|
--retry-delay 5 |
Yeniden deneme denemeleri arasında 5 saniyelik sabit bir bekleme süresi ayarlar. Geçici bir hatadan sonra, curl bir sonraki denemeden önce 5 saniye bekler. Bu değer sizin takdirinize göre değiştirilebilir. |
-H "X-NW-AUTHC-BASE-URL:REMOTE_AUTHC_SERVER_ADDRESS:9090" |
(İsteğe bağlı.) Bu yalnızca oturum açma isteklerini işlemek için kullanılan NetWorker ana bilgisayarı, REST API uç noktasındaki NetWorker sunucusundan ayrıysa gereklidir. Bkz.: NetWorker REST API: RESTAPI isteklerini işlerken uzak bir AUTHC sunucusu nasıl kullanılır? |
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 , PowerShell'in ConvertTo-Json cmdlet'i kullanın. PowerShell, verilerinizi JSON'a seri hale getirdiğinde kaç düzeyde iç içe nesne ve dizinin dahil edileceğini denetler. İç içe geçmiş nesnelerin sayısı (varsa), kullanılan REST API uç noktasına ve olası "sorgu listesi filtresine" (q) veya "alan listesi filtresi" (fl) kullanılan parametreler. NetWorker REST API çağrıları için 20 fazlası yeterli olacaktır.
Yukarıdaki örnek,
volumes.json dosyasının hangi dizinden alınacağı curl.exe çalıştırıldı. Dosyanın içeriği REST API yükünü içerir:
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
Örnek (olmadan -v Kısalık için):
[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
Bu örnekte, dosya "volumes.json", komutun çalıştırıldığı dizinde oluşturuldu.
Json biçimlendirmesini doğru bir şekilde ayrıştırmak için farklı araçlar kullanılabilir, kullanılan araçlar işletim sistemine ve yüklü yazılıma bağlı olarak değişebilir.
[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
}
}
]
}