logstash 收集tomcat日誌
阿新 • • 發佈:2020-12-08
四、logstash收集tomcat日誌
在企業中,我們看到tomcat日誌遇到異常(exception)一條日誌可能是幾行或者十幾行甚至幾十行,
組成的,那麼,我們需要將多行日誌變成一行日誌,來收集
1.tomcat日誌收集方式
這裡我們有幾種方式可以實現: 1.將日誌改成Json格式 在企業中,想要將java日誌改成json格式,並沒有那麼容易。 因為將日誌改成Json格式,檢視起來會很難受,有些開發人員不希望將日誌格式改成Json的, 所以,在改日誌格式之前需要跟開發人員進行溝通,那麼將tomcat日誌格式改成Json格式也有兩種方式。 1)開發自己更改,通過程式程式碼,或者log4j 2)運維修改tomcat的server配置檔案 2.通過logstash的mutiline模組實現多行匹配
2.安裝tomcat
1)安裝java環境
2)安裝tomcat
1.上傳程式碼包 [root@web01 ~]# rz [root@web01 ~]# ll -rw-r--r-- 1 root root 11026056 2020-12-04 18:04 apache-tomcat-9.0.30.tar.gz 2.解壓tomcat包 [root@web01 ~]# tar xf apache-tomcat-9.0.30.tar.gz 3.將安裝包移動並改名 [root@web01 ~]# mv apache-tomcat-9.0.30 /usr/local/tomcat-9.0.30 4.做軟連線 [root@web01 ~]# ln -s /usr/local/tomcat-9.0.30 /usr/local/tomcat
3)配置站點
1.寫一個測試頁面到站點目錄下的index.html檔案中 [root@web01 ~]# echo 'TEST elk' > /usr/local/tomcat/webapps/ROOT/index.html 2.啟動tomcat [root@web01 ~]# /usr/local/tomcat/bin/startup.sh 3.檢測tomcat埠是否啟動 [root@web01 ~]# netstat -lntup|grep 8080 tcp 0 0 :::8080 :::* LISTEN 12569/java
4)訪問測試
http://10.0.0.7:8080/
3.配置logstash收集tomcat日誌
1)配置
[root@web01 ~]# vim /etc/logstash/conf.d/tomcat_log_es.conf
input {
file {
path => "/usr/local/tomcat/logs/localhost_access_log.*.txt"
start_position => "end"
type => "tomcat_log"
}
}
output {
elasticsearch {
hosts => ["10.0.0.71:9200"]
index => "tomcat_log_%{+YYYY-MM-dd}"
}
}
2)啟動
[root@web01 ~]# logstash -f /etc/logstash/conf.d/tomcat_log_es.conf
4.收集tomcat的json格式日誌方式一:
1)修改tomcat日誌格式
[root@web01 ~]# vim /usr/local/tomcat/conf/server.xml
<!-- 註釋掉原來的日誌格式配置 -->
160 <!--Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
161 prefix="localhost_access_log" suffix=".txt"
162 pattern="%h %l %u %t "%r" %s %b" /-->
<!-- 新增新的日誌格式配置 -->
163 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
164 prefix="tomcat_access_json" suffix=".log"
165 pattern="{"clientip":"%h","ClientUser":"%l","authenticated":"%u","AccessT ime":"%t","method":"%r","status":"%s","SendBytes":"%b","Query?string" ;:"%q","partner":"%{Referer}i","AgentVersion":"%{User-Agent}i"}"/>
166
167 </Host>
168 </Engine>
169 </Service>
170 </Server>
2)重啟Tomcat
[root@web01 ~]# /usr/local/tomcat/bin/shutdown.sh
[root@web01 ~]# /usr/local/tomcat/bin/startup.sh
3)檢視新的日誌
[root@web01 ~]# tail -f /usr/local/tomcat/logs/tomcat_access_json.2020-12-07.log
{"clientip":"10.0.0.1","ClientUser":"-","authenticated":"-","AccessTime":"[07/Dec/2020:22:51:25 +0800]","method":"GET / HTTP/1.1","status":"200","SendBytes":"9","Query?string":"","partner":"-","AgentVersion":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36"}
4)配置logstash收集新的日誌
[root@web01 ~]# vim /etc/logstash/conf.d/tomcat_log_es.conf
input {
file {
path => "/usr/local/tomcat/logs/tomcat_access_json.*.log"
start_position => "end"
type => "tomcat_log"
}
}
output {
elasticsearch {
hosts => ["10.0.0.71:9200"]
index => "tomcat_json_log_%{+YYYY-MM-dd}"
}
}
5)啟動服務
[root@web01 ~]# logstash -f /etc/logstash/conf.d/tomcat_log_es.conf
5.方式二:使用multiline外掛收集java日誌
使用codec的multiline外掛實現多行匹配,這是一個可以將多行進行合併的外掛,
而且可以使用what指定將匹配到的行與前面的行合併還是和後面的行合併
幫助文件:
https://www.elastic.co/guide/en/logstash/current/plugins-codecs-multiline.html
因為目前tomcat日誌中沒有exception,所以,我們把Logstash部署在ES上,收集一下ES的java日誌。
1)測試多行匹配
[root@web01 ~]# vim /etc/logstash/conf.d/stdin_stdout.conf
input {
stdin {
codec => multiline {
pattern => "^\["
negate => "true"
what => "previous"
}
}
}
output {
stdout {}
}
2)啟動
[root@web01 ~]# logstash -f /etc/logstash/conf.d/stdin_stdout.conf
3)測試
#測試輸入一堆內容,並沒有列印,只有當輸入一個以 [ 開頭的時候才會結束並輸出
jhvc
jkhv
jhv
jc
[
{
"message" => "jhvc\njkhv\njhv\njc",
"@timestamp" => 2020-12-07T15:15:49.182Z,
"@version" => "1",
"tags" => [
[0] "multiline"
],
"host" => "web01"
}
4)收集java日誌寫入ES
[root@web01 ~]# cat /etc/logstash/conf.d/java_es.conf
input {
file {
path => "/usr/local/tomcat/logs/tomcat_access_json.2020-12-07.log"
start_position => "end"
codec => multiline {
pattern => "^\["
negate => "true"
what => "previous"
}
}
}
output {
elasticsearch {
hosts => ['10.0.0.71:9200']
index => "tomcat_json_log_%{+YYYY-MM-DD}"
}
}
5)啟動
[root@web01 ~]# logstash -f /etc/logstash/conf.d/java_es.conf &
6)測試收集日誌
[root@web01 ~]# cat tomcat.log >> /usr/local/tomcat/logs/tomcat_access_json.2020-12-07.log