一、综述
1、JAVA项目,基于tomcat容器挂载启动的,我们需要统一一下tomcat的日志格式。
2、tomcat日志,主要涉及catalina.log和access_log两种。日志名为:access.log
3、catalina.log中主要包含tomcat启动信息,重要性和价值都不高,但是为了与日志收集系统对接,我们需要将新旧项目tomcat相关配置保持一致即可。
4、access_log主要针是记录tomcat容器接收到的HTTP请求记录,通常我们一个tomcat下只有一个project;所以我们可以根据access_log来记录有关于:
1)请求量
2)请求的HTTP状态
3)请求内容,包括header(cookie等),请求来源等。
4)响应延迟
5)响应数据包大小
最终,access_log可以与nginx日志互相对应,用于分析请求链路、转发效率、接口性能等。对于排查问题、监控接入非常有价值。
5、涉及到的team:运维组、开发组、大数据组、BI组、安全组。
6、输出价值:
1)ELK:日志收集,开发、运维排查问题,机器容量预留等。
2)业务监控:流量监控、业务错误监控、QPS统计、异常报警等。
3)BI:商业数据分析。
4)安全:用户异常行为、异常流量侵入等评估和防范。
7、access_log日志规范:
access_log
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="access.log" suffix="" renameOnRotate="true"
pattern="%{yyyy-MM-dd HH:mm:ss}t|%A|%a|%p|%m|%s|%D|
%b|%{begin:msec}t|%{end:msec}t|^_^|
%{X-Request-ID}i|%{X-Request-Seq}i|^_^|
%S|%r|%{Referer}i|%{User-Agent}i" />
字段名解释
%A本机IP地址,内网IP
%a远端机器IP,通常是nginx层IP地址
%H请求的协议
%p接收请求的本地Port。
%mHTTP请求的方面名:GET,POST等
%q请求的查询字符串,即URL中“?”后的部分
%D请求处理的时间
%rHTTP请求行—首行
%{Referer}iHTTP标头中“Referer”值
%{User-Agent}iHTTP标头中“User-Agent”值
%sHTTP响应状态码(tomcat返回)
%SHTTP请求中的Session ID
%bHTTP响应的数据大小,不包含Headers
%{X-Request-ID}iHTTP标头中“X-Request-ID”值
%{X-Request-Seq}HTTP标头中“X-Request-Seq”值
%{begin:msec}t请求开始处理的时间戳
%{end:msec}t请求处理结束的时间戳
模式:%{key}iHTTP请求标头中key的值
模式:%{key}oHTTP响应标头中key的值
模式:%{key}c请求/响应cookie中key的值
模式:%{key}rServletRequest属性中key的值
模式:%{key}s保存在HttpSession中key的值
规范基本与nginx、ELB保持一致,仍然使用“^_^”进行分域,当需要增加字段时,请在相应域的最后面增加。