在 AWS 中 Ubuntu 18.04 的一个新实例上,我通过 apt 安装了 tomcat9。我正在替换运行 tomcat7 的 14.04 Ubuntu 安装。由于我的应用程序的性质,我在 /data/ebs1 下安装了一个非常大的磁盘。在这个磁盘上,我设置了一个文件夹来存放一组非常大的 tomcat 日志。
/data/ebs1/tomcat-logs
将日志记录移到这里让我头疼。看来 tomcat9 已设置为记录到 syslog。所以请耐心等待,我将尝试深入研究这里的配置问题。
这是我的/etc/systemd/system/tomcat9.service
#
# Systemd unit file for Apache Tomcat
#
[Unit]
Description=Apache Tomcat 9 Web Application Server
Documentation=https://tomcat.apache.org/tomcat-9.0-doc/index.html
After=network.target
[Service]
# Configuration
Environment="CATALINA_HOME=/usr/share/tomcat9"
Environment="CATALINA_BASE=/var/lib/tomcat9"
Environment="CATALINA_TMPDIR=/tmp"
Environment="JAVA_OPTS=-Djava.awt.headless=true"
EnvironmentFile=-/etc/default/tomcat9
# Lifecycle
Type=simple
ExecStartPre=+/usr/libexec/tomcat9/tomcat-update-policy.sh
ExecStart=/bin/sh /usr/libexec/tomcat9/tomcat-start.sh
SuccessExitStatus=143
Restart=on-abort
# Logging
SyslogIdentifier=tomcat9
# Security
User=tomcat
Group=tomcat
PrivateTmp=yes
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
LogsDirectory=tomcat9
LogsDirectoryMode=750
CacheDirectory=tomcat9
CacheDirectoryMode=750
ProtectSystem=strict
ReadWritePaths=/etc/tomcat9/Catalina/
ReadWritePaths=/var/lib/tomcat9/webapps/
ReadWritePaths=/data/ebs1/
[Install]
WantedBy=multi-user.target
我在这里唯一更改的是将其添加data/ebs1/
到 ReadWritePaths 列表中。此文件概述了 SyslogIdentifier tomcat9
。
并且为 tomcat9 设置了一个自定义处理程序/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" {
/data/ebs1/tomcat-logs/catalina.out;TomcatFormat
stop
}
我将其从 /var/log/tomcat9 更改为 /data/ebs1/tomcat-logs。
所以现在当我查看 /data/ebs1/tomcat-logs 时,我会看到 catalina 带日期戳的日志文件,catalina.2020-03-25.log
但没有 catalina.out。而且 catalina 带日期戳的日志文件并不包含所有内容。所以有些日志会转到那里,有些日志仍会转到 syslog。我希望让所有日志都转到我的 catalina.out。我甚至不知道谁负责创建带日期戳的 catalina 文件。Syslog?Tomcat?我担心的是,如果我的日志仍转到 /var/log/syslog,我的磁盘很快就会被占满。
谢谢你!
答案1
好吧,事实证明我发布的配置确实正确。但我遇到了一些问题。
journalctl -u rsyslog
显示 rsyslog 对新的 catalina.out 没有写入权限。 adm
是文件夹上的组(幸运的是 syslog 也在该组中)。添加组写入权限解决了这个问题。
因此,即使 /etc/rsyslog.d/tomcat9.conf 中有一个“stop”,我仍然可以在 /var/log/syslog 中获取输出。我没有意识到的是,/etc/rsyslog.conf 从 /etc/rsyslog.d/ 加载配置文件姓名顺序。/etc/rsyslog.d/ 的内容如下:
20-ufw.conf
21-cloudinit.conf
50-default.conf
tomcat9.conf
我刚刚将文件重命名为“default”,一切正常。/var/log/syslog 中不再有日志!
20-ufw.conf
21-cloudinit.conf
30-tomcat9.conf
50-default.conf
不管怎样,给自己击掌吧。