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

问题描述

我有一些应用程序日志文件,这些文件使用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},以便可以将它们绘制在基巴纳语中这些术语的仪表板上。

我对麋鹿堆栈还很陌生,仍在探索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
}