0

nginx のアクセス ログをリモートの syslog-ng サーバーに送信したい。各側(サーバークライアント)にsyslog-ngをインストールしました。クライアント: 10.10.10.2 サーバー: 10.10.10.1 一部のログ ファイル (メッセージ、syslog、mail.log) はクライアントからサーバーに正常に送信されますが、nginx ログは送信されません。サーバー構成:

source s_net {
   tcp(ip(0.0.0.0) port(1999)
   tls( key_file("/etc/syslog-ng/key.d/privkey.pem")
        cert_file("/etc/syslog-ng/cert.d/cacert.pem")
        peer_verify(optional-untrusted)) ); };

destination d_net_nginx_access { file("/mnt/syslog_storage/HOSTS/$HOST
/nginx.access.log"); };

filter f_nginx_access { program("nginx") };

log { source(s_net); filter(f_nginx_access); destination(d_net_nginx_access); };

クライアント構成:

    source s_src {
       system();
       internal();
};

destination tls_log {
tcp("10.10.10.1" port(1999)
tls( ca_dir("/etc/syslog-ng/ca.d")) );};

destination d_nginx_access { file("/var/log/nginx/nginx.access.log"); };

filter f_nginx { program("nginx"); };

log { source(s_src); filter(f_nginx); destination(d_nginx_access); };

# All messages send to a remote site
#
log { source(s_src); destination(tls_log); };

何が問題なのか今はわかりません。前もって感謝します。

4

2 に答える 2

1

問題は、クライアントで、宛先として Nginx ログにアクセスすることです。目的地は、名前が示すように、物を置く場所です。syslog-ng は宛先を読み取りません。メール ログと残りのログがネットワーク経由で送信される理由は、syslog()直接ログに記録されるためです。そのため、syslog-ng は別のファイルを読み取る必要がありません。Nginx はこのサービスを使用しませんsyslog()(ただし、そのように構成した場合、最近のバージョンには syslog プラグインがあります)、nginx ログは syslog-ng に到達しないため、設定したフィルターもそれらをキャッチしません。

次に、nginx ログを転送するには、クライアントの nginx の宛先を次のように変更します。

source s_nginx_access { file("/var/log/nginx/nginx.access.log" flags(no-parse)); }; log { source(s_src); source(s_nginx_access); destination(tls_log); };

これflags(no-parse)は、nginx が通常の syslog 形式でログを記録しないためです。

于 2014-10-21T10:07:29.550 に答える