La funzionalità ODS (Online Diagnostic System) automatizza il debug di NSX al runtime. L'ODS viene implementato tramite runbook integrati in NSX. I runbook contengono procedure di debug e hanno la completa osservabilità dei componenti di NSX. Un runbook genera un report di debug. Genera inoltre artefatti di runtime di un problema, come l'acquisizione di pacchetti, il dump principale in tempo reale del processo utente e l'output di script e strumenti. Questi artefatti possono essere raccolti in un secondo momento e utilizzati per l'analisi e il debug offline. Si noti che non è possibile modificare un runbook predefinito.
È possibile utilizzare le API per eseguire le seguenti operazioni con i runbook:
- Richiamare un runbook per avviare il debug di runtime
- Controllare il report di debug
- Scaricare gli artefatti generati dal runbook richiamato
- Gestire il ciclo di vita di un runbook
Runbook predefiniti
A partire da NSX 4.1.1, ODS è supportato anche per Unified Appliance (UA). Nella tabella seguente sono elencati i runbook e anche i nodi in cui è possibile eseguirli.
Runbook | Descrizione | Nodo | Versione | |
---|---|---|---|---|
PnicPerf | Questo runbook può identificare i problemi relativi alle prestazioni di pNIC Tx e Rx. Questo runbook accetta l'ID della porta logica da diagnosticare come argomento di input. |
ESXi | 4.1 | |
OverlayTunnel | Questo runbook può identificare gli errori del tunnel di overlay, ad esempio un errore di configurazione del gateway, un tunnel mancante o unl tunnel inattivo. Questo runbook accetta come argomenti di input l'indirizzo IP del VTEP di origine e l'indirizzo IP del VTEP di destinazione. |
ESXi | 4.1 | |
PortBlock | Questo runbook può identificare le cause del blocco di una porta, ad esempio se una DVPort è bloccata a causa di una configurazione LSP/LS errata. | ESXi | 4.1 | |
AdfCollect | Questo runbook raccoglie i dati delle prestazioni del percorso dati ESXi tramite l'agente di raccolta ADF. Questo runbook accetta i seguenti argomenti di input:
|
ESXi | 4.1 | |
ControllerConn | Questo runbook può identificare i problemi di connettività del controller causati da un errore del controller, da un errore del proxy, da un'interruzione della rete underlay o da un errore di risoluzione del nome di dominio completo (FQDN). Questo runbook accetta come argomenti di input l'indirizzo IP dell'host ESXi e l'indirizzo IP del controller. |
ESXi | 4.1 | |
NxgiPlatform | Questo runbook diagnostica i problemi nel percorso dati della piattaforma NXGI che alimenta varie funzionalità, come MPS distribuito, protezione endpoint, IDFW, IDS e Intelligence. Questo runbook accetta la funzionalità come argomento di input. Questa è la funzionalità specifica dipendente da NXGI (una da MPS, IDFW, IDS, EPP e Intelligence con EPP come impostazione predefinita) che deve essere verificata o sottoposta a debug. |
ESXi | 4.1.1 | |
VifInfo | Questo runbook ottiene informazioni dettagliate su un'interfaccia virtuale, che può essere utilizzata come input per altri runbook. Questo runbook accetta VIF come argomento di input. |
ESXi | 4.1.1 | |
EdgeHealth |
Questo runbook esegue le seguenti funzioni:
Questo runbook non include alcun argomento di input. |
Edge | 4.1.1 | |
MacAddressInfo |
Questo runbook diagnostica i problemi relativi a un indirizzo MAC specifico, nonché controlla e corregge i problemi relativi alle prestazioni in un commutatore host e svolge le seguenti funzioni:
Questo runbook accetta il nome del commutatore host e l'indirizzo MAC come argomenti di input. |
ESXi | 4.1.1 | |
EdgeDpBfd | Questo runbook esegue una verifica dei problemi di BFD di NSX Edge. Questo runbook accetta l'IP di origine e l'IP di destinazione della sessione BFD come argomenti di input. Accetta inoltre capture come argomento facoltativo per garantire che vengano filtrati e acquisiti solo i pacchetti BFD specifici della sessione. |
Edge | 4.1.1 | |
DistributedMps | Questo runbook verifica l'integrità della pipeline del servizio di prevenzione malware (MPS) e diagnostica gli eventuali problemi rilevati con MPS, ad esempio la protezione non funzionante in una determinata macchina virtuale o la mancata scansione di alcuni file. L'argomento di input per questo runbook è l'UUID della macchina virtuale da diagnosticare per la protezione. |
ESXi | 4.1.1 | |
DuplicateVtepDetectorProvider | Questo runbook rileva qualsiasi IP o etichetta duplicati nei VTEP. Questo runbook non include alcun argomento di input. |
UA | 4.1.1 | |
LspStaleInfo | Questo runbook recupera le porte logiche obsolete. Questo runbook non include alcun argomento di input. |
UA | ||
BgpNeighborState | Questo runbook diagnostica vari flussi che possono causare l'inattività del router adiacente BGP. Il runbook raccoglie anche i seguenti artefatti di supporto per il debug offline.
Questo runbook accetta i seguenti argomenti di input:
|
Edge | 4.1.1 | |
PimMrouteState | Questo runbook esegue la valutazione della perdita di traffico multicast che può verificarsi a causa di vari motivi. Dato un IP di origine del mittente del traffico multicast e l'IP del gruppo del traffico multicast, questo runbook consente di identificare la causa principale del problema e raccogliere gli artefatti di supporto per il debug offline. Questo runbook accetta l'IP di origine, l'IP del gruppo e la direzione del traffico come argomenti di input. |
Edge | 4.1.1 | |
OspfNbrState | Questo runbook esegue la valutazione dei problemi relativi allo stato del router adiacente OSPF diagnosticando vari flussi logici. Questo runbook accetta l'indirizzo IP del router adiacente come argomento di input. |
Edge | 4.1.1 | |
IdpsDpStatus | Questo runbook verifica lo stato del modulo IDPS/IDS (motore nel contesto) e del motore IDPS. Esso inoltre confronta i profili caricati, le regole, le firme e gli eventi acquisiti nel modulo IDPS e nel modulo del motore IDPS. Questo runbook non include alcun argomento di input. |
ESXi | 4.1.1 | |
NxgiPlatformUA | Questo runbook diagnostica i problemi nel piano di gestione per la piattaforma NXGI, che alimenta varie funzionalità quali MPS distribuito, protezione endpoint, IDFW, IDS e Intelligence. Questo runbook può essere utilizzato in combinazione con il runbook NxgiPlatform eseguito nei nodi di trasporto. Questo runbook accetta l'ID del nodo di trasporto come argomento di input facoltativo. |
UA | 4.1.1 | |
CorfuServer | Questo runbook verifica la stabilità del layout del server Corfu, la condizione di ping infrastruttura e I/O del disco e l'integrità del compattatore. Per sovrascrivere i valori predefiniti di giorni o ore degli eventi di registro precedenti, questo runbook richiede giorni di lookback e ore di lookback come argomenti di input. |
UA | 4.1.1 | |
EdgeIDPS | Questo runbook controlla e recupera le statistiche per la firma IDS/IPS presente nell'Edge. Questo runbook accetta l'ID firma come argomento di input. |
Edge | 4.1.1 | |
EdgeRouting | Questo runbook verifica più aspetti dell'integrità di un determinato router logico e fornisce un elenco di processi Edge non integri. Il runbook fornisce indicazioni per la risoluzione dei problemi più comuni del routing nord/sud. Il runbook raccoglie varie informazioni e segnala lo stato dei protocolli di routing, dei tunnel e delle porte. Eseguirà un controllo dell'integrità dello stack di routing e dei vari daemon utilizzati dal routing nell'Edge. Per l'IP di destinazione specificato, controlla le tabelle RIB, FIB e ARP. Eseguirà inoltre un ping e un traceroute utilizzando l'IP di origine e di destinazione.
Questo runbook accetta i seguenti argomenti di input:
|
Edge | 4.1.1 | |
PimConfigCheck |
Questo runbook fornisce ulteriori dettagli sull'errore esatto quando l'Edge genera routing_config_error. Esso inoltre aiuta a individuare il problema. Questo runbook non include alcun argomento di input. |
Edge | 4.1.1 | |
NCPPendingPod | Questo runbook esegue il debug di un pod bloccato in uno stato in sospeso. Questo runbook accetta come argomenti di input lo spazio dei nomi e il nome del pod in sospeso. |
ESXi | 4.1.2 |
Passaggi per il debug in fase di runtime
Per eseguire il debug al runtime, eseguire i passaggi seguenti:
- Passaggio 1: recuperare un elenco di runbook predefiniti.
-
Eseguire l'API seguente per recuperare un elenco di runbook predefiniti.
GET https://<nsx-mgr>/policy/api/v1/infra/sha/pre-defined-runbooks
Questa API restituisce un elenco di runbook predefiniti insieme alle seguenti informazioni:
- Dettagli della configurazione.
- Tipo di nodo in cui è supportato il runbook.
- Dettagli generali del runbook quali ID, nome e percorso.
- Dettagli dei parametri se necessari al momento del richiamo del runbook.
Risposta di esempio:
{ "results": [ { "version": { "major": 1, "minor": 0 }, "default_config": { "enabled": true, "timeout": 300, "threshold_number": 5, "throttle_cycle": 10 }, "supported_node_types": [ "nsx-esx" ], "parameters": [ { "name": "advanced", "optional": true, "parameter_type": "BOOLEAN", "default_value": "False" }, { "name": "cycle", "optional": false, "parameter_type": "INTEGER", "max": "20", "min": "1" }, { "name": "interval", "optional": true, "parameter_type": "INTEGER", "max": "300", "min": "1" } ], "resource_type": "OdsPredefinedRunbook", "id": "00000000-0000-4164-6643-6f6c6c656374", "display_name": "AdfCollect", "path": "/infra/sha/pre-defined-runbooks/00000000-0000-4164-6643-6f6c6c656374", "relative_path": "00000000-0000-4164-6643-6f6c6c656374", "parent_path": "/infra", "remote_path": "", "unique_id": "069a4c7b-532a-4926-a402-6a7986a306b2", "realization_id": "069a4c7b-532a-4926-a402-6a7986a306b2", "owner_id": "f2a2a9e1-2578-435d-877d-47e01eb04954", "origin_site_id": "f2a2a9e1-2578-435d-877d-47e01eb04954", "marked_for_delete": false, "overridden": false, "_create_time": 1669600880454, "_create_user": "system", "_last_modified_time": 1669600880454, "_last_modified_user": "system", "_system_owned": false, "_revision": 0 }, { "version": { "major": 1, "minor": 0 }, "default_config": { "enabled": true, "timeout": 60, "threshold_number": 5, "throttle_cycle": 3 }, "supported_node_types": [ "nsx-esx" ], "resource_type": "OdsPredefinedRunbook", "id": "0000436f-6e74-726f-6c6c-6572436f6e6e", "display_name": "ControllerConn", "path": "/infra/sha/pre-defined-runbooks/0000436f-6e74-726f-6c6c-6572436f6e6e", "relative_path": "0000436f-6e74-726f-6c6c-6572436f6e6e", "parent_path": "/infra", "remote_path": "", "unique_id": "3914cbe4-41b4-45f1-9dad-2bd96a2de0d8", "realization_id": "3914cbe4-41b4-45f1-9dad-2bd96a2de0d8", "owner_id": "f2a2a9e1-2578-435d-877d-47e01eb04954", "origin_site_id": "f2a2a9e1-2578-435d-877d-47e01eb04954", "marked_for_delete": false, "overridden": false, "_create_time": 1669600880493, "_create_user": "system", "_last_modified_time": 1669600880493, "_last_modified_user": "system", "_system_owned": false, "_revision": 0 }, { "version": { "major": 1, "minor": 0 }, "default_config": { "enabled": true, "timeout": 120, "threshold_number": 5, "throttle_cycle": 5 }, "supported_node_types": [ "nsx-esx" ], "parameters": [ { "name": "src", "optional": false, "parameter_type": "COMPOUND" }, { "name": "dst", "optional": false, "parameter_type": "COMPOUND" } ], "resource_type": "OdsPredefinedRunbook", "id": "0000004f-7665-726c-6179-54756e6e656c", "display_name": "OverlayTunnel", "path": "/infra/sha/pre-defined-runbooks/0000004f-7665-726c-6179-54756e6e656c", "relative_path": "0000004f-7665-726c-6179-54756e6e656c", "parent_path": "/infra", "remote_path": "", "unique_id": "3597af28-e670-456e-8347-4d1a53a5cb90", "realization_id": "3597af28-e670-456e-8347-4d1a53a5cb90", "owner_id": "f2a2a9e1-2578-435d-877d-47e01eb04954", "origin_site_id": "f2a2a9e1-2578-435d-877d-47e01eb04954", "marked_for_delete": false, "overridden": false, "_create_time": 1669600880518, "_create_user": "system", "_last_modified_time": 1669600880518, "_last_modified_user": "system", "_system_owned": false, "_revision": 0 }, { "version": { "major": 1, "minor": 0 }, "default_config": { "enabled": true, "timeout": 120, "threshold_number": 5, "throttle_cycle": 5 }, "supported_node_types": [ "nsx-esx" ], "parameters": [ { "name": "lsp", "optional": false, "parameter_type": "STRING" } ], "resource_type": "OdsPredefinedRunbook", "id": "00000000-0000-0000-506e-696350657266", "display_name": "PnicPerf", "path": "/infra/sha/pre-defined-runbooks/00000000-0000-0000-506e-696350657266", "relative_path": "00000000-0000-0000-506e-696350657266", "parent_path": "/infra", "remote_path": "", "unique_id": "53f29b77-dcf5-4561-85ec-8f35280e3f3a", "realization_id": "53f29b77-dcf5-4561-85ec-8f35280e3f3a", "owner_id": "f2a2a9e1-2578-435d-877d-47e01eb04954", "origin_site_id": "f2a2a9e1-2578-435d-877d-47e01eb04954", "marked_for_delete": false, "overridden": false, "_create_time": 1669600880553, "_create_user": "system", "_last_modified_time": 1669600880553, "_last_modified_user": "system", "_system_owned": false, "_revision": 0 }, { "version": { "major": 1, "minor": 0 }, "default_config": { "enabled": true, "timeout": 60, "threshold_number": 5, "throttle_cycle": 3 }, "supported_node_types": [ "nsx-esx" ], "parameters": [ { "name": "vif", "optional": false, "parameter_type": "STRING" } ], "resource_type": "OdsPredefinedRunbook", "id": "00000000-0000-0050-6f72-74426c6f636b", "display_name": "PortBlock", "path": "/infra/sha/pre-defined-runbooks/00000000-0000-0050-6f72-74426c6f636b", "relative_path": "00000000-0000-0050-6f72-74426c6f636b", "parent_path": "/infra", "remote_path": "", "unique_id": "6f411a92-30c0-4838-9758-c00220cb5fab", "realization_id": "6f411a92-30c0-4838-9758-c00220cb5fab", "owner_id": "f2a2a9e1-2578-435d-877d-47e01eb04954", "origin_site_id": "f2a2a9e1-2578-435d-877d-47e01eb04954", "marked_for_delete": false, "overridden": false, "_create_time": 1669600880572, "_create_user": "system", "_last_modified_time": 1669600880572, "_last_modified_user": "system", "_system_owned": false, "_revision": 0 } ], "result_count": 5, "sort_by": "display_name", "sort_ascending": true }
Nella risposta precedente, vengono restituiti i seguenti runbook predefiniti.- AdfCollect
- ControllerConn
- OverlayTunnel
- PnicPerf
- PortBlock
Se un runbook richiede un parametro al momento del richiamo, i dettagli del parametro vengono specificati nella chiave parametri. Ad esempio, il runbook del tunneling di overlay richiede due parametri, source e destination che siano IP VTEP locali e remoti del tunnel da diagnosticare.
- Passaggio 2: richiamare il runbook.
-
Eseguire l'API seguente per richiamare un runbook.
POST https://<nsx-mgr>/policy/api/v1/infra/sha/runbook-invocations/<invoke-name>
Richiesta di esempio: richiamo del runbook del tunneling di overlay.
POST https://<nsx-mgr>/policy/api/v1/infra/sha/runbook-invocations/OverlayTunnel { "runbook_path": "/infra/sha/pre-defined-runbooks/0000004f-7665-726c-6179-54756e6e656c", "target_node": "6c7a9374-459d-46b2-9ea6-c63b37c7cc38", "arguments": [ { "key": "src", "value": "192.168.0.11" }, { "key": "dst", "value": "192.168.0.10" } ] }
- Passaggio 3: controllare il report del runbook richiamato.
-
Eseguire l'API seguente per ottenere il report del runbook invocato.
GET https://<nsx-mgr>/policy/api/v1/infra/sha/runbook-invocations/<invoke-name>/report
Richiesta di esempio:
GET https://<nsx-mgr>/policy/api/v1/infra/sha/runbook-invocations/OverlayTunnel/report
Risposta di esempio:
{ "invocation_id": "70527fed-1e5e-4fed-a880-28cde04a66b1", "target_node": "6c7a9374-459d-46b2-9ea6-c63b37c7cc38", "timestamp": 1662469099, "sys_info": { "host_name": "sc2-10-185-4-158.eng.vmware.com", "os_name": "VMkernel", "os_version": "7.0.3" }, "result_message": "Tunnel 192.168.0.11 -> 192.168.0.10 is in up state", "recommendation_message": "No changes required as the tunnel is in up state.", "step_details": [ { "step_id": 1, "action_summary": "Check the status of tunnel for the given source/destination VTEPs.", "action_result": "Tunnel 192.168.0.11 -> 192.168.0.10 is in state up" } ], "status": { "request_status": "SUCCESS", "operation_state": "FINISHED" } }
La risposta restituisce alcune informazioni sui metadati, come data e ora, e dettagli del sistema, come il nome host e il sistema operativo. Il report restituisce anche il risultato del debug e il suggerimento di correzione, se presente, insieme ai passaggi eseguiti per il debug con il riepilogo dell'azione e il risultato dell'azione di ogni passaggio. Se il debug viene interrotto per un motivo qualsiasi, il campo operation_state conterrà un valore che definisce il motivo dell'interruzione. Se il richiamo del runbook non riesce, il report fornisce i dettagli dell'errore e non mostra i campi correlati al debug.
- Passaggio 4: scaricare gli artefatti.
-
- Eseguire l'API seguente per raccogliere gli artefatti.
POST https://{{mgr-ip}}/policy/api/v1/infra/sha/runbook-invocations/{{invocation-name}}
Richiesta di esempio:POST https://{{mgr-ip}}/policy/api/v1/infra/sha/runbook-invocations/{{invocation-name}} { "runbook_path": "/infra/sha/pre-defined-runbooks/00000000-0000-4164-6643-6f6c6c656374", "target_node": "{{target-node}}", "arguments": [ { "key": "advanced", "value": "{{advanced-mode}}" }, { "key": "cycle", "value": "{{cycle-count}}" }, { "key": "interval", "value": "{{interval-in-sec}}" } ] }
Se il parametro advanced è impostato su false al momento della chiamata, il runbook raccoglierà informazioni sulla topologia, statistiche di rete, statistiche DP NSX e informazioni di uplink. Se il parametro advanced è impostato su true, il runbook eseguirà inoltre strumenti di prestazioni avanzate come vmkstats (disponibile solo sulla macchina fisica).
Il parametro cycle definisce il numero di volte in cui l'agente di raccolta ADF viene eseguito in una chiamata.
Il parametro interval definisce l'intervallo di attesa tra le esecuzioni consecutive dell'agente di raccolta ADF. Diventa effettivo solo quando il parametro cycle è impostato su un valore maggiore di 1.
Risposta di esempio:
{ "invocation_id": "80a0037a-52e1-48d7-b28e-c3bfb8475e8c", "target_node": "b794f78f-7eb0-433f-8f11-63e6b3121c28", "timestamp": 1668674073, "sys_info": { "host_name": "sc2-rdops-vm06-dhcp-204-101.eng.vmware.com", "os_name": "VMkernel", "os_version": "7.0.3" }, "result_message": "ADF data collection runbook completes.", "recommendation_message": "No action needs to be taken.", "step_details": [ { "step_id": 1, "action_summary": "Run ADF collector.", "action_result": "ADF data collection is successfully performed in the following time point(s) along with the following artifact(s): [(2022-11-17 08:35:30, a44f0446-0ac3-4e7f-8513-fb1248985d9e.tar)]", "artifacts": [ "a44f0446-0ac3-4e7f-8513-fb1248985d9e" ] } ], "status": { "request_status": "SUCCESS", "operation_state": "FINISHED" } }
- Per scaricare gli artefatti, eseguire l'API seguente.
GET https://<nsx-mgr>/policy/api/v1/infra/sha/runbook-invocations/<invoke-name>/artifact
Se il runbook ha generato gli artefatti, l'API restituisce un file in bundle, altrimenti restituisce un messaggio di errore. Salvare la risposta binaria in un file tar.gz. Questo file contiene un report di chiamata del runbook (in JSON) e un file tar per la raccolta ADF eseguita.
- Eseguire l'API seguente per raccogliere gli artefatti.
Modifica della configurazione di un runbook
Viene innanzitutto creato un gruppo di nodi di trasporto (TN) a cui viene quindi associato un profilo di runbook. Se si modifica la configurazione di un runbook, viene modificata in tutti i nodi a cui è associato il profilo del runbook. È possibile configurare se un runbook è abilitato o meno, il timeout di debug e la frequenza con cui è possibile richiamare il runbook utilizzando il meccanismo del ciclo di limitazione. Il meccanismo del ciclo di limitazione specifica il numero di volte in cui un runbook può essere eseguito in un determinato momento.
Si noti che un runbook può avere un solo profilo, ma un nodo potrebbe avere più profili di runbook in base ai gruppi TN a cui appartiene. In questo caso, al nodo viene applicato il profilo con la priorità più alta.
Per modificare la configurazione di un runbook, eseguire i passaggi seguenti.
- Passaggio 1: creare un gruppo TN di ESXi.
-
Eseguire l'API seguente per creare un gruppo TN.
PATCH https://<nsx-mgr>/policy/api/v1/infra/domains/default/groups/<group-name>
Richiesta di esempio:
PATCH https://<nsx-mgr>/policy/api/v1/infra/domains/default/groups/<group-name> { "expression": [ { "paths": [ "/infra/sites/default/enforcement-points/default/host-transport-nodes/TN1" ], "resource_type": "PathExpression" } ], "extended_expression": [], "reference": false, "group_type": [], "resource_type": "Group" }
- Passaggio 2: modificare la configurazione del profilo del runbook e associare il gruppo TN al profilo.
-
Eseguire l'API seguente per modificare la configurazione:
PATCH https://<nsx-mgr>/policy/api/v1/infra/sha/runbook-profiles/<profile-name>
Richiesta di esempio:
PATCH https://<nsx-mgr>/policy/api/v1/infra/sha/runbook-profiles/<profile-name> { "runbook_path": "/infra/sha/pre-defined-runbooks/0000004f-7665-726c-6179-54756e6e656c", "applied_to_group_path": "/infra/domains/default/groups/tngroup2", "config": { "enabled": true, "timeout": 120, "threshold_number": 2, "throttle_cycle": 6 } }
In questo esempio, throttle_cycle è 6 minuti e threshold_number è 2, il che significa che, entro 6 minuti, il runbook non può essere richiamato più di due volte.
Per informazioni complete sulle API ODS, vedere la Guida all'API di NSX Intelligence e NSX Application Platform.