繁体   English   中英

如何使用logstash和Grok和index作为Kibana中的每个记录的字段从日志中提取特定数据?

[英]How to pull specific data from log using logstash and Grok and index as fields in Kibana for every record?

目标是:对于日志中的每一行,应该有一个包含“消息”(时间戳后的文本)的弹性文件。 每个文档还应包含项目名称,计划名称和内部版本号的字段。 <-这就是我被困住的地方

开头的示例日志结构(Atlassian Bamboo构建日志):

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-(?>\d\d){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-(?>\d\d){1,2}\s*(?!<[0-9])%{HOUR}:%{MINUTE}(?::%{SECOND})(?![0-9]))%{SPACE}%{GREEDYDATA:log_message}"
         ]
     }

因此,我是否需要使用“可选”()将这两种模式匹配组合为一种? 如此处所述的语法?: 链接

仅使用logstash和Grok插件可以实现我的最终目标吗? 我可以在logstash中使用某种类型的变量构造来处理此问题吗? add_field?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM