在vSAN环境中,如果你突然发现大量日志消息发送到syslog服务器时丢失,并且在ESXi主机的vmkernel.log中看到类似\”vmsyslog logger lost ### log messages\”的错误信息,那么你可能正在遭遇一个比较麻烦的问题。
其实呢,这个问题的根源并不复杂。vmsyslogd守护进程无法处理某些vSAN进程(特别是cmmdsTimeMachineDump和vsandevicemonitord)生成的海量日志。这些过多的日志会饱和syslog缓冲区,导致数据包在传输到远程syslog收集器之前就被丢弃了。
直接开干,解决这个问题的方法是在受影响的ESXi主机上实施syslog日志过滤,以抑制高容量的TimeMachineDump消息。以下是具体步骤:
1. 首先添加针对TimeMachineDump的特定过滤器:
esxcli system syslog config logfilter add --filter="10|cmmdsTimeMachineDump|.*"
2. 然后启用日志过滤功能:
esxcli system syslog config logfilter set --log-filtering-enabled=true
3. 最后重新加载syslog守护进程以应用更改:
esxcli system syslog reload
这个方法亲测有效,能够稳定地解决日志丢失问题。需要注意的是,过滤配置是针对每个ESXi主机单独设置的,所以你需要在集群中的所有受影响主机上执行这些命令。
另外,如果你需要检查当前的日志过滤配置,可以使用以下命令:
esxcli system syslog config logfilter list
这个命令会列出所有已配置的日志过滤器,让你可以确认设置是否正确应用。
总结一下,vSAN环境中的syslog日志丢失问题通常是由cmmdsTimeMachineDump进程生成的大量日志消息导致的。通过实施适当的日志过滤策略,你可以有效地解决这个问题,并确保syslog服务器能够正常接收和处理日志消息。







