Debian Tomcat日志请求统计方法
Debian系统中,Tomcat的访问日志默认位于/usr/local/tomcat/logs/(或/opt/tomcat/logs/、/var/log/tomcatX/,X为版本号),常见文件名为localhost_access_log.YYYY-MM-DD.txt(按日期分割)或catalina.out(综合日志)。以下是常用命令:
cat /usr/local/tomcat/logs/localhost_access_log | wc -l
cat /usr/local/tomcat/logs/localhost_access_log | awk '{print $1}' | sort | uniq -c | sort -nr
cat /usr/local/tomcat/logs/localhost_access_log | awk '{print $8}' | sort | uniq -c | sort -nr
head -1限制为Top1)。cat /usr/local/tomcat/logs/localhost_access_log | awk '{print $7}' | sort | uniq -c | sort -nr | head -1
对于大规模日志或需要可视化的场景,推荐使用专业工具:
wget https://github.com/goaccess/goaccess/releases/download/v1.6.2/goaccess-1.6.2-linux-x86_64.tar.gz
tar -xzf goaccess-1.6.2-linux-x86_64.tar.gz
cd goaccess-1.6.2
./bin/goaccess /usr/local/tomcat/logs/localhost_access_log -a
执行后会生成HTML报告,包含访问量、IP分布、URL热度等可视化数据。combined模式),将数据导入Elasticsearch。cronolog或logrotate按日期分割。
例如,修改catalina.sh脚本,添加以下内容:export CATALINA_OUT="/usr/local/tomcat/logs/catalina.%Y-%m-%d.out"
或使用logrotate配置文件(/etc/logrotate.d/tomcat):/usr/local/tomcat/logs/*.log {
daily
rotate 30
compress
missingok
notifempty
}
public class AccessFilter implements Filter {
private AtomicInteger requestCount = new AtomicInteger(0);
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
requestCount.incrementAndGet();
chain.doFilter(req, res);
}
@Override
public void destroy() {
System.out.println("Total requests: " + requestCount.get());
}
}
配置web.xml注册Filter,即可统计所有请求的总数。common格式(仅IP、时间、URL、状态码),若需更详细信息(如Referer、User-Agent),需修改server.xml中的AccessLogValve配置:<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log"
suffix=".txt"
pattern="%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i""
resolveHosts="false"/>
其中%h为IP,%r为请求行,%s为状态码,%b为响应字节数。chmod -R 755 /usr/local/tomcat/logs)。