syslog-ng での dpkg ログのフィルタリング

syslog-ng での dpkg ログのフィルタリング

私は を初めて使用しておりsyslog-ng、 を設定しています。ここでは、 、および のログを受信して​​います。 とのsyslog-ngログを取得できましたが、ログを別のファイルに書き込むことができず、と の両方のログ ファイルに書き込まれています。 サーバーの構成ファイルは次のとおりです。syslogauth.logdpkg.logsyslogauth.logdpkgdpkgsyslog

options {
    create_dirs(yes);
    owner(root);
    group(root);
    perm(0640);
    dir_owner(root);
    dir_group(root);
    dir_perm(0750);
};

source s_dl {
   network (
   transport("tcp")
   port(3993)
);
};

filter f_dpkg{
    tags("dpkg");
};

destination d_host-specific {

  file("/var/log/servers/$HOST/$YEAR/$MONTH/$HOST-$YEAR-$MONTH-$DAY.log");
};

destination d_syslog {
        file("/var/log/servers/$HOST/$YEAR/$MONTH/$HOST-$YEAR-$MONTH-$DAY-syslog.log");
};

destination d_dpkg {
    file("/var/log/servers/$HOST/$YEAR/$MONTH/$HOST-$YEAR-$MONTH-$DAY-dpkg.log");
};

log {
    source(s_dl);
    filter(f_auth);
    destination(d_host-specific);
};

log {
    source(s_dl);
    filter(f_syslog3);
    destination(d_syslog);
 };

log{
    source(s_dl);
    filter(f_dpkg);
    destination(d_dpkg);
};

syslog-ng クライアントの設定ファイルは次のとおりです。

 source s_dpkg {
   file('/var/log/dpkg.log'); tags('dpkg'));
 };
 destination d_net { tcp("192.168.48.15" port(3993)); };
 filter f_tag { tags("dpkg"); };
 log { source(s_src); filter(f_auth); destination(d_net);};
 log { source(s_src); filter(f_syslog3); destination(d_net);};
 log { source(s_dpkg); filter(f_test); destination(d_net);};

どなたか、私の間違いがどこにあるか、または詳細を取得する適切な方法は何か、教えていただけませんか。注: 同じマシンから異なるログを受け入れるために新しいポートを追加し続けることはできないため、単一のホストのすべてのログを受け入れるために同じポートを使用する必要があります。

答え1

問題は、クライアントが dpkg メッセージに追加するタグがサーバー側に転送されないことです (元のメッセージの一部ではないため)。

また、元の dpkg ログでは syslog メッセージの PROGRAM フィールドが埋められないため、このタグ付け全体が必要であるように思われます。したがって、私見では、この問題を解決する最も簡単な方法は次のとおりです。

  • クライアント上のソースs_dpkgでprogram-override("dpkg")オプションを使用します(syslog-ng-ose の最新ガイド)を使用して、dpkgメッセージのPROGRAMフィールドを適切に設定します。
  • サーバーでは、タグ フィルターの代わりにプログラム ("dpkg") フィルターを使用します。

HTH

関連情報