首先tomcat对我们有用的日志文件主要是catalina和localhost_access_log,下面主要介绍如何收集这2种日志

tomcat使用log4j日志输出

先去这个地址下载对应tomcat版本的相关jar包:http://archive.apache.org/dist/tomcat/

就是我下面图片红框标注的2个jar

我们进入tomcat的lib目录下,将tomcat-juli-adapters.jar放入到里面

然后在lib目录下执行

wget https://archive.apache.org/dist/logging/log4j/1.2.17/log4j-1.2.17.jar

接着进入tomcat的bin目录,先将原本里面的tomcat-juli.jar重命名备份,然后再将我们刚刚下载的tomcat-juli.jar放入到里面

mv tomcat-juli.jar tomcat-juli.jar.bak
#将刚刚下载的tomcat-juli.jar放进bin目录

进入tomcat的conf目录

mv logging.properties  logging.properties.bak
# 在<Context>标签中添加 swallowOutput 属性 ,即 <Context swallowOutput="true">
vim context.xml

进入tomcat的lib目录

vim log4j.properties

log4j.rootLogger = INFO, CATALINA

# Define all the appenders
log4j.appender.CATALINA=org.apache.log4j.RollingFileAppender
log4j.appender.CATALINA.File=${catalina.base}/logs/catalina
log4j.appender.CATALINA.layout=org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern={"time":"%d{yyyy-MM-dd HH:mm:ss,SSS}","logtype":"%p","loginfo":"%c:%m"}%n
log4j.appender.CATALINA.MaxFileSize=2MB
log4j.appender.CATALINA.MaxBackupIndex=10

log4j.appender.LOCALHOST = org.apache.log4j.DailyRollingFileAppender
log4j.appender.LOCALHOST.File = ${catalina.base}/logs/localhost
log4j.appender.LOCALHOST.Append = true
log4j.appender.LOCALHOST.Encoding = UTF-8
log4j.appender.LOCALHOST.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayout
log4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.MANAGER = org.apache.log4j.DailyRollingFileAppender
log4j.appender.MANAGER.File = ${catalina.base}/logs/manager
log4j.appender.MANAGER.Append = true
log4j.appender.MANAGER.Encoding = UTF-8
log4j.appender.MANAGER.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.HOST-MANAGER = org.apache.log4j.DailyRollingFileAppender
log4j.appender.HOST-MANAGER.File = ${catalina.base}/logs/host-manager
log4j.appender.HOST-MANAGER.Append = true
log4j.appender.HOST-MANAGER.Encoding = UTF-8
log4j.appender.HOST-MANAGER.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Encoding = UTF-8
log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

# Configure which loggers log to which appenders
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost] = INFO, LOCALHOST
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager] =\
INFO, MANAGER
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager] =\
INFO, HOST-MANAGER

到此为止,我们已经成功使用log4j来输出tomcat日志了,并且是json格式的,方便filebeat收集

下面我们来将localhost_access_log来转成json格式的日志输出

通过vim打开conf/server.xml文件,拉到文件最后面

#修改此处内容
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".log"
pattern="{"client":"%h", "client user":"%l", "authenticated":"%u", "access time":"%t", "method":"%r", "status":"%s", "send bytes":"%b", "Query?string":"%q", "partner":"%{Referer}i", "Agent version":"%{User-Agent}i"}" />

启动tomcat,可以发现我们成功的将catalina和localhost_access_log以json格式输出日志了

filebeat收集日志

- input_type: log
enabled: true
paths:
- /usr/local/apache-tomcat-9.0.36/logs/localhost_access_log*.log
fields:
source: localhost_access_log
- input_type: log
enabled: true
paths:
- /usr/local/apache-tomcat-9.0.36/logs/catalina
fields:
source: catalina

output.elasticsearch:
# Array of hosts to connect to.
hosts: ["192.168.203.133:9200"]
indices:
- index: "localhost_access_log-%{+yyyy.MM.dd}"
when.contains:
source: "localhost_access_log"
- index: "catalina-%{+yyyy.MM.dd}"
when.contains:
source: "catalina"

启动filebeat

./filebeat -e -c filebeat.yml

配置好index后,可以在discover看到收集的日志