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

Using regex in logstash to filter files by name

我正在提取一系列文件并使用 logstash 根据正则表达式仅过滤掉我需要的文件,然后再将匹配的文件输出到命名目录,但正则表达式不起作用并且没有任何内容被过滤掉.

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
if [filename] =~ /.*[abc|def].*/

方括号定义了一个字符组,因此它将匹配包含字符 a 到 f 或竖线之一的任何文件。您所有的文件名都包含 stdout,其中包括一个 d,因此它们都匹配。不需要前导和尾随 .*,因为模式未锚定。尝试

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