filebeat收集java程序多行报错
1.什么是java程序多行报错
一个java程序报错往往是一个事件,这个报错并不是一行就能展示完的,几乎需要几十行才能展示完这个报错内容,对于filebeat来说,filebeat每次都是把一行看成了一个日志,那么对于java多行报错就不是很友好了,即使收集过来也是将一个事件的报错日志分成很多行在kibana上展示,这样对于开发人员来看日志就很头疼了
如果对于多行报错的日志还用传统的收集方法,就像下图一样,完全不知道报错是什么了,不管谁看这个日志都需要去对比
多行报错日志:一般的报错日志都是1行就可以显示完整,但是有一些像java的项目一行就显示不完整报错内容,往往是多行一起分析才能看出来报错的内容
只要是需要将多行报错连在一起的日志都属于多行报错型日志
多行报错型日志收集方案:一个报错肯定是以xxx开头,到下一个xxx的时候结束,我们可以通过匹配规则,匹配到xxx,只要下一行日志内容不是xxx,就都连在一起,直到遇到下一个xxx为止
tomcat java报错日志举例
这就是一个典型的多行报错的日志
可以看到它就是以时间开始的,现在是20xx年嘛,所以可以匹配只要是以20开头的行,只要下一行不是20开头,就集合在一起,直到遇到下一个20就结束
2.配置filebeat收集多行tomcat程序java多行报错
部分配置项进行说明:
multiline.pattern: '^20' //多行匹配规则,以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' #多行匹配规则
multiline.negate: true #将不匹配的规则的行合并在一起
multiline.match: after #合并到匹配规则的上一行末尾
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是否创建索引并产生数据
已经有了153条数据
3.在kibana上关联es索引并统计日志
3.1.关联索引
点击Managerment---索引模式---创建索引
创建成功
3.2.查询java多行报错日志
点击Discovery---选择java索引---搜索ERROR就可以看到java多行的报错日志了,可以明显看到,行变的高了,多行日志也就说明合并在了一起
点击日志的小三角,即可看到完整的报错内容