使用 grok 过滤器插件跳过前几行日志

Skip first few lines of log using grok filter plugin

是否可以删除以下日志中以日期时间开头的整个第一行?我只对第二行感兴趣。

Dec 09, 2019 12:55:22 PM hudson.slaves.CommandLauncher launch
INFO: agent launched for ci-vd6

如何使用 grok 过滤器插件执行上述操作?

你可以跳过这样的行:

if [message] =~ /2019/ {
  drop { }
}

现在您需要将 regex 更改为仅在您需要时删除行。

编辑: 例如 baudsp 建议正则表达式如下所示:

\b(?:[Jj]an(?:uary|uar)?|[Ff]eb(?:ruary|ruar)?|[Mm](?:a|ä)?r(?:ch|z)?|[Aa]pr(?:il)?|[Mm]a(?:y|i)?|[Jj]un(?:e|i)?|[Jj]ul(?:y)?|[Aa]ug(?:ust)?|[Ss]ep(?:tember)?|[Oo](?:c|k)?t(?:ober)?|[Nn]ov(?:ember)?|[Dd]e(?:c|z)(?:ember)?)\b \d{2}, \d{4}

我的意思是当您逐行接收消息时的情况,因此您收到:

Dec 09, 2019 12:55:22 PM hudson.slaves.CommandLauncher launch

你放下它。

您收到线路:

INFO: agent launched for ci-vd6

你保留它。

编辑: 分割线:

如果可能,拆分有关例如换行符的消息。 在 logstash.yml 中启用特殊符号: config.support_escapes: true 并添加过滤器

filter {
  split {
  field => "message"
  terminator => "\n" 
 }
}

现在一一处理。