filebeat采集数据的几个痛点的解决方案

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

你可能感兴趣的:(elasticsearch,filebeat)