通过使用正确的 syslog 设置,您可以主动监控环境,减少停机时间并在服务器上采取预防措施。

设置 syslog 时,您需要考虑几个参数,这些参数会影响日志文件保留、syslog 传输、传输长度、错误处理以及 SSL 证书的设置,以确保安全地传输 syslog 消息。以下是对精确调整 syslog 参数的建议。您可以在ESXi Syslog 选项中查看所有可用参数的描述。

如何指定日志文件保留

默认情况下,日志文件无法扩展超过配置的大小。日志文件达到所配置的大小后,系统会将日志记录路由到新的日志文件并删除最早的日志文件。
注: 最佳做法是平衡轮换和大小设置。提高轮换设置可确保生成 syslog 文件的频率足以防止其他日志文件造成任何潜在损坏或破坏。增加大小设置可缩短切换到其他日志文件的时间。最佳大小设置是 1024 KiB 的倍数。
使用 Syslog.global.defaultSize 设置可指定日志文件的最大大小(以 KiB 为单位),使用 Syslog.global.defaultRotate 可设置在轮换到新日志文件之前要保留的最大旧日志文件数。要更改与特定程序关联的日志文件保留参数,请使用 Syslog.loggers.<progName>.rotate Syslog.loggers.<progName>.size settings,其中 <progName> 是要调整参数的程序的名称。

管理影响虚拟机日志文件的设置

您可以在 vmx 文件或 /etc/vmware/config 文件中配置一些影响虚拟机日志文件 vmware.log 的设置。必须关闭虚拟机电源才能编辑 vmx 文件,而且所做编辑仅对该虚拟机生效。如果使用 /etc/vmware/config 文件,则必须在设置中添加前缀 "vmx"(例如 vmx.log.keepOld = "20"),并且所做编辑会影响 ESXi 主机上的所有虚拟机。

表 1. vmware.log 文件的可配置设置
参数 描述 示例 备注
logging

禁用所有虚拟机日志记录。

默认值是 logging = "TRUE"

要禁用虚拟机日志记录,请执行以下操作:

logging = "FALSE"

请勿使用此设置,因为禁用虚拟机日志记录会导致极难或无法获取对解决虚拟机问题的支持。如果由于某种原因需要使用此设置,则只能将其放置在虚拟机的 vmx 文件中。
log.throttleBytesPerSec

控制何时进行日志文件限制。当写入到 vmware.log 的速率在很长时间内超过指定的速率时,会进行日志文件限制。当控制虚拟机的 VMX 进程中的代码创建过多日志消息时,就会出现这种情况。此设置的默认值为 1 KB/秒。

出现日志限制时,您会在 vmware.log 文件中看到 <<< Log Throttled >>>

log.throttleBytesPerSec = "1500"

要禁用日志限制,请使用

log.throttleBytesPerSec = "0xFFFFFFFF"

日志文件限制可能会掩盖诊断受影响虚拟机存在的问题所需的信息。如果需要禁用日志限制,请将示例中的行放置在受影响虚拟机的 vmx 文件中。在调试会话结束后移除该行。
log.keepOld

控制要保留的旧 vmware.log 文件的数量。

log.keepOld = "20" 请勿将此设置的值设定为低于默认值 (10) 的值如果频繁修改或移动虚拟机,请考虑将此设置的值设置为 20 或以上。
log.rotateSize

控制 vmware.log 文件的最大大小(以字节为单位)。

log.rotateSize = "2500000"

要禁止限制 vmware.log 文件的最大大小,请使用

log.rotateSize = "0"

如果此设置的值低于 100000,可能会导致关键日志消息丢失并影响虚拟机性能。在 ESXi 7.x 及更低版本中,此设置的默认值不会对 vmware.log 文件的大小设置任何限制。在 ESXi 8.x 及更高版本中,此设置的默认值为 2048000。
log.fileName

控制虚拟机日志文件的名称和位置。

log.fileName = "myVMLog"

此设置会将虚拟机日志文件的名称从 vmware.log 更改为 myVMlog

log.fileName = "/vmfs/volumes/vol1/myVM/myVM.log"

此设置使用 myVM 作为文件名,将虚拟机日志文件保存到其他 VMFS 卷 (vol1) 上的目录。

请勿将日志文件放在虚拟机目录之外,以确保主机支持包收集会获取日志文件,日志文件对于调试虚拟机问题至关重要。
log.fileLevel

