NSX 组件将写入 /var/log 目录中的日志文件。在 NSX 设备上,NSX syslog 消息遵循 RFC 5424 格式规范。在 ESXi 主机上,syslog 消息遵循 RFC 3164 格式规范。

查看日志

NSX 设备上,syslog 消息位于 /var/log/syslog 中。

NSX 设备上,可以运行以下 NSX CLI 命令以查看日志:
get log-file <auth.log | controller | controller-error | http.log | kern.log | manager.log | node-mgmt.log | syslog> [follow]
日志文件如下:
名称 描述
auth.log 授权日志
controller 控制器日志
controller-error 控制器错误日志
http.log HTTP 服务日志
kern.log 内核日志
manager.log 管理器服务日志
node-mgmt.log 节点管理日志
nsx-audit-write.log NSX 审核写入日志
nsx-audit.log NSX 审核日志
syslog 系统日志

NSX 还会将审核 (audispd) 日志直接发送到远程 syslog 服务器。这些消息记录在 /var/log/audit/audit.log 中,而不是本地 syslog 文件中。审核日志会记录操作系统中与安全相关的事件。

在 Hypervisor 上,可以使用 tactailgrepmore 等 Linux 命令查看日志。

每条 syslog 消息都具有组件 (comp) 和子组件 (subcomp) 信息,可帮助标识消息的来源。

NSX 会生成包含程序模块 local6 的日志,该模块具有数值 22。

审核日志是 syslog 的一部分。可以通过 structured-data 字段中的字符串 audit="true" 来识别审核日志消息。您可以配置外部日志服务器以接收日志消息。您也可以使用 API /api/v1/administration/audit-logs 访问审核日志。nsx-audit.log 文件包含 syslog 消息,并在 structured-data 字段中具有 audit="true"nsx-audit-write.log 文件包含 syslog 消息,并在 structured-data 字段中具有 audit="true"update="true"

每个 syslog 和审核日志消息包含 NTP 服务器(如果已配置)或系统时钟生成的时间戳。下面是一个审核日志消息示例:
<182>1 2020-05-05T00:29:02.900Z nsx-manager1 NSX 147324 - [nsx@6876 audit="true" comp="nsx-manager" level="INFO" reqId="fe75651d-c3e7-4680-8753-9ae9d92d7f0c" subcomp="policy" username="admin"] UserName="admin", ModuleName="AAA", Operation="GetCurrentUserInfo", Operation status="success"
syslog 消息示例:
2023-01-25T21:58:42.173Z w4-mydevice-220.eng.vmware.com NSX 1463241016 - [nsx@6876 comp="nsx-controller" level="INFO" subcomp="corfu-cluster"] Received maintenance mode status: {da3a0242-bf6d-ee98-224c-b9799cb5e29f=MAINTENANCE_MODE_OFF}
API 调用可能来自于 NSX Manager、策略 API 客户端或 NSX 节点。所有 API 调用需要进行身份验证和授权,并生成审核日志。默认情况下,将启用这种日志记录,并且无法将其禁用。与 API 调用关联的审核日志具有以下信息:
  • 实体 ID 参数 entId,用于标识 API 的对象。
  • 请求 ID 参数 req-id,用于标识特定的 API 调用。
  • 外部请求 ID 参数 ereqId(如果 API 调用包含标头 X-NSX-EREQID:<string>)。
  • 外部用户参数 euser(如果 API 调用包含标头 X-NSX-EUSER:<string>)。
来自策略或管理器 API 调用的审核日志消息将包含以下其他字段。请注意,节点 API (NAPI) 和 CLI 审核日志不包含这些字段。
  • update 标记,它显示 API 操作是读取 (GET) 还是写入 (PUT/POST/DELETE/...) 操作。
  • operation name 字段,它显示 API 操作的名称。
  • operation status 字段,它显示 API 操作成功还是失败。
  • new value 字段,它显示 API 请求的所有参数值。

NSX 没有特权模式概念。将审核来自所有源和用户的 API 调用。

下面是登录和注销 syslog 消息示例,其中显示了成功登录、失败登录和来自 2 个不同设备的登录(请注意 IP 地址不相同):
2020-07-07T16:33:20.339Z svc.nsxmanager NSX 1513 SYSTEM [nsx@6876 audit="true" comp="nsx-manager" level="INFO" subcomp="http"] UserName="[email protected]", ModuleName="ACCESS_CONTROL", Operation="LOGIN", Operation status="success"

2020-07-07T16:33:58.779Z svc.nsxmanager NSX 1513 SYSTEM [nsx@6876 audit="true" comp="nsx-manager" level="INFO" subcomp="http"] UserName="admin", ModuleName="ACCESS_CONTROL", Operation="LOGOUT", Operation status="success"

