web-dev-qa-db-ja.com

rsyslogでSmartdメッセージを無視する方法

Rsyslogサーバーがsmartdメッセージを除くすべてのメッセージをログに記録する方法はありますか? 「現在読み取れない(保留中の)セクター」だけをログに記録したくない。

1
OmiPenguin

はいあります。これらのメッセージをログに記録するルールは、次のようなフィルター内にある必要があります:( 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に記録されますが、その文字列が含まれている場合、ログに記録されません。この時点を過ぎたすべてのログは、停止ルールによって削除されます。

このコードは、01-smartd.confのように、.confで終わる/etc/rsyslog.d/内のファイルに入れることができます。 rsyslog.confは、.confで終わるこのディレクトリ内のすべてのファイルをロードするため、00から49までのファイルがデフォルトの50-default.confよりも最初に読み取られます。

コードに停止ルールがある場合、最初に読み取った場合、メッセージは50-default.confのルールに到達しないため、重複するメッセージは存在しないことに注意してください。