控制写入到 vmware.log 的消息的最低级别。每条日志消息都有关联的级别。低于指定设置的级别不会添加到虚拟机日志文件中。虚拟机消息日志级别为(按照受到的限制从高到低排序):

  • 错误
  • 警告
  • 注意
  • 信息(默认)
  • 琐事
  • 调试
  • debug1
  • debug2
  • debug3
  • debug4
  • debug5
  • debug6
  • debug7
  • debug8
  • debug9
  • debug10
log.fileLevel = "debug1"

请勿将级别设置为比“信息”受到更高限制的级别,以避免将调试虚拟机问题所需的消息筛选掉。仅当获得许可的支持人员请求时,才能设置为“信息”以下的级别。调试结束后,将此设置还原为“信息”。

log.filter.minLogLevel.<groupName>

控制专用调试消息的输出。

log.filter.minLogLevel.disklib = "debug5" 仅当获得许可的支持人员请求时(应提供一个或多个 <groupName> 参数),才能使用此设置。请在调试结束后移除此设置。
log.sysogID

允许向 ESXi 主机的系统日志记录器(例如 syslog)发送虚拟机日志消息。

log.syslogID = "vmx"

使用 "vmx" 作为此设置的值,以允许 ESXi syslog 守护进程 vmsyslogd 将这些消息发送到单独的日志文件。

log.syslogLevel

控制输出到 ESXi 主机的系统日志记录器(例如 syslog)的消息的最低级别。

log.syslogLevel = "debug" 此设置的级别和功能与 log.fileLevel 设置相同。

如何指定到远程主机的消息传输

(可选)可以将 ESXi 配置为将 syslog 消息发送到一个或多个远程主机(称为 syslog 收集器)来收集 syslog 消息,例如发送到 VMware vRealize Log Insight(以前称为 vCenter Log Insight)。
注: 最佳做法是将每个 ESXi 主机配置为将 syslog 消息发送到至少一个 syslog 收集器。这有助于确保在发生灾难性系统事件时保留消息,并且您可以通过各种方式处理 syslog 消息,例如实时分类和分析(例如,按类型、按时间跨度或计算机)或存档消息。

使用 Syslog.global.logHost 设置可定义远程主机规范。使用逗号 (,) 分隔多个远程主机规范。设置 Syslog.global.logHost 后,ESXi 主机将打开并保持与 syslog 收集器的连接,消息传输将立即开始。ESXi 生成 syslog 消息时,会将其写入到 ESXi 主机上的相应日志文件,并将该消息转发到所有已配置的 syslog 收集器。

除了 syslog 消息外,出于安全目的,还可以将审核消息传输到 syslog 收集器。审核记录会跟踪 ESXi 主机上与安全相关的活动。有关审核记录的详细信息,请参见 审核记录
注: 要确定是否需要设置审核记录以及如何设置,请咨询贵公司的安全响应团队。经认证的配置通常要求启用审核记录。

以下是 Syslog.global.logHost 远程主机规范的语法:

protocol://target[:port]
参数 描述 备注
protocol 指定网络连接协议。有效值为 udptcpssl ssl 协议指定对 syslog 消息传输进行加密。tcpudp 协议不会对传输进行加密。
注: 如果捕获 syslog 消息或审核消息对您的系统来说至关重要,请避免使用 udp 协议,因为 ESXi 外部的网络基础架构可能会丢弃 UDP 消息。
target

指定远程主机。您可以使用 IPv4 或 IPv6 地址或者主机名。

使用 IPv6 地址时,必须用方括号将其括起 ([xxx]),其中 xxx 是 IPv6 地址。
port (可选)指定要使用的远程主机端口。如果使用 UDP 或 TCP,则默认端口为 1514。如果使用 SSL,则默认端口是 514。如果选择使用 514 或 1514 以外的端口,则必须调整 ESXi 防火墙以打开该端口。 有关如何为每个远程主机规范中指定的端口打开 ESXi 防火墙的详细信息,请参见配置 ESXi 防火墙
远程计算机规范示例:
Syslog.global.logHost 字符串示例 备注
tcp://10.176.130.7:12345 使用 TCP/IP 和端口 12345 将 syslog 消息传输到 10.176.130.7。
tcp://[2001:db8:85a3:8d3:1319:8a2e:370:7348] 使用端口 1514 将 syslog 消息传输到 IPv6 地址。

tcp://[2001:db8:85a3:8d3:1319:8a2e:370:7348]:5432

使用端口 54321 将 syslog 消息传输到 IPv6 地址。
udp://company.com 使用 UDP 和端口 514 将 syslog 消息传输到 company.com

udp://company.com,tcp://10.20.30.40:1050

将 syslog 消息传输到两个远程主机。第一个远程主机使用 UDP 通过端口 514 与 company.com 通信。第二个远程主机使用 TCP 通过端口 1050 与 IPv4 地址 10.20.30.40 通信。