2020-07-07T16:50:21.301Z svc.nsxmanager NSX 1513 SYSTEM [nsx@6876 audit="true" comp="nsx-manager" level="INFO" subcomp="http"] UserName="[email protected]", ModuleName="ACCESS_CONTROL", Operation="LOGIN", Operation status="success"

2020-07-07T16:43:20.339Z svc.nsxmanager NSX 1513 SYSTEM [nsx@6876 audit="true" comp="nsx-manager" level="INFO" subcomp="http"] UserName="[email protected]", ModuleName="ACCESS_CONTROL", Operation="LOGIN", Operation status="failure"
下面是策略 API 调用的 syslog 消息示例:
<182>1 2020-07-06T18:09:14.210Z svc.nsxmanager NSX 2326 FABRIC [nsx@6876 audit="true" comp="nsx-manager" entId="68d5a9d0-4691-4c9c-94ed-64fd1c96150f" level="INFO" reqId="4c2335aa-c973-4f74-983f-331a4f7041ca" subcomp="manager" update="true" username="admin"] UserName="admin", ModuleName="TransportZone", Operation="CreateTransportZone", Operation status="success", New value=[{"transport_type":"OVERLAY","host_switch_name":"nsxvswitch","host_switch_mode":"STANDARD","nested_nsx":false,"is_default":false,"display_name":"1-transportzone-1307","_protection":"UNKNOWN"}]
下面是 CLI 访问的 syslog 消息示例:
2020-07-07T16:36:41.783Z svc.nsxmanager NSX 21018 - [nsx@6876 comp="nsx-manager" subcomp="cli" username="admin" level="INFO"] NSX CLI started (Manager, Policy, Controller) for user: admin
2020-07-07T16:36:53.469Z svc.nsxmanager NSX 21018 - [nsx@6876 comp="nsx-manager" subcomp="cli" username="admin" level="INFO"] NSX CLI stopped for user: admin
下面是在用户运行 CLI 命令(该示例中的 set user admin password-expiration 100)时的 syslog 消息示例:
<182>1 2020-07-22T20:51:49.017Z manager2 NSX 1864 - [nsx@6876 comp="nsx-manager" subcomp="cli" username="admin" level="INFO" audit="true"] CMD: set user admin password-expiration 100 (duration: 2.185s), Operation status: CMD_EXECUTED
下面是 NAPI 调用的 syslog 消息示例:
<182>1 2020-07-21T21:01:38.803Z manager2 NSX 4690 - [nsx@6876 comp="nsx-manager" subcomp="node-mgmt" username="admin" level="INFO" audit="true"] admin 'GET /api/v1/node/services/syslog/exporters' 200 731 "" "PostmanRuntime/7.26.1" 0.004588
下面是 CLI 命令的 syslog 消息示例:
<182>1 2020-07-21T20:54:40.018Z manager2 NSX 16915 - [nsx@6876 comp="nsx-manager" subcomp="cli" username="admin" level="INFO" audit="true"] CMD: set logging-server 1.1.1.1 proto udp level info (duration: 4.356s), Operation status: CMD_EXECUTED

RFC 5424 和 RFC 3164 定义了以下严重性级别:

严重性级别 描述
0 紧急:系统无法使用
1 警报:必须立即采取措施
2 严重:严重情况
3 错误:错误情况
4 警告:警告情况
5 通知:正常但重大情况
6 信息:信息性消息
7 调试:调试级别消息

具有“紧急”、“警报”、“严重”或“错误”严重性的所有日志在日志消息的结构化数据部分中包含唯一的错误代码。错误代码由一个字符串和一个十进制数字组成。该字符串表示特定的模块。

无法访问日志文件或远程日志服务器

如果 NSX 无法访问日志文件或无法将消息写入日志文件,则会生成警报。可能的错误包括:

  • 缺少本地日志文件。
  • 本地日志文件的权限或所有权设置阻止 NSX 写入文件。
  • NSX 无法将日志消息发送到第三方远程日志服务器。请注意,如果 NSX 无法将日志发送到 Aria Operations for Logs 代理,则不会发出警报。

可以通过警报框架解决该警报。

日志消息格式

有关 RFC 5424 的详细信息,请参见https://tools.ietf.org/html/rfc5424。有关 RFC 3164 的详细信息,请参见https://tools.ietf.org/html/rfc3164

RFC 5424 为日志消息定义以下格式:

<facility * 8 + severity> version UTC-TZ hostname APP-NAME procid MSGID [structured-data] msg
示例日志消息:
<187>1 2016-03-15T22:53:00.114Z nsx-manager NSX - SYSTEM [nsx@6876 comp="nsx-manager" errorCode="MP4039" subcomp="manager"] Connection verification failed for broker '10.160.108.196'. Marking broker unhealthy.

错误代码

有关错误代码的列表,请参见知识库文章 71077《NSX-T Data Center 2.x 错误代码》