应该怎样正确配置filebeat文件(包括multiline、input_type等)

elk是大数据信息采集、处理的最流行技术,而其中filebeat又是elk最为基础的日志采集工具。配置得好我们能非常高效地采集日志,配置得不好却会出现日志丢失、日志采集占用生产机资源高的现象。本文根据自己的配置经验,进行filebeat配置常用字段配置的阐述。

input_type:输入filebeat的类型,包括log(具体路径的日志)和stdin(键盘输入)两种。

multiline:日志中经常会出现多行日志在逻辑上属于同一条日志的情况,所以需要multiline参数来详细阐述。

multiline.pattern:正则表达式,由大数据工程师进行逻辑设置,比如:用空格开头,值为^[[:space:]];用C。正则表达式是非常复杂的,详细见filebeat的正则表达式官方链接:https://www.elastic.co/guide/en/beats/filebeat/current/regexp-support.html

multiline.negate:该参数意思是是否否定多行融入。这个参数比较复杂费解(我也不明白为啥elk会搞个这么复杂的负逻辑,没有人反馈过么),详细情况请见下面横图分析。

multiline.match:取值为after或before。该值与上面的pattern与negate值配合使用,详见下图
应该怎样正确配置filebeat文件(包括multiline、input_type等)_第1张图片

在上图中,pattern=^b,意思是以b开头。negate有false和true两种取值,match也有after和before两种取值。下面详述:

negate参数为false,表示“否定参数=false”。multiline多行参数负负得正,表示符合pattern、match条件的行会融入多行之中、成为一条完整日志的中间部分。如果match=after,则以b开头的和前面一行将合并成一条完整日志;如果match=before,则以b开头的和后面一行将合并成一条完整日志。

negate参数为true,表示“否定参数=true”。multiline多行参数为负,表示符合match条件的行是多行的开头,是一条完整日志的开始或结尾。如果match=after,则以b开头的行是一条完整日志的开始,它和后面多个不以b开头的行组成一条完整日志;如果match=before,则以b开头的行是一条完整日志的结束,和前面多个不以b开头的合并成一条完整日志。

上面几个参数是multiline的最常见配置参数。还有其他一些参数,比如:

flush_pattern表示符合该正则表达式的,将从内存刷入硬盘。

max_lines表示如果多行信息的行数炒过该数字,则多余的都会被丢弃。默认值为500行

timeout表示超时时间,如果炒过timeout还没有新的一行日志产生,则自动结束当前的多行、形成一条日志发出去。


最后,给出两个个实际的filebeat范例(分别对应multiline.negate=false/true两种情况):

- input_type: log

#4

 paths:

    -/data/logs/test.log

  encoding: utf-8

 

 fields:

   appsystem: test


 

  multiline.pattern:'^[[:space:]]+'

 multiline.negate: false

 multiline.match: after

 

 ignore_older: 24h


上面表示,如果不以空格开头,则这一行是一条日志的开头行,它与接下来有1或多个空格开头的各行、构成一条完整日志。

再看下一条,对应的是标准的Oracle数据库日志的filebeat配置:

- input_type: log


  paths:
    - /oracle/test.log


  encoding: gbk


  fields:
    appsystem: oracle
    logTypeName: oracle_log_filebeat
    appprogramname: 9999


  multiline.pattern: '^Mon|Tue|Web|Thu|Fri|Sat|Sun [[:space:]] Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec'
  multiline.negate: true
  multiline.match: after
  
  ignore_older: 24h
  #include_lines: ['apache']
  #exclude_lines: ['^DBG']


上面表示,如果以“星期简称+空格+月份简称”开头的,则这一行是一条日志的开头行,它与接下来不以“星期简称+空格+月份简称”的各行、构成一条完整日志。



欢迎评论留言、私信交流大数据。






你可能感兴趣的:(技术之路)