Elasticsearch

[Elasticsearch] grok 의 사용방법

IT-PAPA 2023. 10. 4. 06:13
728x90
반응형

grok은 Logstash에서 주로 사용되는 필터 플러그인 중 하나로, 텍스트 기반 로그 데이터를 구문 분석하고 필드로 추출하는 데 사용됩니다. Logstash의 grok 필터를 사용하는 방법을 자세히 설명하겠습니다.

1. grok 필터의 기본 구조

grok 필터를 사용하려면 먼저 필드를 추출하고자 하는 로그 메시지를 구성하는 패턴을 정의해야 합니다. 이러한 패턴은 Logstash에서 미리 정의된 패턴 또는 직접 정의한 사용자 정의 패턴을 사용하여 지정할 수 있습니다.

grok 필터의 기본 구조는 다음과 같습니다:

filter {
  grok {
    match => { "field_name" => "패턴" }
  }
}

2. 미리 정의된 패턴 사용

Logstash에는 많은 미리 정의된 grok 패턴이 포함되어 있으며, 이러한 패턴은 흔히 사용되는 로그 메시지 유형에 대한 추출을 단순화합니다. 예를 들어, %{TIMESTAMP_ISO8601:timestamp}와 같은 미리 정의된 패턴은 ISO 8601 형식의 날짜와 시간을 추출합니다.

3. 사용자 정의 패턴 정의

사용자 정의 패턴을 사용하여 특정 로그 메시지 형식에 대한 구문 분석을 수행할 수 있습니다. 사용자 정의 패턴은 Logstash 설정 파일에 미리 정의되어야 합니다.

예를 들어, 아파치 웹 서버 로그의 일부를 추출하는 사용자 정의 패턴을 정의하려면 다음과 같이 설정합니다:

filter {
  grok {
    match => {
      "message" => "%{IP:client} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{DATA:request} HTTP/%{NUMBER:httpversion}\" %{NUMBER:response} %{NUMBER:bytes}"
    }
  }
}

위의 패턴은 아파치 웹 서버 로그에서 IP 주소, 날짜 및 시간, HTTP 메소드, 요청 URI 등을 추출합니다.

Grok 패턴 설명 예제
%{IP:ip_address} IP 주소 추출 192.168.1.1
%{NUMBER:number} 정수 또는 부동 소수점 숫자 추출 42 또는 3.14
%{WORD:word} 공백 없는 문자열 추출 username123
%{SPACE} 공백 문자 추출 (공백)
%{URIPATHPARAM:uri_path} URI 경로 및 매개변수 추출 /page?param=value
%{TIMESTAMP_ISO8601:timestamp} 날짜와 시간 추출 (ISO 8601 형식) 2023-09-20T10:30:45.123Z
%{HOSTNAME:host} 호스트명 또는 도메인 이름 추출 www.example.com
%{EMAILADDRESS:email} 이메일 주소 추출 user@example.com
%{USERNAME:username} 사용자가 정의한 패턴으로 추출 사용자 정의 패턴 사용 예


4. 추출된 필드 사용

grok 필터를 사용하여 데이터를 추출하면 추출된 필드는 Logstash 이벤트에 새로운 필드로 추가됩니다. 이러한 필드를 나중에 필터링, 변환 또는 출력하는 데 사용할 수 있습니다. 예를 들어, 위의 설정에서 %{IP:client}로 추출된 IP 주소는 client 필드로 사용할 수 있습니다.

5. 로그 메시지 파싱

이제 Logstash가 grok 필터를 사용하여 로그 메시지를 파싱하고 필드를 추출합니다. 추출된 필드는 새로운 필드 이름으로 사용자 정의하거나 기존 필드에 저장됩니다.

예를 들어, 다음과 같은 로그 메시지를 파싱하고 필드를 추출하는 데 사용할 수 있습니다:

192.168.1.100 GET /index.html?param=value

위 로그 메시지를 grok 필터를 사용하여 파싱하면 다음과 같은 결과가 생성됩니다:

{
  "message": "192.168.1.100 GET /index.html?param=value",
  "client_ip": "192.168.1.100",
  "http_method": "GET",
  "request_path": "/index.html?param=value"
}
728x90
반응형
LIST