在 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)/
我正在提取一系列文件并使用 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)/