Elastic:使用 Filebeat 及 Logstash 处理需要的文件及文件中的行

在使用 Filebeat 已经 Logstash 时,通常我们可以使用通配符让它们作用于许多的文件。在一些时候,比如有的文件很久没有更新,它们已经失去了被用作分析的目的,另外在同一个目录中,有可能有一些是我们不想要的文件,我们并不想处理这些文件,那么我们该如何过滤掉这些文件呢?

 

ignore_older

在 Filebeat 和 Logstash 之中,我们都可以发现一个叫做 ignore_older 的配置项。在默认的时候,它是没有被启动的。一旦它被启动了,表示它将忽略在指定时间跨度之前修改的所有文件。这个被修改的文件,我们通常可以使用如下的命令来进行获得:

ls -al

比如:

$ ls -al test.log 
-rw-r--r--@ 1 liuxg  staff  194 Jul 23  2020 test.log

上面的输出可以看出来文件在 Jul 23, 2020 年被修改过。

在默认的情况下这个值为 0,也就是没有被启动。

Filebeat

你可使用时间的字符串,比如 2h (2小时)及  5m (5 分钟)。我们可以在官方文档处找到详细的说明。

filebeat.inputs:
- type: log
  paths:
    - /var/log/*.log
  ignore_older: 24h 
  ...

在上面,它表示如果日志文件的 modified 时间超过 24 小时,那么, Filebeat 将不导入该文件,即使该文件出现在 path 里,比如:

Logstash

同样地,我们也可以在 Logstash 里进配置。不过根据官方文档,该值为数值类型,并且是以秒为单位。

input {
  file {
    path => "/logs/*.log"
  	start_position => "beginning"
    sincedb_path => "/dev/null"
    ignore_older => 1000
    type => "apache"
  }
}
 
output {
  stdout { 
    codec => rubydebug
  }
}

在上面的配置中,任何文件的修改时间超过 1000 秒,那么该文件将不被处理。

 

Logstash 排除一些不需要的文件

排除项(与文件名匹配,而不是完整路径)。 文件名模式在这里也是有效的。 例如,如果你有:

input {
  file {
    path => "/var/log/*"
  	start_position => "beginning"
    sincedb_path => "/dev/null"
    exclude => "*.gz"
    type => "apache"
  }
}
 
output {
  stdout { 
    codec => rubydebug
  }
}

在上面,我们可以使用 exclude 来排除那些以 .gz 为结尾的文件。

 

使用 Filebeat 处理所需要的行

exclude_lines

正则表达式列表,以匹配你要 Filebeat 排除的行。 Filebeat 会删除列表中与正则表达式匹配的所有行。 默认情况下,不删除任何行。 空行将被忽略。

如果还指定了多行设置,则在通过 exclude_lines 过滤行之前,将每条多行消息组合为一行。

下面的示例将 Filebeat 配置为删除以 DBG 开头的所有行。

filebeat.inputs:
- type: log
  ...
  exclude_lines: ['^DBG']

有关受支持的正则表达式模式的列表,请参见正则表达式支持

include_lines

正则表达式列表,以匹配你要 Filebeat 包括的行。 Filebeat 仅导出与列表中的正则表达式匹配的行。 默认情况下,所有行均被导出。 空行将被忽略。

如果还指定了多行设置,则在通过 include_lines 过滤行之前,将每条多行消息合并为一行。

下面的示例将 Filebeat 配置为导出以 ERR 或 WARN 开头的任何行:

filebeat.inputs:
- type: log
  ...
  include_lines: ['^ERR', '^WARN']

注意:如果同时定义了 include_lines 和 exclude_lines,Filebeat 将首先执行 include_lines,然后再执行 exclude_lines。 定义两个选项的顺序无关紧要。 即使 exclude_lines 在配置文件中的 include_lines 之前出现,include_lines 选项也将始终在 exclude_lines 选项之前执行。

以下示例导出所有包含 sometext 的日志行,但以 DBG 开头的行(调试消息)除外:

filebeat.inputs:
- type: log
  ...
  include_lines: ['sometext']
  exclude_lines: ['^DBG']

有关受支持的正则表达式模式的列表,请参见正则表达式支持

已标记关键词 清除标记