2016-07-12 2 views
0

Logstash 구성 파일을 쓰고 있습니다.logstash에서 grok 필터는 어떻게 작동합니까?

나는 grok 필터가 있습니다. grok 필터의 일치가 정확히 어떻게 작동하는지 알고 싶습니다.

은 내가 logstash 측면에서 하나의 예를 언급하고 다음 보았다

예 로그 : 이것은 우리가 일치하려는 의미

filter { 
    grok { 
    match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" } 
    } 

: 55.3.244.1 GET /index.html 15824 0.043
그것은 아래의 필터를 사용하여 구문 분석을 전체 로그 라인을 순차적으로? 로그 라인이 다릅니다. 그것들은 항상 적절한 틀에 있지 않습니다. 아래의 것과 같은
그것을 :

1. 11:10:15---somedata 
2. 11:10:20---source--destination-- somedata 
3. somedata 

나는 모든 세 가지 유형의 라인 을 캡처 할 것이다 그래서 나는 다른 일치하는 필터를 작성해야? 또는 원본, 대상, somedata 필드를 개별적으로 일치 시켜서 캡처해도 괜찮습니까?

이 문제에 대한 정보는

예 정규식과 grok patterns.But의 기본 사항을 이해하지만 다음과 같은 부분에 대해 일치하는 블록을 작성하는 방법에 대해 여전히 혼란 스럽습니다.

line 1: timestamp source destination a=0,b=1,c=3,d=4 
line 2: timestamp a=1,e=5, b=1 
line 3: g=0 

로그 파일에이 세 줄이 있고 b 및 g 값이있는 줄을 캡처한다고 가정합니다. 내 시합 블록은 어떻게 생겼습니까?

match => message ["b=":variable_b,"g=":variable_g] 

이렇게하면 모든 줄이 b 및 g로 캡처됩니까? b의 경우 1과 2 줄을 캡처해야합니다. g의 경우 3을 포착해야합니다. 따라서 출력에는 세 줄이 모두 포함되어야합니까 ?? 이게 어떻게 작동합니까 아니면 grokparse 오류 던지겠습니까 ??

답변

1

그록 필터는 일치 블록의 패턴과 작동합니다. 정규식으로 작동합니다 (정의는 here 참조). 각 패턴은 두 부분으로 구성됩니다 : %{SYNTAX:SEMANTIC}.
패턴에서 생성 된 정규 표현식이 전체 행과 일치하면 SYNTAX의 값이 SEMANTIC 인 필드로 추가됩니다.
자세한 내용은 documentation을 참조하십시오.

당신은 당신의 필터에서 하나 이상의 grok 수 패턴을 가질 수 있습니다

grok { 
    match => { 
     "message" => [ 
      "%{TIME}--%{DATA:source}--%{DATA:destination}--%{DATA:somedata}", 
      "%{TIME:timestamp}--%{GREEDYDATA:somedata}", 
      "%{GREEDYDATA:somedata}" 
     ] 
    } 
} 

또한, 색도의 코멘트에서 : 기본적으로 grok 수 필터가 제공되는 순서대로 패턴과 일치를 시도합니다. 따라서 세 번째 (GREEDYDATA 하나)를 먼저 입력하면 필터가 그대로 유지됩니다. break_on_match 설정으로 여러 패턴과 일치하도록 false로 설정할 수 있습니다 (기본적으로 true).귀하의 경우에는

, 당신은 그 라인이있는 경우 :

timestamp source destination a=0,b=1,c=3,d=4 
timestamp a=1,e=5, b=1 
g=0 

을하고 bg 가치와 아무것도를 추출 할, 당신은 할 수 있습니다 귀하의 업데이트에서


하나 이상의 패턴을 사용하려면 b 값을 가져오고, 다른 하나는`g 값 :

match => message [ 
    "b=%{NUMBER:b}", 
    "g=%{NUMBER:g}" 
] 
값을 가져옵니다.

Logstash는 로그를 한 줄씩 처리하고 출력은 해당 줄에서 수행 된 프로세스 결과입니다. grok 필터는 패턴이있는 행을 구문 분석하고 구문 분석에 성공하면 필드를 추가하려고 시도합니다. 그것은 선을 포착하지 않습니다.

+0

기본적으로 Grok 필터는 패턴을 제공된 순서대로 일치 시키려고 시도합니다. 따라서 세 번째 (GREEDYDATA 하나)를 먼저 입력하면 필터가 그대로 유지됩니다. break_on_match 설정으로 여러 패턴과 일치시킬 수 있습니다. – Chro

+0

@Chro 고맙습니다. 내 대답에이를 추가 할 수 있습니까? – baudsp

+0

예, 제발! – Chro

관련 문제