2017-07-18 87 views
0

我是ELK堆栈的全新用户。我从我的日志中筛选出特定部分时遇到了一些问题。logstash/grok自定义文件

示例日志:

[2017-05-30 13:58:09,336] INFO [com.qwerty.test.core.services.impl.order.OrderEntryService] (OrderEntryService.java:5426) [http-/0.0.0.0:1111-111] {{CT,1496145487308}{IP,111.11.111.11}{JTX,1511059/176275501}{OBJT,goodsMovement.reportsUtils.ConsignmentStocksList}{OPT,SQ}{PID,111111}{SS,SSCPLTMPRODPL}{TRT,SAP_LOGISTIC_REPORT}{UID,StudentSaSo-8}}: Saving order: K1010101

和我的神交过滤器:

grok { match => { "message" => "(?<timestamp>%{YEAR}-%{MONTHNUM2}-%{MONTHDAY} %{HOUR}:%{MINUTE}:%{SECOND},%{NONNEGINT})\] %{LOGLEVEL:loglevel} * \[(?<logger>[A-Za-z0-9$_.]+)\] \(%{JAVAFILE:class}:%{NONNEGINT:line}\) \[%{NOTSPACE:thread}\] %{GREEDYDATA:message_TEST}"} }

,所以我需要筛选出 “ID”, “PID”,IP和“ UID“,我不知道如何配置这个特定的自定义模式。 我尝试使用https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns的模式,但它不适用于我

回答

0

Grok的开头很好。而不是最后一部分%{GREEDYDATA:message_TEST},它将只保存您的消息的其余部分到message_TEST您应该实际执行解析您的对象。像这样将节省从对象到各个变量PIDIPUID字段(记住,这种模式依赖于字段顺序):

{{.*}{IP,%{IPV4:IP}}({.*}){3}{PID,%{POSINT:PID}}({.*}){2}{UID,%{DATA:UID}}} 

现在是做什么的一点解释。外面的一对大括号是你的对象的限制。然后,我们将关注由对象内部的一对大括号限制的每个字段。

  • 第一次:打开大括号{;
  • 然后,第一个内部字段是{CT,1496145487308},我们不想保存它 - 所以只要告诉grok有一些字符串受限于大括号:{.*};我们需要保存:。它以大括号和IP,开头,后面跟着我们必须保存的IP地址(匹配中的最后一个IP是将存储IP地址的变量的名称):{IP,%{IPV4:IP}
  • 现在我们有三组由大括号包围的字符串我们不需要保存:{JTX,1511059/176275501}{OBJT,goodsMovement.reportsUtils.ConsignmentStocksList}{OPT,SQ}。对于grok,它看起来像:({.*}){3};
  • 然后去PID字段:{PID,111111}。对于grok,PID只是一个正整数,类似于大括号包围的IP,前面有PID,{PID,%{POSINT:PID}};
  • 另外两个我们不想保存的组。跳过它们与之前的类似:({.*}){2};
  • 最后一个字段是:{UID,StudentSaSo-8},这只是grok的一串数据。与IP和PID类似,将其保存在相应的变量中:{UID,%{DATA:UID}};
  • 终于我们收了大括号:}

在您的最终神交将如下所示结尾:

(?<timestamp>%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:%{MINUTE}:%{SECOND},%{NONNEGINT})\] %{LOGLEVEL:loglevel} * \[(?<logger>[A-Za-z0-9$_.]+)\] \(%{JAVAFILE:class}:%{NONNEGINT:line}\) \[%{NOTSPACE:thread}\] {%{DATA}{IP,%{IPV4:IP}}({.*}){3}{PID,%{POSINT:PID}}({.*}){2}{UID,%{DATA:UID}}} 
+0

感谢alexK您的回复,但你说的话后,我收到了另一个问题,我的日志。 他们不经常。有些行只有IP和PID或JTX,PID和UID,还有它们混合在一起,我的意思是IP,UID等字段不总是处于同一位置...:/ 我像你写的那样映射了整个日志 {{CT,%{DATA:克拉}} {IP,%{IPV4:IP}} {JTX,%{NONNEGINT:JTX}} {OBJT,%{GREEDYDATA:objt}} {OPT%{GREEDYDATA:OPT}} {PID,%{POSINT:PID}} {SS,%{GREEDYDATA:SS}} {TRT,%{GREEDYDATA:TRT}} {UID,%{DATA:UID}}}%{GREEDYDATA:log_message} 有没有想过通过自动搜索字段或类似的东西来做到这一点? –