filebeat收集java程序多行報錯
1.什么是java程序多行報錯
一個java程序報錯往往是一個事件一罩,這個報錯并不是一行就能展示完的灶挟,幾乎需要幾十行才能展示完這個報錯內容熊尉,對于filebeat來說季稳,filebeat每次都是把一行看成了一個日志馋嗜,那么對于java多行報錯就不是很友好了麸俘,即使收集過來也是將一個事件的報錯日志分成很多行在kibana上展示辩稽,這樣對于開發(fā)人員來看日志就很頭疼了
如果對于多行報錯的日志還用傳統(tǒng)的收集方法,就像下圖一樣从媚,完全不知道報錯是什么了逞泄,不管誰看這個日志都需要去對比
多行報錯日志:一般的報錯日志都是1行就可以顯示完整,但是有一些像java的項目一行就顯示不完整報錯內容拜效,往往是多行一起分析才能看出來報錯的內容
只要是需要將多行報錯連在一起的日志都屬于多行報錯型日志
多行報錯型日志收集方案:一個報錯肯定是以xxx開頭喷众,到下一個xxx的時候結束,我們可以通過匹配規(guī)則紧憾,匹配到xxx到千,只要下一行日志內容不是xxx,就都連在一起赴穗,直到遇到下一個xxx為止
tomcat java報錯日志舉例
這就是一個典型的多行報錯的日志
可以看到它就是以時間開始的憔四,現在是20xx年嘛,所以可以匹配只要是以20開頭的行般眉,只要下一行不是20開頭了赵,就集合在一起,直到遇到下一個20就結束
2.配置filebeat收集多行tomcat程序java多行報錯
部分配置項進行說明:
multiline.pattern: '^20' //多行匹配規(guī)則甸赃,以xxx開頭的柿汛,使用正則表達式 multiline.negate: true //值為true或flase,使用flase表示將匹配到的行合并到上一行埠对,使用true表示將不匹配的行合并到上一行(用true的一般比較多络断,因為多行報錯,肯定不是匹配的行合并在一起项玛,那樣就沒有詳細信息了) multiline.match: after //值為after和befor妓羊,使用after表示合并到匹配行的上一行末尾,使用before表示合并到匹配行的行首(一般就是after稍计,合并到匹配行的上一行末尾就可以了)
2.1.配置filebeat收集多行報錯
1.修改配置文件
[root@nginx02 /etc/filebeat]# vim filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /data/tomcat/logs/catalina.out
multiline.pattern: '^20' #多行匹配規(guī)則
multiline.negate: true #將不匹配的規(guī)則的行合并在一起
multiline.match: after #合并到匹配規(guī)則的上一行末尾
tags: ["java"]
output.elasticsearch:
hosts: ["192.168.81.210:9200"]
indices:
- index: "tomcat-java-%{+yyyy.MM.dd}"
when.contains:
tags: "java"
2.重啟filebeat
[root@nginx02 /etc/filebeat]# systemctl restart filebeat
2.2.制造java多行報錯
隨便打開配置文件,改錯一個地方裕循,來回啟動就有了報錯日志
[root@nginx02 /data/tomcat]# vim conf/server.xm
<ssssServer port="8005" shutdown="SHUTDOWN">
[root@nginx02 /data/tomcat]# ./bin/startup.sh
2.3.查看es是否創(chuàng)建索引并產生數據
已經有了153條數據
3.在kibana上關聯(lián)es索引并統(tǒng)計日志
3.1.關聯(lián)索引
點擊Managerment---索引模式---創(chuàng)建索引
創(chuàng)建成功
3.2.查詢java多行報錯日志
點擊Discovery---選擇java索引---搜索ERROR就可以看到java多行的報錯日志了臣嚣,可以明顯看到净刮,行變的高了,多行日志也就說明合并在了一起
點擊日志的小三角硅则,即可看到完整的報錯內容