NetWorker: REST API 문제 해결 및 분류 가이드
요약: 이 KB는 RESTAPI 관련 문제에 대한 기본적인 문제 해결의 개요를 제공합니다.
지침
YouTube 시청
추가 정보
시작
REST(Representational State Transfer) API(Application Programming Interface)는 NetWorker 데이터 보호 서비스에 프로그래밍 방식으로 액세스할 수 있도록 지원합니다. NetWorker 사용자는 REST API를 사용하여 클라이언트 애플리케이션을 구축하여 NetWorker 작업을 자동화할 수 있습니다. NetWorker REST API는 NetWorker Authentication Services와 동일한 Apache tomcat 컨테이너에 NetWorker Server 설치 과정의 일부로 설치됩니다. 인증은 NetWorker Management Console에 사용되는 것과 동일한 자격 증명을 사용하여 수행됩니다.
REST API를 사용하면 URI(Uniform Resource Identifier) 주소로 식별되는 리소스와 상호 작용할 수 있습니다. HTTP 동사(HEAD, GET, PUT, POST, DELETE)를 사용하여 상태 비저장 방식으로 URI(Uniform Resource Identifier)와 상호 작용합니다. 서버에는 클라이언트 상태가 없으며 각 메시지는 자체 설명적입니다.
이 문서에서는 사용자가 작성한 REST API 호출을 사용하여 NetWorker 리소스와 상호 작용하는 방법을 다룹니다. 백엔드 NetWorker 작업에 사용되는 REST API 호출과 혼동하지 마십시오.
NetWorker에 연결:
NetWorker에 연결하는 명령을 실행하는 데 사용할 수 있는 REST API 클라이언트 기술은 여러 가지가 있습니다. 포함 curl 명령(Linux), PowerShell curl.exe (Windows) 및 REST API 클라이언트 브라우저 확장.
연결에는 세 가지 헤더가 필요합니다.
- 콘텐츠 유형:
application/json - 받아들일:
application/json - Authorization: Base 64로 인코딩된 기본 사용자 이름 및 암호
단일 NetWorker AUTHC 서버를 통해 인증된 여러 NetWorker 데이터 영역이 있는 환경에서는 추가 헤더가 필요합니다.
X-NW-AUTHC-BASE-URL:AUTHC_HOSTNAME_OR_IP:AUTHC_PORT
NetWorker REST API는 다음 기본 URI로 노출됩니다.
https://[nw-server-hostname]:9090/nwrestapi/v3
API에는 여러 버전이 있습니다. REST API가 처음 구현된 이후 개선 사항이 롤아웃되었습니다. 이러한 엔드포인트에 대한 변경 사항은 https://developer.dell.com/apis/2378/versions/v3/docs/GettingStarted.md 에 자세히 설명되어 있습니다.
전체 json 스키마는 다음에서 사용할 수 있습니다.
https://[nw-server-hostname]:9090/nwrestapi/v3/schemas/swagger.json
| 성공 코드 | 적용 대상 HTTP 메서드 | 응답 본문 내용 | 설명 |
| 200 | 가져오기 | 리소스 표현 | OK라고 보고됩니다. 이 HTTP 상태를 초래하는 작업은 페이로드에 리소스 표현을 전달합니다. |
| 201 | 올리기 | 빈 응답 | 만든. 이 상태는 새 리소스 또는 의도한 작업이 생성되었으며 응답의 위치 헤더에서 연결된 URL에 액세스할 수 있음을 나타냅니다. |
| 202 | 올리기 | 응답의 세부 정보 | 허용. 이는 API 요청이 수락되었음을 나타냅니다. 페이로드는 추적 리소스 인스턴스에 대한 URL이 응답의 location 헤더에서 액세스할 수 있음을 나타냅니다. |
| 204 | PUT 또는 DELETE | 빈 응답 | 콘텐츠가 없습니다. 상태는 수행된 작업이 성공했음을 나타냅니다. 그러나 제공할 추가 세부 정보는 없습니다. |
| 오류 코드 | 설명 |
| 400 | 잘못된 요청 |
| 401 | 잘못된 자격 증명 |
| 403 | 권한 부족 |
| 404 | 리소스를 찾을 수 없음 |
| 405 | 허용되지 않는 방법 |
| 406 | 잘못된 로캘이 지정되었습니다. |
| 500 | 내부 서버 오류 |
REST API 기능
| HTTP 메서드 | 동작 | 설명 |
| 가져오기 | 읽기 | 리소스 표현을 가져옵니다. |
| 올리기 | 생성 | 새 리소스를 생성합니다. |
| 넣어 | 업데이트 | 기존 리소스를 업데이트합니다. |
| 삭제 | 제거 | 기존 리소스를 삭제합니다. |
몇 가지 예:
GET:
모든 클라이언트를 나열합니다.
https://[nw-server-hostname]:9090/nwrestapi/v3/global/clients
하나의 클라이언트만, 3개의 필드(hostname, saveSets 및 protectionGroups)만 표시
https://[nw-server-hostname]:9090/nwrestapi/v3/global/clients?fl=hostname,saveSets,protectionGroups&q=hostname:nwserver121
하나의 클라이언트가 속한 보호 그룹을 나열합니다.
https://[nw-server-hostname]:9090/nwrestapi/v3/global/clients?fl=protectionGroups&q=hostname:nwserver121
현재 알림을 표시합니다.
https://[nw-server-hostname]:9090/nwrestapi/v3/global/alerts
최근에 실패한 작업을 표시합니다.
https://[nw-server-hostname]:9090/nwrestapi/v3/global/jobs?q=completionStatus:"Failed"&fl=clientHostname,startTime,name,message
하나의 정책(이 예에서는 WinFS )에 워크플로를 나열합니다.
https://[nw-server-hostname]:9090/nwrestapi/v3/global/protectionpolicies/WinFS/workflows
(클라이언트 호스트 이름 및 세이브 세트에 정의된 대로) 한 세이브 세트 인스턴스의 속성만 나열합니다.
https://[nw-server-hostname]:9090/nwrestapi/v3/global/clients?q=hostname:vm-lego-231 and saveSets:"/etc"
올리기:
워크플로우 작업을 시작합니다.
https://[nw-server-hostname]:9090/nwrestapi/v3/global/protectionpolicies/Angela/workflows/WinFS/op/backup
JSON Body:
{
}
새 클라이언트 인스턴스를 생성합니다(나열된 4개를 제외한 모든 속성에 기본값 사용).
https://[nw-server-hostname]:9090/nwrestapi/v3/global/clients
JSON Body
{
"hostname": "vm-lego-231",
"backupType": "Filesystem",
"saveSets": [ "/etc" ],
"protectionGroups" : [ "LinuxFS" ]
명령줄 예제:
Linux:
시스템에 python 설치 시:
curl -k -u Administrator:'ADMINISTRATOR_PASSWORD' https://NETWORKER_SERVER_ADDRESS:9090/nwrestapi/v3/global/ENDPOINT | python -m json.tool
jq 설치 시:
curl -k -u Administrator:'ADMINISTRATOR_PASSWORD' https://NETWORKER_SERVER_ADDRESS:9090/nwrestapi/v3/global/ENDPOINT | jq
[root@nsr ~]# curl -k -u Administrator https://nsr.amer.lan:9090/nwrestapi/v3/global/devices/ddve01.amer.lan_VMBackupDevice01 | jq
Enter host password for user 'Administrator':
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2820 0 2820 0 0 72307 0 --:--:-- --:--:-- --:--:-- 72307
{
"accessWeight": 1,
"accesses": "66",
"activeSessions": [],
"autoMediaManagement": false,
"autoRecoverDtf": "None",
"cdi": "NotUsed",
"cleaningRequired": false,
"consecutiveErrors": "0",
"currentNSRMMDCount": "1",
"dataDomainFibreChannel": false,
"dataDomainRetentionLockMode": "None",
"deviceAccessInfo": "ddve01.amer.lan:/nsr/VMBackupDevice01",
"deviceBlockSize": "HandlerDefault",
"dltWormCapable": false,
"idleDeviceTimeout": 0,
"jukeboxDevice": "No",
"links": [
{
"href": "https://nsr.amer.lan:9090/nwrestapi/v3/global/devices/ddve01.amer.lan_VMBackupDevice01/opstatus",
"title": "Volume operation status"
},
{
"href": "https://nsr.amer.lan:9090/nwrestapi/v3/global/devices/ddve01.amer.lan_VMBackupDevice01/op/label",
"title": "Label volume"
},
{
"href": "https://nsr.amer.lan:9090/nwrestapi/v3/global/devices/ddve01.amer.lan_VMBackupDevice01/op/mount",
"title": "Mount volume"
},
{
"href": "https://nsr.amer.lan:9090/nwrestapi/v3/global/devices/ddve01.amer.lan_VMBackupDevice01/op/unmount",
"title": "Unmount volume"
},
{
"href": "https://nsr.amer.lan:9090/nwrestapi/v3/global/devices/ddve01.amer.lan_VMBackupDevice01/op/verifylabel",
"title": "Verify volume label"
},
{
"href": "https://nsr.amer.lan:9090/nwrestapi/v3/global/devices/ddve01.amer.lan_VMBackupDevice01/op/erase",
"title": "Erase the device"
},
{
"href": "https://nsr.amer.lan:9090/nwrestapi/v3/global/volumes/4267924096",
"title": "Volume"
}
],
"longVolumeId": "703cdc60-00000005-fe635a80-66635a80-00045000-592bbe56",
"maxConsecutiveErrors": 20,
"maxNsrmmdCount": 4,
"maxSession": 60,
"mediaFamily": "Disk",
"mediaType": "Data Domain",
"message": "mounted Data Domain disk VMBackupPool.001",
"mountedVolume": "VMBackupPool.001",
"name": "ddve01.amer.lan_VMBackupDevice01",
"ndmp": false,
"operationParameters": [],
"password": "*******",
"pathId": "53f9269d-00000010-e2f994bd-66635a7e-00035000-592bbe56",
"readOnly": false,
"remoteUser": "ddboost",
"reserveRelease": "None",
"resourceId": {
"id": "178.0.90.20.0.0.0.0.196.80.99.102.192.168.9.150",
"sequence": 256
},
"saveLockout": 0,
"saveMountTimeout": 30,
"secureMultiTenancy": false,
"sharedDevices": "Done",
"statistics": [
"elapsed = 17310",
"errors = 0",
"last rate = 0",
"max clients = 0",
"file marks = 0",
"rewinds = 0",
"files skipped = 0",
"records skipped = 0",
"current file = 0",
"current record = 0",
"seek files = 0",
"seek records = 0",
"estimated kb = 0",
"amount kb = 0",
"file amount kb = 0",
"sessions = 0"
],
"status": "Enabled",
"suspectedDevice": false,
"tapeAlertsCritical": [],
"tapeAlertsInformation": [],
"tapeAlertsWarning": [],
"targetSession": 20,
"unlabeledVolumeLoaded": false,
"verifyLabelOnEject": false,
"volumeBlockSize": "256 KB",
"volumeCurrentCapacity": "0 KB",
"volumeErrorNumber": "0",
"volumeExpiration": "Sun Jun 7 15:07:44 2026",
"volumeId": "4267924096",
"volumeLabel": "VMBackupPool.001",
"volumePool": "VMBackupPool",
"warnOnSuspectVolumesInPercent": 80,
"wormCapable": false,
"wormCartridgePresent": false,
"writeEnabled": true
}
[root@nsr ~]#
Windows(PowerShell):
curl.exe -k -u Administrator:'ADMISTRATOR_PASSWORD' "https://NETWORKER_SERVER_ADDRESS:9090/nwrestapi/v3/global/ENDPOINT" | ConvertFrom-Json | ConvertTo-Json -Depth 50
예:
PS C:\Users\Administrator.NETWORKER> curl.exe -k -u Administrator:'!Password1' "https://win-srvr02.networker.lan:9090/nwrestapi/v3/global/devices/dd3300-ff28_Backup" | ConvertFrom-Json | ConvertTo-Json -Depth 50
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2824 0 2824 0 0 20311 0 --:--:-- --:--:-- --:--:-- 21074
{
"accessWeight": 1,
"accesses": "45",
"activeSessions": [
],
"autoMediaManagement": false,
"autoRecoverDtf": "None",
"cdi": "NotUsed",
"cleaningRequired": false,
"consecutiveErrors": "0",
"currentNSRMMDCount": "1",
"dataDomainFibreChannel": false,
"dataDomainRetentionLockMode": "None",
"deviceAccessInfo": "dd3300-ff28:/win-srvr02/Backup",
"deviceBlockSize": "HandlerDefault",
"dltWormCapable": false,
"idleDeviceTimeout": 0,
"jukeboxDevice": "No",
"links": [
{
"href": "https://win-srvr02.networker.lan:9090/nwrestapi/v3/global/devices/dd3300-ff28_Backup/opstatus",
"title": "Volume operation status"
},
{
"href": "https://win-srvr02.networker.lan:9090/nwrestapi/v3/global/devices/dd3300-ff28_Backup/op/label",
"title": "Label volume"
},
{
"href": "https://win-srvr02.networker.lan:9090/nwrestapi/v3/global/devices/dd3300-ff28_Backup/op/mount",
"title": "Mount volume"
},
{
"href": "https://win-srvr02.networker.lan:9090/nwrestapi/v3/global/devices/dd3300-ff28_Backup/op/unmount",
"title": "Unmount volume"
},
{
"href": "https://win-srvr02.networker.lan:9090/nwrestapi/v3/global/devices/dd3300-ff28_Backup/op/verifylabel",
"title": "Verify volume label"
},
{
"href": "https://win-srvr02.networker.lan:9090/nwrestapi/v3/global/devices/dd3300-ff28_Backup/op/erase",
"title": "Erase the device"
},
{
"href": "https://win-srvr02.networker.lan:9090/nwrestapi/v3/global/volumes/3963713",
"title": "Volume"
}
],
"longVolumeId": "0aea479c-00000005-003c7b41-693c7b41-00025000-e6b5bb56",
"maxConsecutiveErrors": 20,
"maxNsrmmdCount": 4,
"maxSession": 60,
"mediaFamily": "Disk",
"mediaType": "Data Domain",
"message": "writing, done",
"mountedVolume": "win_srvr02.networker.lan.dddefault.001",
"name": "dd3300-ff28_Backup",
"ndmp": false,
"operationParameters": [
],
"password": "*******",
"pathId": "a30a7858-00000010-5ded760e-693c7b41-00015000-e6b5bb56",
"readOnly": false,
"remoteUser": "loudekboost",
"reserveRelease": "None",
"resourceId": {
"id": "176.0.164.7.0.0.0.0.69.121.60.105.192.168.0.22",
"sequence": 100
},
"saveLockout": 0,
"saveMountTimeout": 30,
"secureMultiTenancy": false,
"sharedDevices": "Done",
"statistics": [
"elapsed = 228514",
"errors = 0",
"last rate = 0",
"max clients = 0",
"file marks = 0",
"rewinds = 0",
"files skipped = 0",
"records skipped = 0",
"current file = 0",
"current record = 0",
"seek files = 0",
"seek records = 0",
"estimated kb = 0",
"amount kb = 0",
"file amount kb = 52206",
"sessions = 0"
],
"status": "Enabled",
"suspectedDevice": false,
"tapeAlertsCritical": [
],
"tapeAlertsInformation": [
],
"tapeAlertsWarning": [
],
"targetSession": 20,
"unlabeledVolumeLoaded": false,
"verifyLabelOnEject": false,
"volumeBlockSize": "256 KB",
"volumeCurrentCapacity": "0 KB",
"volumeErrorNumber": "0",
"volumeExpiration": "Sun Dec 12 15:29:53 2027",
"volumeId": "3963713",
"volumeLabel": "win_srvr02.networker.lan.dddefault.001",
"volumePool": "Data Domain Default",
"warnOnSuspectVolumesInPercent": 80,
"wormCapable": false,
"wormCartridgePresent": false,
"writeEnabled": true
}
지원에 필요한 정보
환경:
- NetWorker Server 이름
- NetWorker 버전 및 빌드 번호
- NetWorker Server 호스트 운영 체제 유형 및 버전
hostname
strings /usr/sbin/nsrd | grep -i "(#)"
cat /etc/*release
uname -a
Windows:
nsrwatch
문제 세부 정보:
- 수행 중인 REST API 작업(GET, POST, PUT, DELETE), 사용된 URI, JSON 본문 내용(해당하는 경우)을 설명합니다.
- REST API 응답 코드 및 제공된 모든 오류 메시지
- REST API 클라이언트와 NetWorker 간의 초기 연결 및 권한 부여가 성공했습니까?
로그 수집:
- NetWorker Server에서 렌더링된 daemon.raw 로그 파일:
- Linux:
/nsr/logs/daemon.raw - Windows:
C:\Program Files\EMC NetWorker\nsr\logs\daemon.raw - NetWorker: nsr_render_log 사용 방법
- Linux:
- NetWorker Server의 REST API 로그:
/nsr/logs/restapi(Linux) 또는EMC NetWorker\nsr\logs\restapi(윈도우) - 인증 문제는 표준 NetWorker 인증 로그인을 참조하십시오
/nsr/authc/logs(Linux) 또는..\EMC NetWorker\nsr\authc-server\tomcat\logs(윈도우)
디버그:
성능:
REST API 성능 관련 문제를 평가하기 전에 문제가 모든 REST API 기능에서 관찰되는지 아니면 특정 기능에서 관찰되는지 확인하는 것이 중요합니다. 예를 들어 클라이언트, 작업, 볼륨 등과 같은 글로벌 엔드포인트에 대한 GET 요청은 많은 데이터를 가져올 수 있습니다. 이러한 유형의 요청으로 인해 시스템 리소스 사용률이 높아지고 시간 초과가 발생할 수 있습니다.
참조: NetWorker REST API: HTTP GET 요청이 간헐적으로 시간 초과됨
대규모 글로벌 엔드포인트에서 성능 문제가 관찰되면 "쿼리 목록 필터"(q) 또는 "필드 목록 필터"(fl)을 사용하여 필요한 특정 정보로 반환되는 데이터를 줄일 수 있습니다. 위의 KB에서는 이러한 설정을 자세히 설명하며 추가 정보는 REST API 개발자 가이드에서 확인할 수 있습니다. Dell Technologies 개발자
문제가 REST API 성능과 관련된 경우 다음 옵션을 사용하여 API 호출에 사용되는 nsrtomc+ 프로세스의 리소스 사용량을 추적할 수 있습니다.
리눅스:
top -b | awk '/nsrtomc+/ {print strftime("%Y-%m-%d-%H:%M:%S", systime()), $0}'
이 출력은 표준 상위 출력을 표시하지만 사람이 읽을 수 있는 타임스탬프가 있습니다. 이는 프로세스의 CPU 및 메모리 사용량과 REST 호출이 수행되었을 때 특정 상태에 머무른 시간을 검토하는 데 사용할 수 있습니다. 이 정보를 restapi.log 및 AUTHC 로그와 비교하여 어떤 통화가 얼마나 자주 이루어졌는지 확인할 수 있습니다.
Windows:
Windows 서버의 경우 "성능 모니터:
- Performance Monitor를 Administrator 권한으로 엽니다.
- 왼쪽 창에서 모니터링 툴을 확장하고 성능 모니터를 선택합니다.
- 오른쪽 창 내부를 마우스 오른쪽 버튼으로 클릭하고 Remove all Counters를 선택합니다.
- 오른쪽 창 내부를 마우스 오른쪽 버튼으로 클릭하고 카운터 추가를 선택합니다.
- Available Counters에서 Memory를 확장하고 % Commit Bytes를 선택한 다음 Add를 클릭합니다.
- 메모리에서 사용 가능한 바이트를 선택하고 추가를 클릭합니다.
- Available Counters에서 Process를 확장하고 % Processor Time을 선택한 다음 Instances of Selected object에서 첫 번째 Java 항목을 선택하고 Add를 클릭합니다.
- 사용 가능한 카운터에서프로세서 정보를 확장하고 % 프로세서 유틸리티를 선택한 다음 추가를 클릭합니다.
- 오른쪽 창의 Added counters에 다음이 표시되어야 합니다.

- OK를 클릭합니다. 성능 모니터를 마우스 오른쪽 단추로 클릭하고 새> 데이터 수집기 집합을 클릭합니다.
- 이름을 입력합니다. 예를 들면 다음과 같습니다.
RESTAPI_MON파일의 무결성을 확인합니다. - 위치 화면에서 대체 출력 위치를 지정하도록 선택하지 않은 경우 다음을 클릭합니다.
- 저장 및 닫기를 선택하고 마침을 클릭합니다.
- 왼쪽 창의 Data Collector Sets-User> Defined에서
RESTAPI_MONproperties를 선택하고 로그 형식으로 Comma Separified를 선택한 다음 Ok를 클릭합니다.

- 왼쪽 창의 데이터 수집기 집합->사용자 정의 아래에서 RESTAPI_MON 데이터 수집기 집합을 선택하고 시작(재생 단추)을 클릭합니다.
- 기본 출력 위치를 사용한 경우 .csv 파일이
C:\PerfLogs\Admin\RESTAPI_MON파일의 무결성을 확인합니다. - 문제가 관찰되고 출력 파일에 기록되면 Data Collector Sets-User Defined에서 Stop을 클릭하여 모니터링을 중지할 수 있습니다.