Nginxのログをリモートサーバへ送信

シスログサーバーはrsyslogを利用する。

NGINXはバージョン1.17以降とその前で設定が異なるようであるが、1.14でも、この記載でリモートへログ転送が出来ている。

送信側

/etc/nginx/nginx.confファイルに1行追加する。仮想ホスト毎にログ設定を行なっている場合には、/etc/nginx/sites-available/仮想ホスト設定ファイルに追加する。

vi /etc/nginx/nginx.conf

access_log syslog:server=xxx.xxx.xxx.xxx:514,facility=local7,tag=nginx,severity=info;

facilityのlocal7、severityのinfoは例

受信側

ここでは、/var/log/hosts/ホスト名.log に受信ログを振り分けて保存する。

vi /etc/rsyslog.conf

#################
#### MODULES ####
#################
module(load="imuxsock") # provides support for local system logging
module(load="imklog")   # provides kernel logging support
#module(load="immark")  # provides --MARK-- message capability
# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")
#### TEMPLATES ####
$template RemoteHost,"/var/log/hosts/%HOSTNAME%.log"
:fromhost-ip, !isequal, "127.0.0.1" -?RemoteHost
& ~

vi /etc/rsyslog.d/nginx.conf

input(type="imudp" port="514" address=["xxx.xxx.xxx.xxx","yyy.yyy.yyy.yyy"] ruleset="local7")

アドレスが1つの場合には、

input(type="imudp" port="514" address="xxx.xxx.xxx.xxx" ruleset="local7")