2017-05-11 16 views
0

예 :Logstash grok 수 일치 2 개 패턴 로그 라인의

내가 원하는 무엇
2017-05-04 10:37:22,972 INFO [My.Super.JAVA.CLASS] Outbound Message bla bla 
2017-05-04 10:38:22,972 INFO [My.Super.JAVA.CLASS] Inbound Message bla bla 
2017-05-04 10:39:22,972 INFO [My.Super.JAVA.CLASS] some other bla bla 

, 3 개 패턴, 각 유형을 확인하는 것입니다. 그래서 여기에 내가 무슨 짓을했는지 : 예를 들어

"message", '(?m)%{DATE_TIME:timestamp}\s*%{LOGLEVEL:level}\s*\[%{JAVACLASS:class}\]\s*Outbound Message%{GREEDYDATA:stuff}'] 
"message", '(?m)%{DATE_TIME:timestamp}\s*%{LOGLEVEL:level}\s*\[%{JAVACLASS:class}\]\s*Inbound Message%{GREEDYDATA:otherstuff}'] 
"message", '(?m)%{DATE_TIME:timestamp}\s*%{LOGLEVEL:level}\s*\[%{JAVACLASS:class}\]\s*%{GREEDYDATA:messageInfo}' 

테이크 첫 번째 로그 메시지, 그것은 때문에 GREEDYDATA 부분의 분명, 제 1 및 제 패턴이 일치합니다. 제 질문은 첫 번째 두 개의 메시지를 첫 번째 두 개의 패턴 (예 : 세 번째 패턴에서 제외)과 만 일치시키는 방법입니다.

업데이트 : (solbed) : 나는 grok에서 'if'를 사용했습니다. 패턴과 일치 할 때마다 태그에 'grokked'태그를 추가하고 바로 그 후 'grokked'가 태그에 있는지 테스트합니다. 그렇지 않으면 두 번째 패턴과 일치합니다. 세부 정보 : https://discuss.elastic.co/t/grok-with-conditional-patterns-and-adding-a-tag/43844/2

답변

0

나는 당신이 logstash 대신 그 일을하는 데 fluentd를 사용할 것입니다. 그러나 로 돌아 가기 : 공통 분모를 찾아 피하십시오.

filter { 
    grok { 
    add_tag => [ "foo_%{somefield}" ] 
     } 
     } 

또는 :

filter { 
grok { 
    match => { "message" => "%{SYSLOGBASE} %{DATA:message}" } 
    overwrite => [ "message" ] 
     } 
    } 
또 다른 옵션은 태그를 추가