Systemd / rsyslogロギングが期待どおりに機能しません。

Systemd / rsyslogロギングが期待どおりに機能しません。

私はリポジトリからTomcat9を展開した非常に普通のUbuntu 20.04LTSボックスを持っています。デフォルトでは、これは/var/log/tomcat9/にログを書き込むように設定されているように見え、実際にはログファイルがあります。しかし、これには私が期待する情報のほんの一部しか含まれていません。残りはsystemctl status tomcat9/var/log/syslogの出力で見ることができ、/var/log/syslogに書き込まれます。

提供されたユニットファイルの唯一の関連コンテンツは次のとおりです。

SyslogIdentifier=tomcat9

Tomcatをインストールすると、....を含む/etc/rsyslog.d/tomcat9.confも作成されます。

# Send Tomcat messages to catalina.out when using systemd
$template TomcatFormat,"[%timegenerated:::date-year%-%timegenerated:::date-month%-%timegenerated:::date-day% %timegenerated:::date-hour%:%timegenerated:::date-minute%:%timegenerated:::date-second%] [%syslogseverity-text%]%msg%\n"

:programname, startswith, "tomcat9" {
  /var/log/tomcat9/catalina.out;TomcatFormat
  stop
}

出力例systemctl status tomcat9

● tomcat9.service - Apache Tomcat 9 Web Application Server
     Loaded: loaded (/lib/systemd/system/tomcat9.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/tomcat9.service.d
             └─override.conf
     Active: active (running) since Fri 2022-04-08 13:07:39 UTC; 17min ago
       Docs: https://tomcat.apache.org/tomcat-9.0-doc/index.html
    Process: 1006 ExecStartPre=/usr/libexec/tomcat9/tomcat-update-policy.sh (code=exited, status=0/SUCCESS)
   Main PID: 1026 (java)
      Tasks: 53 (limit: 2274)
     Memory: 332.9M
     CGroup: /system.slice/tomcat9.service
             └─1026 /usr/lib/jvm/java-8-openjdk-amd64/bin/java -Djava.util.logging.config.file=/var/lib/tomcat9/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.C>

Apr 08 13:20:14 myhost.example.com tomcat9[1026]: [cfPullService] DEBUG 13:20:14 ConnectionManager.openConnection(444) | opening JDBC connection
Apr 08 13:20:14 myhost.example.com tomcat9[1026]: [cfPullService] DEBUG 13:20:14 JDBCTransaction.begin(87) | current autocommit status: true
Apr 08 13:20:14 myhost.example.com tomcat9[1026]: [cfPullService] DEBUG 13:20:14 JDBCTransaction.begin(90) | disabling autocommit
Apr 08 13:20:14 myhost.example.com tomcat9[1026]: [cfPullService] DEBUG 13:20:14 JDBCTransaction.commit(134) | commit
Apr 08 13:20:14 myhost.example.com tomcat9[1026]: [cfPullService] DEBUG 13:20:14 JDBCTransaction.toggleAutoCommit(227) | re-enabling autocommit

上記の「cfPullService」は、デプロイされたJavaコード(実際にはブラックボックス)に由来し、時には他の値を含めることができます。

そして/var/log/syslogのサンプルエントリ...

Apr  8 13:20:12 myhost tomcat9[1026]: [cfPullService] INFO 13:20:12 RunSearchManagerImpl.runEarlyEngagementSearch(165) | Finished saving early engagement notices.
Apr  8 13:20:12 myhost tomcat9[1026]: [cfPullService] INFO 13:20:12 RunSearchManagerImpl.runPipelineSearch(176) | Running pipeline search

提供された/etc/rsyslog.d/tomcat9.confは次のとおりです。

# Send Tomcat messages to catalina.out when using systemd
$template TomcatFormat,"[%timegenerated:::date-year%-%timegenerated:::date-month%-%timegenerated:::date-day% %timegenerated:::date-hour%:%timegenerated:::date-minute%:%timegenerated:::date-second%] [%syslogseverity-text%]%msg%\n"

:programname, startswith, "tomcat9" {
  /var/log/tomcat9/catalina.out;TomcatFormat
  stop
}

システムオーバーレイファイルを作成し、デーモンのリロードを適用してみました...

[Service]
StandardOutput=syslog
StandardError=syslog

しかし、これは行動には影響しません。

私がどうする

  1. Tomcatの出力を/var/log/tomcat9のファイルにインポートします。
  2. Tomcat出力を/var/log/syslogに送信するのを停止します。

ベストアンサー1

問題の一部が説明されているようです。バグ #1861881

これにより、システムログからエントリを除外してジョブログファイルを取得できました。

  1. /etc/rsyslog.d/tomcat.confから内容を削除します(自動パッチによる回復を防ぐためにファイルを空白にしてください)。
  2. 内容を /etc/rsyslog.d/12-tomcat9.conf に入れて (50-default.conf 以前にロードされたことを確認するために) "action 'action-11-builtin:omfile' が中断されるのを防ぎます (モジュール ' builtin: omfile' ), 再試行 0. この前に「理由」を知らせるメッセージが必要です。
  3. 権限の問題を回避するには、/var/log/tomcat9/catalina.outから/var/log/tomcat.logにパスを変更します(syslogユーザーは/var/log/tomcat9に書き込めません)。
  4. 次の内容で新しい/etc/logrotate.dファイルを追加します。
/var/log/tomcat.log
{
        rotate 7
        daily
        missingok
        notifempty
        delaycompress
        compress
        postrotate
                /usr/lib/rsyslog/rsyslog-rotate
        endscript
}

おすすめ記事