2014-02-15 4 views
0

nginx 로그 파일의 출력을 잡고 logstash로 보내려고합니다.grok - 인용 문자열을 어떻게 찾습니까?

10.1.10.20 - bob [14/Feb/2014:18:57:05 +0000] “POST /main/foo.git/git-upload-pack HTTP/1.1” 200 3653189 “-” “git/1.8.3.4 (Apple Git–47)” 

그록 잘 처음 3 개 단어를 찾을 수

10.1.10.20 - bob [14/Feb/2014:18:57:05 +0000] 

%{IPV4:user_ip} - %{USERNAME:user_name} \[%{HTTPDATE:time_local}\] 

grok 수 내가 그들을 결합 할 때

[14/Feb/2014:18:57:05 +0000] “POST /main/foo.git/git-upload-pack HTTP/1.1” 

\[%{HTTPDATE:time_local}\] %{QUOTEDSTRING:request} 

그러나 벌금 3, 4 단어를 발견하고 시도 할 수 있습니다 모두 4를 찾으려면 grok에 결과가 없음 (http://grokdebug.herokuapp.com/을 테스트 용으로 사용함)

10.1.10.20 - bob [14/Feb/2014:18:57:05 +0000] “POST /main/foo.git/git-upload-pack HTTP/1.1” 

%{IPV4:user_ip} - %{USERNAME:user_name} \[%{HTTPDATE:time_local}\] %{QUOTEDSTRING:request} 
#not found 

누구나 위의 예에서 인용 된 문자열을 얻는 방법을 알고 있습니까?

저는 grok에 새로운 브랜드입니다. 따라서이 문제에 올바르게 접근하지 못하고 있습니다. 나는 다음과 같은 로그 라인을 사용하여 수동으로 URL을 입력하면

업데이트

는 흥미롭게도이

bob 14/Feb/2014:18:57:05 +0000 "herp" 
#Once herp works, replace herp, with POST 
bob 14/Feb/2014:18:57:05 +0000 "POST" 
#Once POST works, keep expounding until the whole thing is in place 
autobuild 14/Feb/2014:18:57:05 +0000 "POST /main/builder.git/git-upload-pack HTTP/1.1" 
+0

안녕하세요, 오른쪽 형식 형식 (예 : time_local 필드를 날짜로 인식)과 함께 elasticsearch에 데이터를 보내 주셨습니까? –

답변

0

작동합니까 오버 플로우 스택을 게시하는 과정은 문제를 확인했다. 주의 깊게 보면

, 큰 따옴표가 다르게

"POST 

대 수동으로 따옴표를 입력

“POST 

을 구문 분석하는 문제를 해결 패턴

3

"POST /main/builder.git/git-upload-pack HTTP/1.1"

"% {단어 : 동사} % {URIPATHPARAM : 요청} HTTP/% {NUMBER : ht tpversion} "또한

0

은 당신이 경우에이 표현을 사용할 수있는 로그 변경 :

"%{WORD:verb}(?:| %{URIPATHPARAM:request})(?:| HTTP/%{NUMBER:httpversion})" 

그것과 일치 :

"POST /main/builder.git/git-upload-pack HTTP/1.1" 

또는

"POST /main/builder.git/git-upload-pack" 

또는

"POST" 

시도해보기;)

관련 문제