こんにちは。サイオステクノロジーの小川です。
今回はTomcatのcatalina.outをsyslogサーバーに転送する方法について書きたいと思います。
syslogへの出力方法
Tomcatライブラリーのデフォルトではsyslogにログを転送できません。syslogでのログを出力するにはlog4j2ライブラリーを利用します。下記の図のようにlog4j2を経由することで標準出力ログとsyslogのログを出力することができます。
log4j2で必要最低限のモジュールは
- log4j-api
- log4j-core
になります。
今回はlog4j2のApplication Serverモジュールを利用して、CATALINA_HOME直下の既存ディレクトリ内はほぼいじらずに、新しくlog4j2というディレクトリを作成し、log4j2配下のファイルを統合する設定を記載します。
設定環境
今回検証で利用した環境は以下になります。
OS | CentOS 7.7 |
ミドルウェア | Apache 2.4.6 |
Apache tomcat 9.0.30 | |
Open JDK 11.0.5 | |
log4j 2.13.0 | |
rsyslog 8.24.0 |
ApacheとApache Tomcatの設定は終わっていることを前提とします。
tomcatのlog4j2設定
Apache Log4j 2を下記URLからダウンロードします。
https://logging.apache.org/log4j/2.x/download.html
ダウンロードしたら、解凍します。
# tar -zxvf apache-log4j-2.13.0-bin.tar.gz
CATALINA_HOME配下にlog4j2ディレクトリを作成します。
# mkdir /usr/local/tomcat/log4j2
apache-log4j-2.13.0-binディレクトリに移動します。
# cd apache-log4j-2.13.0-bin
log4j2配下にlibディレクトリを作成し、apache-log4j-2.13.1-bin配下の
- log4j-api-2.13.0.jar
- log4j-core-2.13.0.jar
- log4j-appserver-2.13.0.jar
上記3つのjarファイルをlibディレクトリ配下に置きます。
log4j2ディレクトリの設定を統合するために、/usr/local/tomcat/bin/setenv.shにCLASSPATHの設定を追記します。
# vim /usr/local/tomcat/bin/setenv.sh
setenv.shを読み込みます。
# source /usr/local/tomcat/bin/setenv.sh
log4j2配下にconfディレクトリを作成します。
# mkdir /usr/local/tomcat/log4j2/conf
ログ出力ファイルを作成し、以下のように設定します。今回はファシリティをLOCAL1 で設定します。
# vim /usr/local/tomcat/log4j2/conf/log4j2.xml
ローカルの出力ログのローテーション設定をlogrotateで設定する場合は、RollingFile Appenderの設定部分(<RollingFile>~</RollingFile>)とLoggerの<AppenderRef ref=”catalina”/>をコメントアウトし、logrotateでローテーションの設定をしてください。
tomcatを再起動します。
# systemctl restart tomcat
以上でtomcatの設定は完了です。
syslogサーバーでの設定
syslogサーバーでLOCAL1のログを受信する設定をします。
ポート514のUDPを開放し、local1の出力先を指定します。
# vim /etc/rsyslog.conf # Provides UDP syslog reception $ModLoad imudp $UDPServerRun 514 local1.* /var/log/catalina.out
rsyslogを再起動します。
# systemctl restart rsyslog
以上で設定は完了です。
tomcatを再起動するとログがsyslogサーバーに転送されていることが確認できます。
~参考URL~
https://logging.apache.org/log4j/2.x/download.html
https://logging.apache.org/log4j/log4j-2.11.2/log4j-appserver/index.html
https://logging.apache.org/log4j/2.x/manual/appenders.html#SyslogAppender