作者:娜是相当滴好4 | 来源:互联网 | 2023-06-06 20:28
1.行转列filebeat采集多行日志的时候会把日志分开来采集,这样传递到logstash的时候就无法正确解析了,所以用把多行日志统一采集。这时候可以使用:multiline配置选项。
1.行转列
filebeat采集多行日志的时候会把日志分开来采集,这样传递到logstash的时候就无法正确解析了,所以用把多行日志统一采集。
这时候可以使用:multiline配置选项。
multiline:适用于日志中每一条日志占据多行的情况,比如各种语言的报错信息调用栈。这个配置的下面包含如下配置:
pattern:多行日志开始的那一行匹配的pattern
negate:是否需要对pattern条件转置使用,不翻转设为true,反转设置为false
match:匹配pattern后,与前面(before)还是后面(after)的内容合并为一条日志
max_lines:合并的最多行数(包含匹配pattern的那一行)
timeout:到了timeout之后,即使没有匹配一个新的pattern(发生一个新的事件),也把已经匹配的日志事件发送出去
譬如采集tomcat日志的时候可以这么配
multiline:
pattern: ‘^\[‘
negate: true
match: after
这样就能采集每一次输入的多行日志了,不过对已经存在的日志会一窝蜂的采集。
2.带上自定义参数
基本上filebeat数据通过logstash解析后传到es的数据都会进行分类。采集的时候就必须带上采集数据所属的类别,以便于之后的分析。filebeat可以在采集的数据上增加fields自定义参数,便于解析。
- fields:向输出的每一条日志添加额外的信息,比如“level:debug”,方便后续对日志进行分组统计。默认情况下,会在输出信息的fields子目录下以指定的新增fields建立子目录,例如fields.level。
fields: level: debug
不过这样采集的数据还是无法进行分析,因为数据到达es后,es默认会将数据进行分词,录入的数据会被分词器分析称各个term,无法进行分类。必须使用动态模板映射logstash传输到es的数据。
3.多目录采集
很多时候会采集多目录下的日志数据,并且每个日志数据都会有自己的自定义参数,这时候可以定义多个input_type来解决这个问题,写法如下
filebeat.prospectors:
- input_type: log paths:
- /data1/server/tomcat/tomcat12004/logs/* fields:
logIndex: tomcat
docType: tomcat-log
system: m.openapi
multiline:
pattern: ‘^\[‘
negate: true
match: after
- input_type: log paths:
- /data1/server/tomcat/tomcat12001/logs/catalina.out fields:
logIndex: tomcat
docType: tomcat-log
system: csb
multiline:
pattern: ‘^\[‘
negate: true
match: after