如何使用logstash和Grok从日志中提取特定数据,并将其作为Kibana中每个记录的字段进行索引



目标是:对于日志中的每一行,都应该有一个包含"消息"(时间戳后的文本(的弹性文档。每个文档还应该包含项目名称、计划名称和内部版本号的字段&lt--这就是我陷入困境的地方

一开始的示例日志结构(atlassian竹子构建日志(:

simple 01-Jan-2016 14:26:01  Build TestProj - Framework Code - Build #25 (TST-FC-25) started building on agent .NET Core 2
simple 01-Jan-2016 14:26:01  .NET-related builds, tests and publishing.

我有一个Grok来获取和创建我想要的字段-构建名称、构建编号和项目名称(并将它们作为Kibana中的字段(:

%{NOTSPACE:log_entrytype}%{SPACE}(?<timestamp>(?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])-b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)b-(?>dd){1,2}s*(?!<[0-9])%{HOUR}:%{MINUTE}(?::%{SECOND})(?![0-9]))%{SPACE}Build%{SPACE}%{DATA:BamProjName}%{SPACE}-%{SPACE}%{DATA:BamBuildName}%{SPACE}-%{SPACE}Build%{SPACE}#%{NUMBER:BamBuildNum}

然而,我需要在Kibana的每个记录/条目中提供这些字段。使用另一个Grok,我可以将日志的其他行提取到log_message字段中:

grok {   [
"message", "%{NOTSPACE:log_entrytype}%{SPACE}(?<timestamp>(?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])-b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)b-(?>dd){1,2}s*(?!<[0-9])%{HOUR}:%{MINUTE}(?::%{SECOND})(?![0-9]))%{SPACE}%{GREEDYDATA:log_message}"
]
}

那么,我是否需要使用"optional":((以某种方式将这两个模式匹配组合为一?语法如这里所述?:链路

仅凭logstash和Grok插件就能实现我的最终目标吗?我可以用logstash中的某种类型的变量构造来处理这个问题吗?添加字段?

***注意:使用filebeat发送日志,而elastic不建议使用多行编解码器,所以我很好奇我的其他选项是

您需要处理多行事件,请查看官方文档:https://www.elastic.co/guide/en/logstash/current/multiline.html

相关内容

  • 没有找到相关文章

最新更新