有没有办法让 Rsyslog 服务器记录除 smartd 消息之外的所有消息。我只希望不记录“当前无法读取(待处理)的扇区”。
答案1
是的,有。记录这些消息的规则需要放在过滤器内,如下所示:(假设 smartd 消息记录在 /var/log/smartd.log 中)
if ($programname == "smartd") then {
if not ($msg contains "Currently unreadable (pending) sectors") then {
*.* /var/log/smartd.log
}
stop
}
上述代码将匹配来自 smartd 服务的所有消息。如果消息中没有该字符串,它将把所有消息记录在 /var/log/smartd.log 中,但如果消息中包含该字符串,则不会记录。超过此点的所有日志都将被停止规则删除。
您可以将这段代码放在 /etc/rsyslog.d/ 中以 .conf 结尾的文件中,例如 01-smartd.conf。由于 rsyslog.conf 会加载此目录中所有以 .conf 结尾的文件,因此将首先读取以 00 到 49 之间开头的文件,而不是默认的 50-default.conf。
请注意,如果代码中有停止规则,则如果先读取,消息将不会到达 50-default.conf 中的规则,因此不会存在重复的消息。