如何阻止rsyslog接收vCenter日志时生成异常文件夹?
问题:rsyslog接收vCenter日志时生成大量无关文件夹
我在Fedora 40服务器上安装了rsyslog,希望将其用作网络中的日志服务器。
初始rsyslog模板配置如下(已启用TCP和UDP模块):
$template PerHostLog,"/var/log/syslog/%HOSTNAME%/%PROGRAMNAME%.log" if $fromhost-ip startswith '10.' then -?PerHostLog & STOP
之后在vCenter 8中启用并关联该日志服务器测试转发功能,日志已保存到预期路径(vCenter主机名为srv05tff-vcenter-01),但同时生成了大量疑似来自vCenter的无效文件夹:
root@srv76tff-log-10:/var/log/syslog# ll drwx------. 2 root root 47 3. Okt 11:53 al drwx------. 2 root root 24 3. Okt 12:24 amples drwx------. 2 root root 30 3. Okt 13:11 ations drwx------. 2 root root 24 3. Okt 12:03 ax drwx------. 2 root root 4096 3. Okt 12:24 srv05tff-vcenter-01 # 期望保留的文件夹 drwx------. 2 root root 26 3. Okt 12:03 Filter drwx------. 2 root root 24 3. Okt 12:03 in drwx------. 2 root root 43 3. Okt 13:11 l drwx------. 2 root root 26 3. Okt 13:05 les drwx------. 2 root root 46 3. Okt 12:50 max drwx------. 2 root root 24 3. Okt 12:03 mean drwx------. 2 root root 25 3. Okt 12:24 min drwx------. 2 root root 24 3. Okt 12:14 n drwx------. 2 root root 19 3. Okt 11:23 nDetails drwx------. 2 root root 30 3. Okt 13:16 ns drwx------. 2 root root 30 3. Okt 11:22 ons drwx------. 2 root root 30 3. Okt 11:58 Operations drwx------. 2 root root 70 3. Okt 13:31 otal drwx------. 2 root root 97 3. Okt 14:07 tal drwx------. 2 root root 22 3. Okt 12:19 tenance drwx------. 2 root root 30 3. Okt 12:09 tion drwx------. 2 root root 24 3. Okt 11:43 total drwx------. 2 root root 23 3. Okt 13:26 ts drwx------. 2 root root 26 3. Okt 14:07 umSamples
我尝试修改模板配置转换特殊字符,测试了:clean、:?-unknown:clean和:escape-cc等选项,但均无效。当前使用的配置仍未解决问题:
$template PerHostLog,"/var/log/syslog/%HOSTNAME:clean%/%PROGRAMNAME:replace:([()\])=_:clean%.log" if $fromhost-ip startswith '10.' then -?PerHostLog & STOP
请问为何这些文件夹会持续充斥rsyslog存储路径?
问题原因及解决方法
问题根源
vCenter转发的部分日志中,HOSTNAME字段并非完整的主机名,而是日志内容里的片段(比如指标名称、操作名称的一部分)。这是因为vCenter的某些日志源没有正确填充HOSTNAME字段,导致rsyslog误把这些片段当作主机名创建了文件夹。
解决步骤
替换为更可靠的
fromhost字段fromhost记录的是发送日志设备的DNS名称或IP地址,不会被日志内容篡改,比HOSTNAME更稳定。修改模板:$template PerHostLog,"/var/log/syslog/%fromhost:clean%/%PROGRAMNAME:replace:([()\])=_:clean%.log"添加字段合法性检查
确保只处理字段非空的日志,避免空值或无效值导致异常文件夹:if $fromhost-ip startswith '10.' and $fromhost != '' then -?PerHostLog & STOP过滤特定日志源(可选)
如果仍有异常日志,可通过PROGRAMNAME字段过滤,只保留vCenter核心服务的日志:if $fromhost-ip startswith '10.' and $fromhost != '' and ($PROGRAMNAME contains 'vpxd' or $PROGRAMNAME contains 'vcsa') then -?PerHostLog & STOP清理已生成的无效文件夹
执行命令删除无关文件夹(注意不要误删目标文件夹):cd /var/log/syslog && rm -rf al amples ations ax Filter in l les max mean min n nDetails ns ons Operations otal tal tenance tion total ts umSamples
内容的提问来源于stack exchange,提问作者REVECT7
相关产品推荐
相关产品推荐

