在企业中,我们看到tomcat日志遇到异常(exception)一条日志可能是几行或者十几行甚至几十行,组成的,那么,我们需要将多行日志变成一行日志,来收集。
这里我们有几种方式可以实现:
1.将日志改成Json格式
在企业中,想要将java日志改成json格式,并没有那么容易。
格式不是你想改,想改就能改,让我挣开,让我明白,放手你的爱~~~~
因为将日志改成Json格式,查看起来会很难受,有些开发人员不希望将日志格式改成Json的,所以,在改日志格式之前需要跟开发人员进行沟通,那么将tomcat日志格式改成Json格式也有两种方式。
1)开发自己更改,通过程序代码,或者log4j
2)运维修改tomcat的server配置文件
# 1.安装tomcat [root@elkstack03 ~]# yum install -y tomcat # 2.部署tomcat代码 [root@elkstack03 ~]# vim /usr/share/tomcat/webapps/ROOT/index.jsp test tomcat # 3.启动tomcat [root@elkstack03 ~]# systemctl start tomcat
[root@elkstack03 tomcat]# vim /etc/logstash/conf.d/tomcat_file_es.conf input{ file{ type => "tomcat_access_log" path => "/var/log/tomcat/localhost_access_log.2022-09-07.txt" start_position => "beginning" } } output{ elasticsearch{ hosts => ["10.0.0.81:9200"] index => "%{type}-%{+yyyy.MM.dd}" } } [root@elkstack03 tomcat]# /usr/share/logstash/bin/logstash --path.data=/var/lib/logstash/tomcat_file_es -f /etc/logstash/conf.d/tomcat_file_es.conf &
[root@elkstack03 tomcat]# vim /etc/tomcat/server.xml <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="tomcat_access_log" suffix=".log" pattern="{"clientip":"%h","ClientUser":"%l","authenticated":"%u","AccessTime":"%t","method":"%r","status":"%s","SendBytes":"%b","Query?string":"%q","partner":"%{Referer}i","AgentVersion":"%{User-Agent}i"}"/> 137 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 138 prefix="localhost_access_log." suffix=".txt" 139 pattern="{"clientip":"%h","ClientUser":"%l","authenticated":" %u","AccessTime":"%t","method":"%r","status":"%s","SendBytes& quot;:"%b","Query?string":"%q","partner":"%{Referer}i","AgentVersion":& quot;%{User-Agent}i"}" />
vim tomcat_file_es_json.conf input{ file{ type => "tomcat_access_log_json" path => "/var/log/tomcat/localhost_access_log.*.txt" start_position => "end" } } output{ elasticsearch{ hosts => ["10.0.0.81:9200"] index => "%{type}-%{+yyyy.MM.dd}" codec => "json" } } [root@elkstack03 tomcat]# /usr/share/logstash/bin/logstash --path.data=/var/lib/logstash/tomcat_access_json -f /etc/logstash/conf.d/tomcat_file_es_json.conf &
还是一坨
[root@elkstack03 conf.d]# vim tomcat_file_es_json.conf input{ file{ type => "tomcat_access_log_json" path => "/var/log/tomcat/localhost_access_log.*.txt" start_position => "end" } } filter{ json{ source => "message" } } output{ elasticsearch{ hosts => ["10.0.0.81:9200"] index => "%{type}-%{+yyyy.MM.dd}" codec => "json" } }
[root@elkstack03 conf.d]# vim tomcat_file_es_json.conf input{ file{ type => "tomcat_access_log_json" path => "/var/log/tomcat/localhost_access_log.*.txt" start_position => "end" } } filter{ json{ source => "message" remove_field => ["message"] } } output{ elasticsearch{ hosts => ["10.0.0.81:9200"] index => "%{type}-%{+yyyy.MM.dd}" codec => "json" } } [root@elkstack03 conf.d]# /usr/share/logstash/bin/logstash --path.data=/var/lib/logstash/tomcat_access_json -f /etc/logstash/conf.d/tomcat_file_es_json.conf &
[root@elkstack03 conf.d]# vim /etc/logstash/conf.d/catlina_file_es.conf input{ file{ type => "tomcat_catlina_log" path => "/var/log/tomcat/catalina.*.log" start_position => "beginning" } } output{ elasticsearch{ hosts => ["10.0.0.81:9200"] index => "%{type}-%{+yyyy.MM.dd}" } } [root@elkstack03 conf.d]# /usr/share/logstash/bin/logstash --path.data=/var/lib/logstash/tomcat_catlina/ -f /etc/logstash/conf.d/catlina_file_es.conf &
[root@elkstack03 conf.d]# vim /etc/logstash/conf.d/catlina_file_es.conf input{ file{ type => "tomcat_catlina_log" path => "/var/log/tomcat/catalina.*.log" start_position => "beginning" codec => multiline { pattern => "^[A-Z]" negate => true what => "previous" } } } output{ elasticsearch{ hosts => ["10.0.0.81:9200"] index => "%{type}-%{+yyyy.MM.dd}" } }