NetWorker:REST API 故障处理和分流指南
摘要: 本知识库文章概述了 RESTAPI 相关问题的基本故障处理。
说明
观看 YouTube 视频
其他信息
使用入门
表述性状态转移 (REST) 应用程序编程接口 (API) 提供对 NetWorker 数据保护服务的编程访问。通过使用 REST API,NetWorker 用户可以构建客户端应用程序以自动执行 NetWorker作。NetWorker REST API 作为 NetWorker 服务器安装的一部分安装在与 NetWorker 身份验证服务相同的 Apache Tomcat 容器中。使用与 NetWorker 管理控制台相同的凭据进行身份验证。
REST API 允许与通过统一资源标识符 (URI) 地址标识的资源进行交互。它使用 HTTP 谓词(HEAD、GET、PUT、POST、DELETE)以无状态方式与统一资源标识符 (URI) 交互。服务器不包含客户端状态,每条消息都是自描述的。
本文档介绍如何使用用户编写的 REST API 调用与 NetWorker 资源进行交互。不要与后端 NetWorker作使用的 REST API 调用混淆。
连接到 NetWorker:
有几种不同的 REST API 客户端技术可用于运行连接到 NetWorker 的命令;包括 curl 命令 (Linux)、PowerShell curl.exe (Windows) 和 REST API 客户端浏览器扩展。
连接需要三个标头:
- Content-Type:
application/json - 接受:
application/json - Authorization: Basic with 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。 |
| 204 | PUT 或 DELETE | 空响应 | 无内容。状态指示执行的作成功。但是,没有要提供的其他详细信息。 |
| 错误代码 | 描述 |
| 400 | 错误请求 |
| 401 | 凭据无效 |
| 403 | 权限不足 |
| 404 | 未找到资源 |
| 405 | 不允许的方法 |
| 406 | 指定了无效的区域设置。 |
| 500 | 内部服务器错误 |
REST API 函数
| HTTP 方法 | 操作 | 描述 |
| 获取 | 读取 | 获取资源表示形式。 |
| 发布 | 创建 | 创建新资源。 |
| 把 | 更新 | 更新现有资源。 |
| 删除 | 拔下 | 删除现有资源。 |
一些例子:
GET:
列出所有客户端。
https://[nw-server-hostname]:9090/nwrestapi/v3/global/clients
仅限一个客户端,仅显示三个字段(主机名、存储集和保护组)
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:
{
}
创建新的客户端实例(除列出的四个属性外,所有属性都具有默认值)。
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 服务器名称
- NetWorker 版本和内部版本号
- NetWorker 服务器主机作系统类型和版本
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 服务器呈现daemon.raw日志文件:
- Linux:
/nsr/logs/daemon.raw - Windows:
C:\Program Files\EMC NetWorker\nsr\logs\daemon.raw - NetWorker:如何使用 nsr_render_log
- Linux:
- 来自 NetWorker 服务器的 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) 以将返回的数据减少到所需的特定信息。以上知识库文章详细介绍了这些设置,REST API 开发人员指南中提供了更多信息:Dell Technologies 开发人员
如果问题与 REST API 性能相关,您可以使用以下选项来跟踪 API 调用使用的 nsrtomc+ 进程的资源消耗情况。
Linux:
top -b | awk '/nsrtomc+/ {print strftime("%Y-%m-%d-%H:%M:%S", systime()), $0}'
此输出显示标准顶部输出,但具有人类可读的时间戳。这可用于查看进程的 CPU 和内存消耗,以及在进行 REST 调用时它保持特定状态的时间。这可以与 restapi.log 和 AUTHC 日志进行比较,以查看进行了哪些调用以及频率。
Windows:
对于 Windows 服务器,您必须安装类似于“Performance Monitor:
- 以管理员身份打开 性能监视器 。
- 从左侧窗格中,展开监视工具,然后选择性能监视器。
- 在右窗格中右键单击,然后选择删除所有计数器。
- 在右窗格中右键单击,然后选择Add Counters。
- 在 Available Counters下,展开 Memory,选择 % Commit Bytes,然后单击 Add。
- 在内存下, 选择可用字节,然后单击添加。
- 在Available Counters下,展开Process并选择% Processor Time,在Instances of Selected object下选择第一个 Java 条目,然后单击Add。
- 在可用计数器下,展开处理器信息并选择 处理器实用程序百分比,然后单击 添加。
- 右窗格中的“已添加”计数器应显示:

- 单击 OK。右键单击性能监视器,然后单击新建数据>收集器集。
- 提供名称,例如:
RESTAPI_MON。 - 在位置屏幕上,单击下一步, 除非您选择指定备用输出位置。
- 选择 保存并关闭 ,然后单击 完成。
- 在左侧窗格中 ,在 Data Collector 集 —> 用户定义下,打开
RESTAPI_MON属性,并为日志格式选择逗号分隔,然后单击确定。

- 在左侧窗格中, 在数据收集器集 —> 用户定义下,选择RESTAPI_MON数据收集器集,然后单击开始(播放按钮)
- 如果使用了默认输出位置,则.csv文件将显示在
C:\PerfLogs\Admin\RESTAPI_MON。 - 观察到问题并将其记录在输出文件中后,您可以通过单击“Data Collector 集 - 用户定义”下的“停止”来停止监视单击。