線上診斷系統 (ODS) 功能可在執行階段自動偵錯 NSX。ODS 是透過 NSX 中內建的 Runbook 來實作。Runbook 包含偵錯程序,能全面觀察 NSX 元件。Runbook 會產生偵錯報告。此外,它還會產生問題的執行階段構件,例如:封包擷取、使用者程序即時核心傾印,以及指令碼和工具的輸出。這些構件可以稍後收集,並用來進行離線分析和偵錯。請注意,您無法修改預先定義的 Runbook。
您可以使用 API 執行以下 Runbook 作業:
- 叫用 Runbook,以起始執行階段偵錯
- 檢查偵錯報告
- 下載由所叫用的 Runbook 產生的構件
- 管理 Runbook 的生命週期
預先定義的 Runbook
從 NSX 4.1.1 開始,Unified Appliance (UA) 也支援 ODS。下表列出 Runbook 以及可用來執行這些 Runbook 的節點。
Runbook | 說明 | 節點 | 版本 | |
---|---|---|---|---|
PnicPerf | 此 Runbook 可以識別 pNIC 接收和傳輸效能問題。 此 Runbook 會採用邏輯連接埠的識別碼作為輸入引數,來進行診斷。 |
ESXi | 4.1 | |
OverlayTunnel | 此 Runbook 可以識別覆疊通道故障,例如:閘道組態錯誤、通道遺失、通道關閉。 此 Runbook 會採用來源 VTEP 的 IP 位址和目的地 VTEP 的 IP 位址,以作為輸入引數。 |
ESXi | 4.1 | |
PortBlock | 此 Runbook 可以識別連接埠遭封鎖的原因,例如:DVPort 可能因 LSP/LS 組態不正確而遭到封鎖。 | ESXi | 4.1 | |
AdfCollect | 此 Runbook 會透過 ADF 收集器來收集 ESXi 資料路徑效能資料。 此 Runbook 會採用以下輸入引數:
|
ESXi | 4.1 | |
ControllerConn | 此 Runbook 可以識別因控制器故障、Proxy 故障、底層網路中斷或 FQDN 解析失敗,而導致的控制器連線問題。 此 Runbook 會採用 ESXi 主機的 IP 位址和控制器的 IP 位址,以作為輸入引數。 |
ESXi | 4.1 | |
NxgiPlatform | 此 Runbook 會診斷 NXGI 平台資料路徑中的問題,並支援各種不同的功能,例如:分散式 MPS、端點保護、IDFW、IDS 和 Intelligence。 此 Runbook 會採用該功能以作為輸入引數。這是特定的 NXGI 相依功能 (MPS、IDFW、IDS、EPP 和 Intelligence 之一,預設為 EPP),且需要檢查或偵錯。 |
ESXi | 4.1.1 | |
VifInfo | 此 Runbook 會取得虛擬介面的詳細資訊,這些資訊可作為其他 Runbook 的輸入。 此 Runbook 會採用 VIF 以作為輸入引數。 |
ESXi | 4.1.1 | |
EdgeHealth |
此 Runbook 會執行以下功能:
此 Runbook 沒有任何輸入引數。 |
Edge | 4.1.1 | |
MacAddressInfo |
此 Runbook 會診斷特定 MAC 位址的相關問題,並檢查及修復主機交換器的效能問題。它會執行以下功能:
此 Runbook 會採用主機交換器名稱和 MAC 位址,以作為輸入引數。 |
ESXi | 4.1.1 | |
EdgeDpBfd | 此 Runbook 會將 NSX Edge BFD 問題加以分級。 此 Runbook 會採用 BFD 工作階段的來源 IP 和目的地 IP,以作為輸入引數。它還會採用擷取功能作為選用引數,以確保只會篩選及擷取工作階段的特定 BFD 封包。 |
Edge | 4.1.1 | |
DistributedMps | 此 Runbook 會驗證「惡意程式碼防護服務 (MPS)」管線的健全狀況,並診斷 MPS 所遇到的任何問題,例如:特定虛擬機器上的防護不起作用或某些檔案未掃描。 此 Runbook 的輸入引數是要進行防護診斷的虛擬機器的虛擬機器 UUID。 |
ESXi | 4.1.1 | |
DuplicateVtepDetectorProvider | 此 Runbook 會偵測 VTEP 中任何重複的 IP 或標籤。 此 Runbook 沒有任何輸入引數。 |
UA | 4.1.1 | |
LspStaleInfo | 此 Runbook 會擷取失效的邏輯連接埠。 此 Runbook 沒有任何輸入引數。 |
UA | ||
BgpNeighborState | 此 Runbook 會診斷可能導致 BGP 芳鄰關閉的各種流量。此 Runbook 還會收集以下的支援構件,以進行離線偵錯。
此 Runbook 會採用以下輸入引數:
|
Edge | 4.1.1 | |
PimMrouteState | 此 Runbook 會將因各種原因而發生的多點傳播流量遺失加以分級。 提供多點傳播流量傳送端的來源 IP 和多點傳播流量的群組 IP 後,此 Runbook 有助於識別問題的根本原因,並收集支援構件,以進行離線偵錯。 此 Runbook 會採用來源 IP、群組 IP 和流量方向,以作為輸入引數。 |
Edge | 4.1.1 | |
OspfNbrState | 此 Runbook 會診斷各種邏輯流量,將 OSPF 芳鄰狀態問題加以分級。 此 Runbook 會採用芳鄰 IP 位址作為輸入引數。 |
Edge | 4.1.1 | |
IdpsDpStatus | 此 Runbook 會檢查 IDPS/IDS 模組 (內容引擎) 和 IDPS 引擎的狀態。此外,還會比較 IDPS 模組和 IDPS 引擎模組中已載入的設定檔、規則、簽章和擷取的事件。 此 Runbook 沒有任何輸入引數。 |
ESXi | 4.1.1 | |
NxgiPlatformUA | 此 Runbook 會診斷 NXGI 平台的管理平面中的問題,並支援各種不同的功能,例如:分散式 MPS、端點保護、IDFW、IDS、Intelligence。此 Runbook 可以與執行於傳輸節點上的 NxgiPlatform Runbook 結合使用。 此 Runbook 會採用傳輸節點識別碼作為選用的輸入引數。 |
UA | 4.1.1 | |
CorfuServer | 此 Runbook 會檢查 Corfu 伺服器配置的穩定性、基礎結構 ping 和磁碟 IO 狀況,以及壓縮器健全狀況。 為了覆寫記錄事件的預設回溯天數或小時數,此 Runbook 會採用回溯天數和回溯小時數作為輸入引數。 |
UA | 4.1.1 | |
EdgeIDPS | 此 Runbook 會檢查及擷取存在於 Edge 中的 IDS/IPS 特徵碼統計資料。 此 Runbook 會採用特徵碼識別碼作為輸入引數。 |
Edge | 4.1.1 | |
EdgeRouting | 此 Runbook 會多方面檢查給定邏輯路由器健全狀況,並提供狀況不良的 Edge 程序清單。該 Runbook 會針對一般的南北向路由問題,提供疑難排解方向。 Runbook 會收集各種資訊,並報告路由通訊協定、通道和連接埠的狀態。它會對 Edge 上路由所使用的路由堆疊和各種精靈,執行健全狀況檢查。對於提供的目的地 IP,它會檢查 RIB、FIB 和 ARP 資料表。它還會使用來源和目的地 IP,來執行 ping 和 traceroute。
此 Runbook 會採用以下輸入引數:
|
Edge | 4.1.1 | |
PimConfigCheck |
此 Runbook 會將提供更多詳細資料,來說明當 Edge 擲回 routing_config_error 時明確的失敗項目。它還有助於將問題分級。 此 Runbook 沒有任何輸入引數。 |
Edge | 4.1.1 | |
NCPPendingPod | 此 Runbook 會對停滯在擱置狀態的網繭進行偵錯。 此 Runbook 會採用擱置網繭的命名空間和名稱,以作為輸入引數。 |
ESXi | 4.1.2 |
執行階段的偵錯步驟
若要在執行階段進行偵錯,請執行以下步驟:
- 步驟 1:擷取預先定義的 Runbook 清單。
-
執行以下 API,以擷取預先定義的 Runbook 清單。
GET https://<nsx-mgr>/policy/api/v1/infra/sha/pre-defined-runbooks
此 API 會傳回預先定義的 Runbook 清單,以及以下資訊:
- 組態詳細資料。
- 支援 Runbook 的節點類型。
- Runbook 的一般詳細資料,例如:識別碼、名稱和路徑。
- 叫用 Runbook 時所需的參數詳細資料。
範例回應:
{ "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 }
在上述回應中,會傳回以下預先定義的 Runbook。- AdfCollect
- ControllerConn
- OverlayTunnel
- PnicPerf
- PortBlock
如果在叫用時 Runbook 需要參數,則會在 parameters 索引鍵中指定參數詳細資料。例如,覆疊通道 Runbook 需要兩個參數,即 source 和 destination,它們是要診斷的通道的本機和遠端 VTEP IP。
- 步驟 2:叫用 Runbook。
-
執行以下 API,以叫用 Runbook。
POST https://<nsx-mgr>/policy/api/v1/infra/sha/runbook-invocations/<invoke-name>
範例要求:叫用覆疊通道 Runbook。
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" } ] }
- 步驟 3:檢查所叫用的 Runbook 的報告。
-
執行以下 API,以擷取所叫用的 Runbook 的報告。
GET https://<nsx-mgr>/policy/api/v1/infra/sha/runbook-invocations/<invoke-name>/report
範例要求:
GET https://<nsx-mgr>/policy/api/v1/infra/sha/runbook-invocations/OverlayTunnel/report
範例回應:
{ "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" } }
回應會傳回一些中繼資料資訊,例如:時間戳記,以及主機名稱和作業系統等系統詳細資料。報告還會傳回偵錯結果、修復建議 (若有的話),以及針對偵錯所執行的步驟,且其中含有每個步驟的動作摘要和動作結果。如果偵錯因任何原因而中斷,則 operation_state 欄位會保留一值以定義中斷的原因。如果 Runbook 叫用不成功,報告會提供錯誤詳細資料,而不會顯示偵錯的相關欄位。
- 步驟 4:下載構件。
-
- 執行以下 API,以收集構件。
POST https://{{mgr-ip}}/policy/api/v1/infra/sha/runbook-invocations/{{invocation-name}}
範例要求: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}}" } ] }
如果在叫用時將 advanced 參數設定為 false,則 Runbook 會收集拓撲資訊、網路統計資料、NSX DP 統計資料和上行資訊。如果將 advanced 參數設定為 true,則 Runbook 還會額外執行進階效能工具,例如 vmkstats (只有在實體機器上才能使用)。
cycle 參數用來定義在叫用期間執行 ADF 收集器的次數。
interval 參數用來定義 ADF 收集器連續執行時的等待時間間隔。只有在將 cycle 參數設定為大於 1 時,該參數才會生效。
範例回應:
{ "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" } }
- 執行以下 API,以下載構件。
GET https://<nsx-mgr>/policy/api/v1/infra/sha/runbook-invocations/<invoke-name>/artifact
如果 Runbook 產生了構件,API 會傳回一個繫結的檔案,否則,將傳回一則錯誤訊息。將二進位回應儲存到 tar.gz 檔案。此檔案包含 Runbook 叫用報告 (JSON 格式),以及所執行的 ADF 收集作業的 tar 檔案。
- 執行以下 API,以收集構件。
變更 Runbook 組態
首先會建立一個傳輸節點 (TN) 群組,之後會將一個 Runbook 設定檔繫結到該群組。如果變更 Runbook 的組態,則會在 Runbook 設定檔所繫結的所有節點上,進行相應的變更。您可以設定是否啟用 Runbook、偵錯逾時,以及可以透過節流循環機制來叫用 Runbook 的頻率。節流循環機制會指定在特定時間內可以執行 Runbook 的次數。
請注意,一個 Runbook 只能有一個設定檔,但視節點所屬的 TN 群組而定,一個節點可以有多個 Runbook 設定檔。在這種情況下,會在節點上套用具有最高優先順序的設定檔。
若要變更 Runbook 組態,請執行以下步驟:
- 步驟 1:建立 ESXi 的 TN 群組。
-
執行以下 API,以建立 TN 群組。
PATCH https://<nsx-mgr>/policy/api/v1/infra/domains/default/groups/<group-name>
範例要求:
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" }
- 步驟 2:變更 Runbook 設定檔的組態,並將 TN 群組與設定檔繫結。
-
執行以下 API,以變更組態。
PATCH https://<nsx-mgr>/policy/api/v1/infra/sha/runbook-profiles/<profile-name>
範例要求:
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 } }
在此範例中,throttle_cycle 為 6 分鐘,threshold_number 為 2,這表示在 6 分鐘內,Runbook 的叫用次數不能超過兩次。
如需 ODS API 的完整資訊,請參閱《NSX Intelligence 和 NSX Application Platform API 指南》。