网络日志

filebeat收集java程序多行报错(八)

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多行的报错日志了,可以明显看到,行变的高了,多行日志也就说明合并在了一起

点击日志的小三角,即可看到完整的报错内容