NetWorker REST API: HTTP GETリクエストが断続的にタイムアウトする
Summary: NetWorker Representational State Transfer (REST)アプリケーション プログラム インターフェイス(API)は、環境内のNetWorkerサーバからの情報の要求(HTTP GET)に使用されます。REST APIクエリーが断続的にタイムアウトし、ソケット タイムアウトによる内部サーバー エラー メッセージがrestapi.logに表示されます。 ...
Symptoms
NetWorker REST(Representational State Transfer)アプリケーション プログラム インターフェイス(API)は、環境内のNetWorkerサーバーからの情報の要求(HTTP GET)に使用されます。REST APIクエリーが断続的にタイムアウトし、ソケット タイムアウトによる内部サーバー エラー メッセージがrestapi.logに表示されます。
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サーバーREST APIへのcurlコマンドでは、次のように表示されます。
[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"、または "v3/global/volumes" 単独では、リソースを大量に消費するクエリであり、大規模な環境では要求がタイムアウトする可能性があります。
NetWorker REST APIサービスは、JVM(Java仮想マシン)上で実行されるApache Tomcat Javaサーブレット コンテナでホストされます。REST APIは、JVMメモリーを使用してすべてのリクエストを処理しますが、リソースを大量に消費するクエリーの後に、一部のメモリーが解放されるわけではないことが示されています。JVMメモリー使用率が増加すると、最終的に、リソース消費の少ない他のREST API要求がタイムアウトする可能性があります。
Resolution
リソース負荷の高い要求を使用してNetWorkerサーバーから情報を取得することは避けてください。たとえば、"v3/global/backups」または「v3/global/clients/CLIENT_NUMBER/backupsグローバルの「v3/global/backups」をクリックして、すべてのバックアップを取得します。
たとえば、saveTime の結果を指定した時間範囲に制限します。過去 24 時間以内に完了したジョブのクエリの例:
../global/backups 例:
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 例:
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
NetWorker API コールの「 クエリー リスト フィルター」(q)と「フィールドリストフィルター」(fl)設定.
REST APIデバッグは、以下で定義されています。NetWorker:REST APIデバッグを有効にする方法
または、次のテストを使用できます。
REST APIコマンドで次のオプションを使用します。
| オプション | 目的 |
--max-time 3600 |
転送全体(DNS、接続、TLS、要求、応答本文)に対して3600秒(1時間)のハード キャップを設定します。すべての操作が1時間以内に完了しない場合、curlはタイムアウト エラーで停止します。 |
--connect-timeout 60 |
TCP/TLS接続の確立に許可される時間を60秒に制限します。curlが60秒以内に接続できない場合、その試行は失敗します。--retry を有効にすると、再試行できます (以下の再試行ルールに従います)。この値は、ユーザーの裁量に応じて変更できます。 |
--retry 3 |
一時的な障害に対して最大3回再試行するようcurlに指示します。この値は、ユーザーの裁量に応じて変更できます。 一般的な再試行トリガー:
|
--retry-delay 5 |
再試行の間隔を 5 秒の固定待機時間に設定します。一時的な障害の後、curl は次の試行まで 5 秒間待機します。この値は、ユーザーの裁量に応じて変更できます。 |
-H "X-NW-AUTHC-BASE-URL:REMOTE_AUTHC_SERVER_ADDRESS:9090" |
(オプション)これが必要なのは、ログイン要求の処理に使用されるNetWorkerホストが、REST APIエンドポイントのNetWorkerサーバーから分離されている場合のみです。参照: NetWorker REST API: RESTAPI要求の処理時にリモートAUTHCサーバーを使用する方法 |
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 の ConvertTo-Json cmdletを使用して有効化します。これは、PowerShell がデータを JSON にシリアル化するときに含まれる入れ子になったオブジェクトと配列のレベル数を制御します。ネストされたオブジェクトの数(存在する場合)は、使用するREST APIエンドポイントと潜在的な「クエリリストフィルター」(q)または「フィールドリストフィルター」(fl)パラメータを使用します。NetWorker REST APIコールの場合は、20値で十分です。
上記の例では、
volumes.json ファイルが curl.exe が実行されました。ファイルの内容には、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
例( -v 簡潔にするため):
[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
この例では、ファイル「volumes.json" は、コマンドが実行されたのと同じディレクトリに作成されました。
JSONフォーマットを正しく解析するには、さまざまなツールを使用できます。使用するツールは、インストールされているOSやソフトウェアによって異なります。
[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
}
}
]
}