【问题标题】:how to parse and extract specific fields and store it into another field in logstash filter?如何解析和提取特定字段并将其存储到logstash过滤器的另一个字段中?
【发布时间】:2020-11-30 13:05:59
【问题描述】:

我有使用 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 过滤器非常适合上述用例。无论如何,如果有人有更好的方法,请帮忙

标签: elasticsearch logstash kibana logstash-grok filebeat


【解决方案1】:

是的,完全正确,如果您的所有日志行看起来都完全相同,我会利用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
}

【讨论】:

  • 谢谢,但是剖析是否意味着消息字段将使用映射更新,或者我们将不得不变异,因为我观察到 kibana 中的输出仍然是与以前相同的完整消息.提前致谢
  • 消息字段没有改变,剖析过滤器只是将数据从中提取到新字段中。
  • 明白了,所以我们将不得不使用 mutate 将新提取的字段添加到消息中。知道了。谢谢
  • 不,dissect 会自己添加字段,不需要变异。请参阅我的答案底部,这就是您将在文档中获得的内容。
  • Atlast 在昨天挣扎之后,发现由于几个问题(过滤器中的条件错误,错误的 conf 文件) - 我能够获取 kibana 中的字段。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-27
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
  • 2017-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多