温馨提示×

centos tomcat日志中如何查看访问来源

小樊
46
2025-11-14 02:00:47
栏目: 智能运维

查看访问来源的关键要点

  • 在 Tomcat 中,访问来源通常指客户端的 IP 地址 或经过代理/负载均衡后的 X-Forwarded-For 头中的真实 IP。
  • 直接访问时,访问日志中的 %h 即为客户端 IP;经过 SLB/WAF/CDN/反向代理 时,需在日志中输出并(必要时)用 RemoteIpValve 将 %h 替换为真实客户端 IP。

步骤一 确认访问日志位置与实时查看

  • 日志目录通常为 $CATALINA_HOME/logs,常见访问日志为 localhost_access_log.YYYY-MM-DD.txt,控制台输出为 catalina.out。进入目录并实时查看示例:
    • cd $CATALINA_HOME/logs
    • tail -f localhost_access_log.*.txt
    • tail -f catalina.out
  • 如使用 systemd 管理 Tomcat,也可通过 journalctl 查看服务日志:journalctl -u tomcat.service -f。

步骤二 直接访问时输出访问来源

  • 编辑 conf/server.xml,在 内确保存在 AccessLogValve,并使用包含 %h(远程主机/客户端 IP)的格式(如 common 或 combined):
    • 示例(combined 格式):
      <Valve className="org.apache.catalina.valves.AccessLogValve"
             directory="logs"
             prefix="localhost_access_log."
             suffix=".txt"
             pattern="%h %l %u %t "%r" %s %b" />
      
    • 保存后重启 Tomcat,访问日志的 %h 字段即为来源 IP。

步骤三 经过代理或负载均衡时获取真实来源

  • 在反向代理/WAF/SLB 前置的场景,建议在日志中输出 X-Forwarded-For 并在 Tomcat 内用 RemoteIpValve 将 %h 替换为真实客户端 IP:
    • 在 server.xml 的 中先添加 RemoteIpValve,再配置 AccessLogValve(推荐 combined 或自定义包含 %a/%{X-Forwarded-For}i 的格式):
      <!-- 将 X-Forwarded-For 中的客户端IP替换到 %h/%a -->
      <Valve className="org.apache.catalina.valves.RemoteIpValve"
             remoteIpHeader="X-Forwarded-For"
             protocolHeader="X-Forwarded-Proto" />
      
      <Valve className="org.apache.catalina.valves.AccessLogValve"
             directory="logs"
             prefix="localhost_access_log."
             suffix=".txt"
             pattern="%a %{X-Forwarded-For}i %l %u %t "%r" %s %b %{User-Agent}i" />
      
    • 说明:
      • %a:远程 IP(经 RemoteIpValve 处理后即为真实客户端 IP)。
      • %{X-Forwarded-For}i:原始请求头中的 X-Forwarded-For 值(便于审计链路)。
      • 若未使用 RemoteIpValve,仅添加 %{X-Forwarded-For}i 会记录头内容,但不会替换 %h;直接访问时可能看到 “-” 或代理 IP。
    • 保存并重启 Tomcat 后,访问日志将优先显示真实客户端 IP。

步骤四 常用检索与分析命令

  • 实时查看来源 IP(按 IP 排序去重):
    • tail -f localhost_access_log.*.txt | awk ‘{print $1}’ | sort -u
  • 统计 Top N 来源 IP:
    • tail -n 10000 localhost_access_log.*.txt | awk ‘{print $1}’ | sort | uniq -c | sort -nr | head -20
  • 过滤指定来源 IP 的访问:
    • grep ‘^203.0.113.45’ localhost_access_log.*.txt
  • 按时间窗口查看(示例:2025-11-14 10:00–11:00):
    • sed -n ‘/2025-11-14 10:/,/2025-11-14 11:/p’ localhost_access_log.*.txt
  • 如需长期分析,可将日志接入 ELK Stack(Elasticsearch/Logstash/Kibana)Splunk 做可视化与报表。

0