2014-07-11 2 views
10

Logstash를 사용하여 후위 로그를 구문 분석하고 있습니다. 나는 주로 postfix 로그에서 반송 된 이메일 로그를 얻고 데이터베이스에 저장하는 데 중점을 둡니다.첫 번째 필터 일치 레코드가 저장되지 않은 여러 그루크 필터

로그를 얻으려면 먼저 내 message-id에 해당하는 postfix에서 생성 된 ID를 찾아야하며 해당 ID를 사용하여 이메일 상태를 찾아야합니다. 다음 설정을 위해 로그를 가져올 수 있습니다. 나는 조건이 패턴과 일치하는 로그를 저장하는 경우 다음과 같은 사용하고

grok { 
     patterns_dir => "patterns" 
     match => [ 
      "message", "%{SYSLOGBASE} %{POSTFIXCLEANUP}", 
      "message", "%{SYSLOGBASE} %{POSTFIXBOUNCE}" 
     ] 
     named_captures_only => true 
    } 

:

당신이, 내가 하나 개의 로그 파일에서 두 개의 서로 다른 로그를 해당 찾기 위해 두 가지 패턴을 사용하고 보았 듯이
if "_grokparsefailure" not in [tags] { 
    #database call 
} 

.

이제 태그를 기반으로 두 패턴을 구분하고 싶습니다. 그래서 다음과 같이 구성을 수정했습니다 :

grok { 
     patterns_dir => "patterns" 
     match => [ 
      "message", "%{SYSLOGBASE} %{POSTFIXBOUNCE}" 
     ] 
     add_tag => ["BOUNCED"] 
     remove_tag => ["_grokparsefailure"] 
     named_captures_only => true 
    } 

    grok { 
     patterns_dir => "patterns" 
     match => [ 
      "message", "%{SYSLOGBASE} %{POSTFIXCLEANUP}"    
     ] 
     add_tag => ["INTIALIZATION"] 
     remove_tag => ["_grokparsefailure"] 
     named_captures_only => true 
    } 

이제 % {POSTFIXCLEANUP} 패턴 로그 만 저장합니다. 순서를 바꾸면 % {POSTFIXBOUNCE} 패턴 만 저장합니다.

그래서 조건을 제거한 후 첫 번째 필터에서 구문 분석되는 메시지에 "_grokparsefailure"태그와 첫 번째 필터 태그가 있고 그 레코드가 저장되어 있지 않기 때문에 발견되었습니다.

누구든지이 문제를 해결하기 위해해야 ​​할 일을 말해 줄 수 있습니까? 내가 실수하고 있니?

+0

는 이벤트를 일치하는 경우 그 가능성이 그래서 문제 – Alcanzar

+0

의 있도록 remove_tag 만, 수행됩니다 확신, 내가 원하는 결과를 달성하기 위해 무엇을해야합니까? –

답변

12

두 번째 grok 블록을 보호해야합니다. 즉 첫 번째 블록이 성공하면 실행하지 마십시오.

if ("BOUNCED" not in [tags]) { 
    grok { 
    patterns_dir => "patterns" 
    match => [ 
     "message", "%{SYSLOGBASE} %{POSTFIXCLEANUP}"    
    ] 
    add_tag => ["INTIALIZATION"] 
    remove_tag => ["_grokparsefailure"] 
    named_captures_only => true 
    } 
} 
+0

고마워요. 그것은 내가 필요한만큼 일하고있다. 정말 고맙습니다. –

+7

if 문이 이어야합니다. if ("BOUNCED"[태그]에 없음) {}' –