ELK中filebeat匹配和过滤日志的方法

Beats是用于单用途数据托运人的平台。它们以轻量级代理的形式安装,并将来自成百上千台机器的数据发送到Logstash或Elasticsearch。

Beats对于收集数据非常有用。它们位于你的服务器上,将数据集中在Elasticsearch中,Beats也可以发送到Logstash来进行转换和解析。

Beats可以直接(或者通过Logstash)将数据发送到Elasticsearch,在那里你可以进一步处理和增强数据,然后在Kibana中将其可视化

我们昨天使用了下ELK发现一个问题,就是收集过来的日志含有一些我们不需要的行,所以今天我们来给大家讲下如何过滤掉这些无用的日志,因为beat家族有多个产品,收集linux日志使用filebeat,windows的日志则需要winlogbeat,此处我们所讲的为filebeat

filebeat提供了很多方法解决这些文件

1.使用exclude_lines和include_lines

我把我的filebeat.yml文件进行了修改,如下

filebeat.inputs:

- type: log
  enabled: true
  paths:
    - /usr/local/nginx/logs/access.log
  fields:
    log_source: nginx-access
  include_lines: ['jsrpc.php']
  exclude_lines: ['dashboard']

- type: log
  enabled: true
  paths:
    - /usr/local/nginx/logs/error.log
  fields:
    log_source: nginx-error

上面用了include_lines,和exclude_lines排除和包含关键词的行

{03F4C542-7006-49D9-974E-657356450B40}_20191026173017.jpg

我们看到新进来的日志已经排除了dashboard的日志

2.我们可以使用multiline来处理多行匹配,具体用法如下

在var.paths下面添加,添加位置和刚才的include_lines一样

  multiline.pattern: '^\d{4}/\d{2}/\d{2}'  #2019\10\25  这样就可以匹配出日志开头
  multiline.negate: true
  multiline.match: after
  multiline.Max_lines:20
  multiline.timeout: 10s

pattern:多行日志开始的那一行匹配的pattern
negate:是否需要对pattern条件转置使用,不翻转设为true,反转设置为false
match:匹配pattern后,与前面(before)还是后面(after)的内容合并为一条日志
max_lines:合并的最多行数(包含匹配pattern的那一行 默认值是500行
timeout:到了timeout之后,即使没有匹配一个新的pattern(发生一个新的事件),也把已经匹配的日志事件发送出去

另外还可以使用logstash中的gork正则来重新匹配日志输出,后面我们再对那个进行学习

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/733.html