ssl://company.com

使用 SSL (TLS) 和端口 514 将 syslog 消息传输到 company.com

最大消息传输长度

如果使用 UDP,则 IPV4 的最大 syslog 消息传输长度为 480 字节,IPV6 的最大传输长度为 1180 字节。

对于 TCP 或 SSL,默认的最大 syslog 消息传输长度为 1 千字节 (KiB)。可以使用 Syslog.global.remoteHost.maxMsgLen 参数增加此长度。最大值为 16 KiB。长度超过 16 KiB 的消息会被截断。
注: 如果需要增加最大传输长度,最佳做法是仅增加所需长度。
如果 ESXi 外部的网络基础架构和 syslog 基础架构无法处理长度超过 1 KiB 的消息,则增加最大 syslog 消息长度可能会导致出现问题。
注: 由于数据包长度限制以及外部网络基础架构可能会丢弃消息,因此最佳做法是避免使用 UDP 传输 syslog 消息。

配置通过 SSL 传输到远程主机时的证书注意事项

将 ESXi 配置为使用 SSL 将 syslog 消息传输到远程主机时,必须将每个远程主机的 SSL 证书添加到 ESXi 主机 CA 存储中。有关详细信息,请参见 ESXi 主机的证书管理使用 ESXCLI 管理 CA 证书
注: 有关如何配置收集器以使用 SSL 和私钥安全地接收 syslog 消息的信息,请参见 syslog 收集器文档。

其他 SSL 传输参数

符合安全认证要求的 ESXi 系统可能要求启用 X509 CRL 检查。您可以通过将默认值 false 更改为 true 来启用高级设置 Syslog.global.certificate.strictX509ComplianceSyslog.global.certificate.checkCRL。由于实施限制,如果您通过使用 Syslog.global.certificate.checkSSLCerts 设置启用了 CRL 检查,则证书链中的所有证书都必须提供 CRL 链接。默认情况下,该设置处于启用状态。您可以通过更改 false 设置来停用 SSL 证书检查,但这不是最佳做法。对与远程主机的通信进行故障排除时,可能需要禁用 SSL 证书检查,但只能在有限的一段时间内禁用该检查。

查找 Syslog 守护进程错误和状态信息的位置

ESXi syslog 守护进程使用日志文件 /var/run/log/vmsyslogd.log 存储状态和错误信息,包括丢弃的消息。如果启用了审核记录传输,则 syslog 守护进程还会发送与其操作(例如守护进程启动、停止和错误情况)相关的审核记录,使您可以验证 syslog 守护进程是否正常运行。

如何更改默认的 syslog 日志文件存储区域

默认的 syslog 日志文件存储区域是每个 ESXi 主机的本地 /var/run/log。可以使用 Syslog.global.logDir syslog 配置变量更改默认的 syslog 日志文件存储区域,但前提是该位置位于持久存储上。如果将 Syslog.global.logDir 配置为多个 ESXi 主机共同用于存储其 syslog 日志文件的持久存储,请将 Syslog.global.logDirUnique 设置更改为 true 以防止混合日志。Syslog.global.logDirUnique 设置可确保每台 ESXi 计算机添加到 Syslog.global.logDir 路径时有唯一的名称,从而与其他主机的日志文件分开。

远程主机的 syslog 消息队列和消息丢弃数

syslog 排放启动后,除非ESXi重新引导和失败或 syslog 重新配置停止,否则它们永远不会停止。

ESXi 使用容量有限的基于内存的队列机制将 syslog 消息和审核记录传输到远程主机。此机制使 vmsyslogd 服务能够处理短时间内激增的消息或无需丢弃数据即可快速解决的网络连接问题。

当连接问题持续较长时间或入站数据流持续超过队列机制允许的限制时,vmsyslogd 服务会丢弃一些 syslog 消息。

要最大限度减少此类丢弃,请将 vmsyslogd 日志文件保存在存储速度最快的存储上,并在端到端带宽等于或大于 1 GigE 的网络上配置 syslog 收集器。

如果某个应用程序生成的日志过多,请提交支持服务请求进行分析和更正。

您可以在 syslog 守护进程日志文件中查看有关消息丢弃的统计信息。

您可以在 /var/run/log/vmsyslogd-dropped.log 中查看丢弃的消息。此日志文件具有特定的保留设置,与特定于程序的保留参数的设置类似。丢弃的消息日志文件保留参数为 Syslog.global.droppedMsgs.fileRotateSyslog.global.droppedMsgs.fileSize