联机诊断系统 (Online Diagnostic System, ODS) 功能可在运行时自动调试 NSX。ODS 通过内置于 NSX 中的操作手册实现。操作手册包含调试过程,并具有对 NSX 组件的完全可观察性。操作手册会生成调试报告。此外,它还会生成某个问题的运行时工件,例如数据包捕获、用户进程实时核心转储以及脚本和工具的输出。可以稍后收集这些工件,将其用于脱机分析和调试。请注意,您无法修改预定义的操作手册。
您可以使用 API 执行以下操作手册操作:
- 调用操作手册以启动运行时调试
- 检查调试报告
- 下载由调用的操作手册生成的工件
- 管理操作手册的生命周期
预定义的操作手册
从 NSX 4.1.1 开始,Unified Appliance (UA) 也支持 ODS。下表列出了操作手册以及可用于运行这些操作手册的节点。
操作手册 | 描述 | 节点 | 版本 | |
---|---|---|---|---|
PnicPerf | 此操作手册可以识别 pNIC TX 和 RX 性能问题。 此操作手册可将逻辑端口的 ID 作为输入参数进行诊断。 |
ESXi | 4.1 | |
OverlayTunnel | 此操作手册可以确定覆盖网络隧道故障,例如,网关配置错误,隧道丢失、隧道关闭。 此操作手册将源 VTEP 的 IP 地址和目标 VTEP 的 IP 地址作为输入参数。 |
ESXi | 4.1 | |
PortBlock | 此操作手册可以识别端口被阻止的原因,例如 DVPort 可能会因为 LSP/LS 配置不正确而被阻止。 | ESXi | 4.1 | |
AdfCollect | 此操作手册通过 ADF 收集器收集 ESXi 数据路径性能数据。 此操作手册将接受以下输入参数:
|
ESXi | 4.1 | |
ControllerConn | 此操作手册可以识别由控制器故障、代理故障、底层网络中断或 FQDN 解析失败导致的控制器连接问题。 此操作手册将 ESXi 主机的 IP 地址和控制器的 IP 地址作为输入参数。 |
ESXi | 4.1 | |
NxgiPlatform | 此操作手册将对 NXGI 平台数据路径中的问题进行诊断,且支持分布式 MPS、端点保护、IDFW、IDS 和 Intelligence 等功能。 此操作手册将功能作为输入参数。这是需要检查或调试的依赖于 NXGI 的特定功能(MPS、IDFW、IDS、EPP 和 Intelligence 之一,默认为 EPP)。 |
ESXi | 4.1.1 | |
VifInfo | 此操作手册将获取有关虚拟接口的详细信息,这些信息可用作其他操作手册的输入。 本操作手册将 VIF 作为输入参数。 |
ESXi | 4.1.1 | |
EdgeHealth |
本操作手册执行以下功能:
此操作手册没有任何输入参数。 |
Edge | 4.1.1 | |
MacAddressInfo |
此操作手册将对与特定 MAC 地址相关的问题进行诊断,并检查和修复主机交换机上的性能问题。它执行以下功能:
此操作手册将主机交换机名称和 MAC 地址作为输入参数。 |
ESXi | 4.1.1 | |
EdgeDpBfd | 此操作手册将对 NSX Edge BFD 问题进行分类。 此操作手册将 BFD 会话的源 IP 和目标 IP 作为输入参数。它还将捕获功能作为可选参数,以确保仅筛选和捕获特定于会话的 BFD 数据包。 |
Edge | 4.1.1 | |
DistributedMp | 此操作手册将验证恶意软件防护服务 (MPS) 管道的运行状况,并诊断 MPS 遇到的任何问题,例如特定虚拟机上的防护措施不起作用或某些文件未被扫描。 此操作手册的输入参数是要进行防护诊断的虚拟机的虚拟机 UUID。 |
ESXi | 4.1.1 | |
DuplicateVtepDetectorProvider | 此操作手册可检测 VTEP 中的任何重复 IP 或标签。 此操作手册没有任何输入参数。 |
UA | 4.1.1 | |
LspStaleInfo | 此操作手册提取失效的逻辑端口。 此操作手册没有任何输入参数。 |
UA | ||
BgpNeighborState | 此操作手册将对可能导致 BGP 邻居关闭的各种流量进行诊断。此操作手册还会收集以下支持工件以进行脱机调试。
此操作手册将接受以下输入参数:
|
Edge | 4.1.1 | |
PimMrouteState | 此操作手册将对由于各种原因而发生的多播流量丢失问题进行分类。 提供多播流量发送方的源 IP 和多播流量的组 IP 后,此操作手册将帮助确定问题的根本原因,并收集相关支持工件以进行脱机调试。 此操作手册将源 IP、组 IP 和流量方向作为输入参数。 |
Edge | 4.1.1 | |
OspfNbrState | 此操作手册将通过诊断各种逻辑流量来对 OSPF 邻居状态问题进行分类。 此操作手册将邻居 IP 地址作为输入参数。 |
Edge | 4.1.1 | |
IdpsDpStatus | 此操作手册检查 IDPS/IDS 模块(上下文引擎)和 IDPS 引擎的状态。它还会比较 IDPS 模块和 IDPS 引擎模块中加载的配置文件、规则、特征码和捕获的事件。 此操作手册没有任何输入参数。 |
ESXi | 4.1.1 | |
NxgiPlatformUA | 此操作手册将对 NXGI 平台的管理平面中的问题进行诊断,且支持分布式 MPS、端点保护、IDFW、IDS、Intelligence 等功能。此操作手册可以与传输节点上运行的 NxgiPlatform 操作手册结合使用。 此操作手册将传输节点 ID 作为可选输入参数。 |
UA | 4.1.1 | |
CorfuServer | 此操作手册可检查 Corfu 服务器布局稳定性、基础架构 ping 和磁盘 IO 状况以及压缩器运行状况。 为了覆盖日志事件的默认回溯天数或小时数,此操作手册将回溯天数和回溯小时数作为输入参数。 |
UA | 4.1.1 | |
EdgeIDPS | 此操作手册检查并检索 Edge 中存在的 IDS/IPS 特征码的统计信息。 此操作手册将特征码 ID 作为输入参数。 |
Edge | 4.1.1 | |
EdgeRouting | 此操作手册将检查给定逻辑路由器运行状况的多个方面,并提供运行状况不佳的 Edge 进程列表。该操作手册针对常见的南北向路由问题提供了故障排除说明。 操作手册收集各种信息,并报告路由协议、隧道和端口的状态。它将对 Edge 上路由操作所用的路由堆栈和各种守护进程执行运行状况检查。对于提供的目标 IP,它将检查 RIB、FIB 和 ARP 表。它还会使用源和目标 IP 来运行 ping 和 traceroute。
此操作手册将接受以下输入参数:
|
Edge | 4.1.1 | |
PimConfigCheck |
此操作手册将提供有关在 Edge 抛出 routing_config_error 时失败的确切对象的更多详细信息。它还有助于对问题进行分类。 此操作手册没有任何输入参数。 |
Edge | 4.1.1 | |
NCPPendingPod | 此操作手册可对卡在挂起状态的 Pod 进行调试。 此操作手册可将处于挂起状态的 Pod 的命名空间和名称作为输入参数。 |
ESXi | 4.1.2 |
运行时的调试步骤
要在运行时进行调试,请执行以下步骤:
- 步骤 1:获取预定义操作手册的列表。
-
运行以下 API 以获取预定义操作手册的列表。
GET https://<nsx-mgr>/policy/api/v1/infra/sha/pre-defined-runbooks
此 API 会返回预定义操作手册的列表以及以下信息:
- 配置详细信息。
- 支持操作手册的节点类型。
- 操作手册的常规详细信息,例如 ID、名称和路径。
- 调用操作手册时所需的参数详细信息。
示例响应:
{ "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 }
在上述响应中,返回了以下预定义的操作手册。- AdfCollect
- ControllerConn
- OverlayTunnel
- PnicPerf
- PortBlock
如果操作手册在调用时需要参数,则会在 parameters 键中指定参数详细信息。例如,覆盖网络隧道操作手册需要两个参数,即 source 和 destination,它们是要诊断的隧道的本地和远程 VTEP IP。
- 步骤 2:调用操作手册。
-
运行以下 API 以调用操作手册。
POST https://<nsx-mgr>/policy/api/v1/infra/sha/runbook-invocations/<invoke-name>
示例请求:调用覆盖网络隧道操作手册。
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:检查调用的操作手册的报告。
-
运行以下 API 以获取调用的操作手册的报告。
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 字段将保留一个值以定义中断原因。如果操作手册调用不成功,报告将提供错误详细信息,而不会显示调试相关字段。
- 步骤 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,则操作手册将收集拓扑信息、网络统计信息、NSX DP 统计信息和上行链路信息。如果将 advanced 参数设置为 true,则操作手册将额外运行高级性能工具,例如 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
如果操作手册生成了工件,该 API 将返回捆绑文件,否则将返回一条错误消息。将二进制响应保存到 tar.gz 文件。此文件包含操作手册调用报告(采用 JSON 格式)以及执行的 ADF 收集的 tar 文件。
- 运行以下 API 以收集工件。
更改操作手册配置
首先创建一个传输节点 (TN) 组,然后将一个操作手册配置文件绑定到该组。如果更改操作手册的配置,则会在操作手册配置文件绑定到的所有节点上进行相应更改。您可以配置是否启用操作手册、调试超时以及可以使用限制周期机制调用操作手册的频率。限制周期机制将指定在特定时间内可以执行操作手册的次数。
请注意,一个操作手册只能有一个配置文件,但根据节点所属的 TN 组,一个节点可以有多个操作手册配置文件。在这种情况下,将在节点上应用具有最高优先级的配置文件。
要更改操作手册配置,请执行以下步骤:
- 步骤 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:更改操作手册配置文件的配置,并将 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 分钟内,操作手册的调用次数不能超过两次。
有关 ODS API 的完整信息,请参见《NSX Intelligence 和 NSX Application Platform API 指南》。