Есть ли способ, которым сервер Rsyslog регистрирует все сообщения, кроме сообщений smartd. Я только хочу, чтобы «нечитаемые в настоящее время (ожидающие) сектора» не регистрировались.
Да, есть. Правило, которое регистрирует эти сообщения, должно быть внутри фильтра, например этого: (Предположим, что сообщения 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, поэтому дублирующихся сообщений не будет.