2013-08-13 3 views
3

현재 내 로그 파일에서 특정 줄을 필터링하려고합니다. 로그 파일의 내 줄은 다음과 같은 패턴입니다.특정 줄 필터링

[8/05/13 14 : 24 : 55.468] RuntimeErrorI E LaError [8/05/13 14 : 24 : 55.468] ABCDEFG W SomeWarning 제 날짜, 시간, 프로그램 이름이

로그 레벨 (WARNING, ERROR, TRACE 등) 다음에 오류 메시지 나 경고 메시지 또는 기타 메시지가 표시됩니다.

그래서 내가 얻으려고하는 것은 로그 수준 오류 뿐이며 다른 로그 수준은 아닙니다. 나는 내가 가지고 놀고있는 다음을 가지고있다. 그러나 나는 콘솔 출력을 에 얻지 않을 것이다. 나는 내 grep에서 오류를 확인하는 중 실수를하고 있다고 생각합니다. E (오류)

내가 뭘 하려는지 어떻게 달성 할 수 있는지에 대한 도움을 주시면 감사하겠습니다. 미리 감사드립니다.

input { 

    file { 
    type => "database" 
    path => "/home/nakampe/Desktop/file.log" 
    } 

} 

filter { 

grok { 

    pattern => "[%{MONTHDAY:date}/%{MONTH:month}/%{YEAR:year} %{TIME:time}] %WORD:application} %{WORD:levelType} %{WORD:message}" 

    } 


#Here I want to only consider log levels of E (ERROR) and not others 
    grep{ 

    match => ["levelType", "E"] 

    } 

} 

output { 

    elasticsearch { 

    embedded => true 
    } 

stdout { 
    message => "%{@message}" 
    }  
} 

답변

0

필자는 두 필터를 모두 연결해야한다고 생각합니다. 그렇지 않으면 원본 줄에 독립적으로 적용됩니다. 당신은 grok 수 필터에 태그를 추가하여이 작업을 수행하고 그렙 필터이 반응 할 수

grok { 
    pattern => ... 
    add_tag => [ "groked_input" ] 
} 

grep { 
    match => ... 
    tags => [ "groked_input"] 
} 

희망하는 데 도움이! :)

+0

안녕 Jayeff에서 –

1
grok { 

pattern => "%{MONTHDAY:date}/%{MONTHNUM:month}/%{YEAR:year} %{TIME:time} %{WORD:sast}]  

    %{INT:threadId} %{WORD:applicationName}%{SPACE:space}%{WORD:logLevel} %  {WORD:errorMessage}" 

} 

내 실수가 http://grokdebug.herokuapp.com/를 사용하여 디버깅 후 패턴이었다 모두 확인했다. 매우 유용한 도구. grok 수 섹션

if [levelType] != "ERROR" { 
     drop { } 
} 
0

가, 감사는 응답을, 정말 입력을 주셔서 감사합니다. 나는 내가 그것을 할 수 있었다고 말하기 위해 곧 나의 해결책을 게시하지 않아서 미안하다. 내 실수는 grok 패턴과 관련이있어서 이벤트를 파싱 하느라 바쁜 시간에 볼 수 없었던 오류가 있었기 때문에 Grok 온라인 편집기를 사용하여 디버깅했으며 패턴 오류 때문에 내 테스트가 통과하지 못한 이유를 알아 냈습니다. 패턴을 고쳤고 모든 것이 제자리에 떨어졌습니다. 나는 당신의 학습 곡선을 향상시키기 위해서도 당신이 제안한 것을 안절부절 할 것입니다. 그리고 다시 한번 감사드립니다.