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
}

관련 정보