如何解析和提取特定字段并将其存储到 logstash 过滤器中的另一个字段?

how to parse and extract specific fields and store it into another field in logstash filter?

我有使用 Filebeat 发送到 logstash 的应用程序日志文件。日志文件将包含类似这样的内容,其中包含模块名称和处理时间

[10/08/2020#11:25:45:451] #SVS#SVS#NA#NA#NA#-#DE#00000199#DE_ONL_DC_SERVER1_NODE05_PRD##[8/10/2020#11:25:45:451] #O#-#-#-#Module1#1#-#5#-#-#-#CoreB#-

我只想从上面的日志中提取 3 个字段,模块名称 {Module1},处理时间{5},服务器名称{DE_ONL_DC_SERVER1_NODE05_PRD},以便我可以将它们绘制到仪表板中kibana 中的这些术语。

我对 elk 堆栈很陌生,仍在探索 logfilter 中的各种过滤器选项以实现上述目标,我们将不胜感激。谢谢

是的,完全正确,如果您所有的日志行看起来完全一样,我会利用 dissect filter。像这样的模式应该做的:

filter {
  dissect {
    mapping => {
      "message" => "[%{@timestamp}] #%{?ignored}#%{?ignored}#%{?ignored}#%{?ignored}#%{?ignored}#-#%{?ignored}#%{?ignored}#%{serverName}##[%{?ignored}] #%{?ignored}#%{?ignored}#%{?ignored}#%{?ignored}#%{moduleName}#%{?ignored}#%{?ignored}#%{processTime}#%{?ignored}#%{?ignored}#%{?ignored}#%{?ignored}#%{?ignored}
"
    }
  }
}

这会将以下字段提取到事件中:

{
    "@timestamp": "10/08/2020#11:25:45:451",
    "message": "[10/08/2020#11...",
    "serverName": "DE_ONL_DC_SERVER1_NODE05_PRD",
    "moduleName": "Module1",
    "processTime": 5
}