こんにちは。サイオステクノロジーの小川です。
Shibboleth IdPのログをsyslogサーバーに転送したいという要望があり、調査したので備忘録としてその設定を方法を紹介します。
今回の検証で利用した環境は以下になります。
OS | CentOS 7.7 |
ミドルウェア | Apache 2.4.6 |
Apache tomcat 9.0.30 | |
Open JDK 11.0.5 | |
Shibboleth IdP 3.4.6 | |
rsyslog 8.24.0 |
Shibboleth IdPサーバーの設定
Shibboleth IdPのログ出力の設定を行っているファイルは/opt/shibboleth-idp/conf/logback.xmlになります。ここにsyslogに転送する設定を追加します。
設定項目の説明は以下になります。
<appender name="名前を設定 " class="ch.qos.logback.classic.net.SyslogAppender"> <syslogHost>syslogサーバーのホスト名/IP</syslogHost> <port>syslogサーバーのポート番号</port> <facility>ファシリティ</facility> <suffixPattern>ログ出力フォーマット</suffixPattern> </appender>
<root level=”ログレベル”> <appender-ref ref=”appenderで指定した名前” /> </root>
上記のログ出力フォーマットはShibboleth IdPの標準出力のログと同じ形式で出力する設定になります。
<suffixPattern>%mdc{idp.remote_addr} – %level [%logger:%line] – %msg%n%ex{short}</suffixPattern>の出力ログ
suffixPatternのデフォルトとなっているフォーマットは以下となっています。
<suffixPattern>[%thread] %logger %msg</suffixPattern>
上記の出力ログは以下のように代わります。ログレベルの表示がなくなります。
Syslogサーバーでファシリティとそのログの保存先を指定してあげれば、Shibboleth IdPの動作ログ(idp-process.log)を転送することができます。また送信ログ(idp-audit.log)をsyslogサーバーに転送したいという場合は
<root level="INFO"> <appender-ref ref="SYSLOG" /> </root>
を追記するのではなく、
<logger name="Shibboleth-Audit" level="ALL"> <appender-ref ref="${idp.audit.appender:-IDP_AUDIT}"/> </logger>
に<appender-ref ref=”SYSLOG” />を追記します。
<logger name="Shibboleth-Audit" level="ALL"> <appender-ref ref="${idp.audit.appender:-IDP_AUDIT}"/> <appender-ref ref="SYSLOG" /> </logger>
syslogサーバーの設定
Syslogサーバー側の設定は通信ポート514をUDPで受け付け、logback.xmlで設定したファシリティと出力ログレベルを設定し、出力先ファイルを指定します。
今回は/var/log/rsyslog.logに転送されたログを出力します。
設定を変更したら再起動します。
# systemctl restart rsyslog
tomcatを再起動しShibboleth IdPのログがsyslogサーバーに出力されていることを確認します。
# systemctl restart tomcat
出力先に指定したファイルが作成されログが転送されていることが確認できました。
以上、Shibboleth IdPのログをsyslogサーバーに転送する設定でした。