在Logstash中使用正则表达式按名称过滤文件

时间:2020-11-11 16:23:15

标签: logstash logstash-configuration

在将匹配的文件输出到命名目录之前,我正在提取一系列文件,并使用logstash仅基于正则表达式过滤掉我需要的文件,但是正则表达式无法正常工作,并且没有任何内容被过滤掉。 / p>

output {
    if [filename] =~ /.*[abc|def].*/
 {
        file {
        path => "/my/directory/%{filename}-%{+YYYY-MM-dd}.log"
        codec => line { format => "%{message}"}
        }
    }
}

传入文件的格式为:

P01_abc_stdout.log-2020-11-10-11.log
P01_rtf_stdout.log-2020-11-10-11.log
P01_ccc_stdout.log-2020-11-10-11.log
P01_def_stdout.log-2020-11-10-11.log
P01_ces_stdout.log-2020-11-10-11.log

所有这些文件都通过了,即使我希望它只能匹配

P01_abc_stdout.log-2020-11-10-11.log
P01_def_stdout.log-2020-11-10-11.log

1 个答案:

答案 0 :(得分:1)

if [filename] =~ /.*[abc|def].*/

方括号定义了一个字符组,因此它将与包含a到f或管道字符之一的任何文件匹配。您所有的文件名都包含stdout,其中包括d,因此它们都匹配。不需要开头和结尾的。*,因为该样式未锚定。试试

if [filename] =~ /(abc|def)/