NetWorker: Посібник з усунення несправностей та сортування REST API
Summary: Ця база даних надає огляд базового усунення несправностей, пов'язаних із RESTAPI.
Instructions
Дивіться на YouTube
Additional Information
Початок
Інтерфейс програмування репрезентативного стану (REST) забезпечує програмний доступ до сервісу захисту даних NetWorker. Використовуючи REST API, користувачі NetWorker можуть створювати клієнтські додатки для автоматизації операцій NetWorker. API NetWorker REST встановлюється як частина встановлення сервера NetWorker у тому ж контейнері Apache tomcat, що й сервіси автентифікації NetWorker. Автентифікація здійснюється за допомогою тих самих облікових даних, що й у NetWorker Management Console.
REST API дозволяє взаємодіяти з ресурсами, ідентифікованими за адресами Uniform Resource Identifier (URI). Він використовує HTTP-дієслова (HEAD, GET, PUT, POST, DELETE) для взаємодії з уніфікованим ідентифікатором ресурсу (URI) у безстанному режимі. Сервер не містить клієнтського стану, кожне повідомлення є самоописовим.
Цей документ розглядає взаємодію з ресурсами NetWorker за допомогою користувацьких REST API-викликів. Не плутати з REST API-викликами, які використовуються бекенд-операціями NetWorker.
Підключення до NetWorker:
Існує кілька різних клієнтських технологій REST API, які можна використовувати для виконання команд для підключення до NetWorker; зокрема, curl команди (Linux), PowerShell curl.exe (Windows) та розширення браузера REST API.
Для підключення потрібні три заголовки:
- Тип контенту:
application/json - Прийняти:
application/json - Авторизація: Basic з кодуванням імені користувача та паролем Base 64
У середовищах, де кілька зон даних NetWorker автентифікуються через один сервер NetWorker AUTHC, потрібен додатковий заголовок:
X-NW-AUTHC-BASE-URL:AUTHC_HOSTNAME_OR_IP:AUTHC_PORT
API NetWorker REST доступний у наступному базовому 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 | ІДИ | Представлення ресурсів | ГАРАЗД. Операції, що призводять до цього HTTP-стану, несуть представлення ресурсу у корисному навантаженні. |
| 201 | ДОПИС | Порожня відповідь | Створений. Цей статус означає, що створено новий ресурс або заплановане завдання, і відповідна URL доступна з заголовка розташування у відповіді. |
| 202 | ДОПИС | Деталі у відповідь | Прийнято. Це означає, що запит API прийнято. Корисне навантаження вказує, що URL екземпляра ресурсу відстеження доступний із заголовка розташування у відповіді. |
| 204 | ДОДАТИ АБО ВИДАЛИТИ | Порожня відповідь | Без контенту. Стан вказує, що операція була успішною. Однак додаткових деталей не надається. |
| Код помилки | Опис |
| 400 | Поганий запит |
| 401 | Недійсні облікові дані |
| 403 | Недостатні привілеї |
| 404 | Ресурс не знайдено |
| 405 | Метод заборонений |
| 406 | Вказано неправильне місцезнаходження. |
| 500 | Помилка внутрішнього сервера |
Функції REST API
| Метод HTTP | Бойові дії | Опис |
| ІДИ | Читати | Отримує представлення ресурсів. |
| ДОПИС | Створити | Створює новий ресурс. |
| PUT | Оновлення | Оновлює існуючий ресурс. |
| ВИДАЛИТИ | Видалити | Видаляє існуючий ресурс. |
Декілька прикладів:
GET:
Перелічіть усіх клієнтів.
https://[nw-server-hostname]:9090/nwrestapi/v3/global/clients
Лише один клієнт, який показує лише три поля (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:
{
}
Створіть новий екземпляр клієнта (з значеннями за замовчуванням для всіх властивостей, крім чотирьох, зазначених).
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
Вікна:
nsrwatch
Деталі випуску:
- Поясніть, яка операція REST API виконується (GET, POST, PUT, DELETE), який URI використовується, будь-який вміст тіла JSON (де це застосовно).
- Код відповіді REST API та будь-яке повідомлення про помилку.
- Чи вдалося початкове з'єднання та авторизація між клієнтом REST API та NetWorker?
Збір журналів:
- Відтворено daemon.raw файл журналу з сервера NetWorker:
- Linux:
/nsr/logs/daemon.raw - Вікна:
C:\Program Files\EMC NetWorker\nsr\logs\daemon.raw - NetWorker: Як користуватися nsr_render_log
- Linux:
- Журнали REST API з сервера NetWorker:
/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-запити на глобальних кінцевих точках, таких як клієнти, завдання, томи тощо, можуть отримувати багато даних. Такі запити можуть призводити до високого використання системних ресурсів і тайм-аутів.
Див. також: REST API NetWorker: Запити HTTP GET періодично виходять за межами часу
Коли на великих глобальних кінцевих точках спостерігаються проблеми з продуктивністю, рекомендується використовувати «фільтр списку запитів» (q) або «фільтр списку полів» (fl) щоб зменшити кількість повернених даних до конкретної необхідної інформації. Наведена вище база даних детально описує ці налаштування, а додаткова інформація доступна в Посібнику розробника REST API: Розробник
Dell TechnologiesЯкщо проблема пов'язана з продуктивністю REST API, ви можете скористатися наступними опціями для відстеження споживання ресурсів процесу nsrtomc+, який використовується викликами API.
Linux:
top -b | awk '/nsrtomc+/ {print strftime("%Y-%m-%d-%H:%M:%S", systime()), $0}'
Цей вихід показує стандартний максимальний вихід, але з часовими позначками, які можна читати людині. Це можна використовувати для оцінки споживання процесора та пам'яті процесом, а також для того, як довго він перебував у певному стані під час виконання REST-виклику. Це можна порівняти з журналами restapi.log та AUTHC, щоб побачити, які дзвінки здійснювалися і як часто.
Вікна:
Для серверів Windows потрібно встановити щось на кшталт «Performance Monitor:
- Відкрийте монітор продуктивності як адміністратор.
- З лівої панелі розгорніть Monitoring Tools і виберіть Performance Monitor.
- Клацніть правою кнопкою миші всередині правої панелі та виберіть Видалити всі лічильники.
- Клацніть правою кнопкою миші всередині правої панелі та виберіть Add Counters.
- У розділі Доступні лічильники розгорніть пам'ять, виберіть % Commit Bytes і натисніть Додати.
- У розділі «Пам'ять» виберіть «Доступні байти» та натисніть «Додати».
- У розділі «Доступні лічильники» розгорніть «Процес» і виберіть % часу процесора, а в розділі «Екземпляри обраного об'єкта» виберіть перший запис у Java, натисніть «Додати».
- У розділі «Доступні лічильники» розгорніть інформацію про процесор і виберіть % утиліти процесора, натисніть «Додати».
- Додані лічильники на правій панелі мають показувати:

- Натисніть OK. Клацніть правою кнопкою миші на Performance Monitor і виберіть New-Data> Collector Set.
- Наведіть ім'я, наприклад:
RESTAPI_MON. - На екрані розташування натисніть Далі, якщо ви не вкажете альтернативне місце для виходу.
- Виберіть Зберегти і закрити , і натисніть Закінчити.
- У лівій панелі під Data Collector Sets-User> Defined відкрийте
RESTAPI_MONвластивості та виберіть Кому Розділена для формату журналу, натисніть Ок.

- У лівій панелі під розділом Data Collector Sets-User>Defined виберіть RESTAPI_MON набір зборника даних і натисніть Start (Відтворити кнопку)
- Якщо використовувалося стандартне місце виходу, файл .csv з'являється у розділі
C:\PerfLogs\Admin\RESTAPI_MON. - Після того, як проблема буде виявлена і зафіксована у вихідному файлі, ви можете припинити моніторинг, натиснувши Stop у розділі Data Collector Sets-User Defined.