2016-09-23 5 views
0

메시지를 캡처하는 grok에 코드가 있습니다. 주어진 조건을 충족하면 태그가 생성됩니다.Grok의 Regexp은 때로는 값을 캐치하지 않습니다.

제 문제는 테스트하는 동안이 필터가 작동하며, 때로는 그렇지 않다는 것입니다. 문제의 정규 표현식은 다음과 같습니다.

^(?!(?:\d\d\d\d-\d\d-\d\d.\d\d:\d\d:\d\d)).*$ 

이 메시지는 주어진 메시지가 주어진 시간 소인 형식으로 시작하지 않는지 확인합니다. 즉, 주어진 메시지가이 타임 스탬프로 시작하지 않으면 태그를 얻습니다.

당신이 온라인 응용 프로그램과 함께 스스로를 테스트 할 수 있습니다 :이 테스트 값에 대한 http://grokconstructor.appspot.com/do/match#result

의 regepx이 기준을 충족하는 모든 메시지, 그래서 "테스트"로 두 줄을 캡처 녹색으로 표시됩니다

2016-09-23 18:26:49,714 
2016-09-23 18:26:40,244 
test 

내가 뭐를 이해하고 싶습니다 입력이 같은 경우는 첫 데이트를 캡처하지만

test 
2016-09-23 18:26:49,714 
2016-09-23 18:26:40,244 
test 

이 행동의 배경은 t이며, 어떻게 막을 수 있습니까?

+0

이'.' WiktorStribiżew – revo

+0

@ 그 하나의 공간과 일치하는 것 [그것은 재현이 아니다] (http://i.stack.imgur.com/lpVlJ.png) OP @revo – revo

+0

은 가끔 작동했다. 두 번째 데이터 세트의 경우 http://i.stack.imgur.com/AphzA.png – Laurel

답변

1

은 내가 grok 수있는 다음과 같은 정규 표현식으로 캡처 할 수있는 BOM (바이트 순서 표시)이 있었다 일부 메시지의 시작 부분에이를 것으로 보인다 :

^(?:\xEF\xBB\xBF).*& 

클립 보드에이 표시를 유지할 수 있지만 StackOwerflow에서 잘라내는 것처럼 보이므로 내 예가 모든 사람에게 적용되지 않습니다.

2

왜 현명한 방법으로 타임 스탬프를 일치시키는 것이 좋을까요? 당신은 다음과 같은 여러 날짜 형식을 일치시킬 수 있습니다 :

date { 
    match => [ "log_timestamp", "dd/MMM/YYYY HH:mm:ss", "dd/MMM/YYYY HH:mm:ss.SSS" ] 
    timezone => "Etc/UTC" 
    locale => "en-US" 
} 

이 일치합니다 (23)// 2016 9월 15시 15분 0초 또는 23// 2016 9월 15 : 15 : 00.123이 (우리는 버전 때 우리가 변경 한)

줄의 다른 곳에 나타나지 않는 한, 이것은 당신을 거의 감추고 있어야합니다.

1

내가 어떤 일이 발생하는지 또는 어떤 패턴이 정확히 따르는지 확신 할 수 없지만 어떤 행동이 online tester에서 발생하는지 알고 있다고 생각합니다. (나는 정규식에 익숙하지만 다른 것은 여기에 없다. 더 많은 것을 알고 있다면, 주석에이 점에 대해 약간의 빛을 비추도록해라.)

복제하려면 다음을 " 당신은 일치 할 "그것이 말하는 장소에서

2016-09-23 18:26:49,714 
2016-09-23 18:26:40,244 
test 

"

^(?!(?:\d\d\d\d-\d\d-\d\d.\d\d:\d\d:\d\d)).*$ 

체크 박스에 엉망를 수행합니다 (I, 모든 로그 파일 라인 "과 일치하는 정규 표현식을 두어야 패턴 그들이하는 일을 잘 모르겠지만 모두 확인해야합니다.)

명중! 당신은 코멘트에 언급 된 REVO,이 결과를 얻을 :

works

다른 결과를 얻으려면, 설정 일 동일한 방법으로 (그냥이 여전히 설정해야합니다 정규식을 제출 한 경우) "Logstash의 다중 행 필터를 사용하려면 사용 된 패턴을 지정하십시오."라는 영역에 동일한 정규식을 추가하십시오.

명중!당신은이 결과를 얻을 :

fails

이를 방지 할 수있는 간단한 방법이 Logstash's multiline filter을 사용하지 않는 것입니다. (적어도 그게 내가 생각 할거야.)