2017-07-18 125 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} 有沒有想過通過自動搜索字段或類似的東西來做到這一點? –