본문으로 건너뛰기

로그 파서 설정

로그 1차 파서 설정

로그 설정 상단의 로그 1차 파서 설정 탭을 선택해 수집된 로그에 대한 파서를 등록할 수 있습니다.

로그 1차 파서는 GROKJSON 파서를 제공하며 유형별 로그 발생 수 집계나 특정 로그 탐색을 위한 필수 파서입니다. 패턴 조건에 맞는 검색 키와 검색 값을 추출하며, 파싱된 키는 로그 유형 분류 및 검색 인덱싱에 활용합니다.

  • GROK: 기본은 정규 표현식 기반 파싱에 해당합니다. 예약 키워드 기반의 파싱을 제공합니다.

  • JSON: 로그 중 JSON으로 출력된 부분에 대해서 일괄 파싱을 제공합니다.

파싱 로직 미등록 시 검색 가능한 key

category, oid, oname, okind, okindName, @txid, @login, httphost

파서 등록이 불가한 예약어

timestamp, message, pcode, category, content, logContent

  • 다음 예약어의 경우 파서를 등록하더라도 인덱스가 생성되지 않습니다.
노트

로그 파서에 대한 자세한 내용은 다음 문서를 참고하세요.

설정 항목

설정 값설명기타
카테고리패턴을 적용할 카테고리required
로그 검출 조건필터로 적용할 검색 키, 검색 값을 입력
- 로그 검출 조건에 맞는 로그 데이터에만 패턴 적용, 로그 검출 조건을 입력하지 않으면 모든 로그를 대상으로 패턴 적용
optional
패턴로그를 파싱(parsing)할 패턴
- 작성한 패턴에 맞추어서 파싱을 하고 인덱스 생성
GROK, 정규 표현식 문법 지원
required

파서 목록

등록한 파서를 조회하고, 추가 및 편집할 수 있습니다. 파서는 등록 순서대로 적용되며, 최초로 일치하는 파서만 적용됩니다.

  • 상단 오른쪽 + 추가하기 버튼을 클릭하면 파서 추가 창이 나타납니다.

  • 적용 순서 컬럼의 아이콘을 드래그해 파서 설정 순서를 변경할 수 있습니다.

  • 아이콘 활성화 토글로 파서 활성화 여부를 지정할 수 있습니다.

  • 수정 아이콘 수정삭제 아이콘 삭제 아이콘을 통해 등록한 파서를 수정 및 삭제할 수 있습니다.

파서 등록

다음은 파서를 등록하는 공통 순서입니다.

  1. 로그 1차 파서 설정에서 + 추가하기 버튼을 클릭하세요.

  2. 파서 추가 창에서 파서를 선택하세요.

    노트

    파서 및 패턴 등록 방법

  3. 파서를 선택하면 패턴 등록 버튼이 활성화됩니다. 패턴 등록 버튼을 클릭한 후, 파서 시뮬레이션 창에서 패턴과 로그를 입력합니다.

    a. 패턴을 입력하세요.

    b. 로그카테고리시뮬레이션 파싱 로그를 입력하세요. 로그 검색 버튼을 클릭한 후, 검색된 목록에서 원하는 로그 오른쪽의 선택 버튼을 클릭하면 로그가 자동으로 입력됩니다.

    노트

    로그 검색을 통해 수집된 로그 중 예시 로그를 선택할 수 있습니다. 선택한 로그는 시뮬레이션 입력창에 자동 반영되어 복사/붙여넣기 없이 바로 테스트할 수 있습니다.

    c. 등록하려는 패턴이 정상인지 시뮬레이션 버튼을 클릭해 시뮬레이션 및 패턴의 퍼포먼스를 측정하세요.

    노트

    시뮬레이션과 퍼포먼스 측정에 관한 자세한 내용은 다음 문서를 참고하세요.

  4. 성공적으로 파싱되는지 시뮬레이션 결과를 확인한 후, 패턴 적용 버튼을 클릭하세요.

  5. 추가 버튼을 클릭하면 파서가 추가됩니다.

노트

개인정보 비식별화

파서 등록 시 검색 키 이름을 검색 키.p로 지정하면 비식별화 대상이 됩니다(예: myname.p **). 와탭은 개인정보 비식별화 탭에서 비식별화를 관리하는 방식을 권장합니다. 자세한 내용은 개인정보 비식별화를 참고하세요.

GROK 파서 패턴 등록

기본 문법은 %{SYNTAX:SEMANTIC} 입니다. GROK 파서에 대한 자세한 내용은 다음 문서를 참조하세요. 패턴 등록 및 시뮬레이션이 필수적입니다.

  • SYNTAX

    GROK 정의 패턴입니다.

  • SEMANTIC

    파싱된 데이터에 할당할 키입니다.

    노트

    SEMANTIC에는 예약어 등이 사용되지 않도록 조합어 사용을 권장합니다.

JSON 포맷 파서 패턴 등록

로그 전체 또는 일부가 JSON 형태로 출력되는 경우 해당 부분을 파싱할 수 있습니다. Prefix, Postfix 옵션으로 JSON 인식 범위를 지정합니다. JSON 파서에 대한 자세한 내용은 다음 문서를 참조하세요. 시뮬레이션이 필수적입니다.

옵션설명
PrefixJSON 문자열의 시작 부분 앞의 문자열을 지정합니다. 미지정 시 로그 출력문의 맨 앞부터 JSON 문자열로 식별합니다.
PostfixJSON 문자열의 종료 부분 뒤의 문자열을 지정합니다. 미지정 시 로그 출력문의 맨 뒤까지를 JSON 문자열로 식별합니다.
IgnoreJSON 출력부 중 키 추출을 제외할 필드를 지정합니다.
  • 등록 예시

    Log
    [2022-10-25 10:15:34:145]...(개행)
    Request : {"key1":"value1","key2":"value2",...}(개행)
    Response : {"key3":"value3","key4":"value4",...}

    예시처럼 유입되는 로그가 Request JSON, Response JSON을 모두 파싱하고자 하는 경우 다음의 2가지 패턴을 등록합니다.

    • Request 파싱용 패턴

      "Request : " 와 "Response" 사이의 문자열 {"key1":"value1","key2":"value2",...} 대상

    • Response 파싱용 패턴

      "Response : " 부터 로그의 마지막 까지의 문자열 {"key3":"value3","key4":"value4",...} 대상

  • JSON 커스텀 패턴 등록

    로그 중 일부가 JSON 형태로 출력되는 경우 JSON으로 출력된 부분을 전용 커스텀 파서를 통해 파싱할 수 있습니다. 패턴을 다음과 같이 입력하세요.

    io.whatap.logsink.parser.JsonFormatParser{}

    로그 중 JSON 형태로 출력된 부분을 검출하기 위해 Prefix, Postfix 옵션을 조합해 로그의 어느 부분을 JSON으로 인식하여 파싱할지 지정하세요.

    JsonFormatParser{}{} 에 옵션을 지정합니다.

    • 등록 예시

      Log
      [2022-10-25 10:15:34:145]...(개행)
      Request : {"key1":"value1","key2":"value2",...}(개행)
      Response : {"key3":"value3","key4":"value4",...}

      예시처럼 유입되는 로그가 Request JSON, Response JSON을 모두 파싱하고자 하는 경우 다음의 2가지 패턴을 등록합니다.

      • Request 파싱용 패턴

      "Request : " 와 "Response" 사이의 문자열 {"key1":"value1","key2":"value2",...} 대상

      io.whatap.logsink.parser.JsonFormatParser {prefix:"Request : ",postfix:"Response"}
      • Response 파싱용 패턴

      "Response : " 부터 로그의 마지막 까지의 문자열 {"key3":"value3","key4":"value4",...} 대상

      io.whatap.logsink.parser.JsonFormatParser {prefix: "Response : "}

파서 시뮬레이션 및 퍼포먼스 측정

파서 시뮬레이션 후 패턴을 등록할 수 있습니다. 퍼포먼스 측정은 시뮬레이션 수행 대상 문자열에 대하여 파서의 반복 파싱 소요 시간을 측정합니다.

  1. 패턴로그를 입력하세요. 로그 검색 버튼을 클릭한 후, 검색된 목록에서 원하는 로그 오른쪽의 선택 버튼을 클릭하면 로그가 자동으로 입력됩니다.

  2. 시뮬레이션 버튼을 클릭하여 등록하려는 패턴으로 파싱에 성공하는지 확인하세요.

  3. 시뮬레이션 성공 시 시뮬레이션 결과퍼포먼스 측정 결과를 조회할 수 있습니다.

  4. 시뮬레이션 후 패턴 적용 버튼 클릭 시 선택한 파서에 입력한 패턴이 적용됩니다.

파싱 성공

파싱 로직을 등록해 (key)가 생성되면 로그 조회 시 해당 키로 파싱된 값이 추가됩니다. 다음 라이브 테일 메뉴 예시와 같이 파싱된 키와 값이 추가됩니다.

파싱 성공

파싱된 키는 라이브 테일, 로그 검색, 로그 트렌드에서 확인할 수 있습니다.

로그 2차 파서 설정

로그 설정 메뉴 상단에서 로그 2차 파서 설정 탭을 선택해 로그 파서를 등록할 수 있습니다.

로그 2차 파서는 1차 파서(GROK 또는 JSON)로 추출한 값을 가공해 통계 데이터나 새로운 필드를 생성합니다. HTTP 상태 코드 기반 통계 파서와 함께 키워드 필터, 필드 가공, 응답 시간 분류, GeoIP 변환 등 다양한 프로세서를 제공합니다.

노트

로그 2차 파서는 1차 파싱된 결과에 대하여 특수 목적의 2차 파싱 기능을 제공합니다. 2차 파서를 사용하기 위해서는 1차 파서등록되어 있어야 합니다.

파서 목록

로그 2차 파서 목록

등록한 파서를 조회하고, 추가 및 편집할 수 있습니다.

파서 추가, 순서 변경, 활성화 토글, 수정 및 삭제 등의 조작 방법은 1차 파서 목록과 동일합니다.

파서 등록 순서

다음은 파서를 등록하는 공통 순서입니다.

로그 2차 파서 등록 순서

  1. + 추가하기 버튼을 선택하면 파서 추가 창이 나타납니다.

  2. 파서 선택 창에서 파서를 선택하세요. 각 파서별 설정 항목은 다음 문서를 참조하세요.

  3. 제외할 상태 코드를 입력하세요.

  4. 카테고리 선택 창에서 카테고리를 선택하거나 직접 입력하세요.

  5. 로그 검출 조건을 선택하거나 직접 입력하세요.

  6. 추가 버튼을 선택해 파서를 등록하세요.

4xx, 5xx 상태 코드 파서 설정 항목

4xx, 5xx 상태 코드 파서는 1차 파서로 파싱된 status 값을 기반으로 4xx, 5xx 건수 데이터를 생성합니다. 특정 상태 코드를 제외하려면 제외할 상태 코드를 입력하세요.

설정 항목

설정 값설명기타
카테고리4xx, 5xx건수 데이터를 생성할 카테고리입니다.required
로그 검출 조건필터로 적용할 검색 키, 검색 값을 입력합니다. 로그 검출 조건에 맞는 로그 데이터에 대해서만 4xx, 5xx건수 데이터를 생성합니다. 로그 검출 조건을 입력하지 않으면 모든 로그를 대상으로 데이터를 생성합니다.optional
제외할 상태 코드통계 데이터 생성 시 제외할 상태 코드입니다. 입력하지 않으면 4xx~5xx에 해당하는 전체 오류 상태 코드를 대상으로 4xx, 5xx건수 데이터를 생성합니다.optional

status 파서 등록 예시

GROK파서 - status 파싱 패턴 등록

유입되는 로그가 {"msg":"message","status":404}이고 예시처럼 GROK 파서로 status를 파싱한다면, status: 404와 같이 파싱됩니다. status가 정상적으로 파싱되는 것을 확인했다면 4XX,5XX 상태 코드 파서에서 제외할 상태 코드를 등록하세요.

데이터 조회

파서를 모두 등록하면 통합 Flex 보드로 이동해 로그 4XX, 5XX 건수 위젯을 생성하세요.

로그 플렉스 보드 위젯-4xx5xx

위젯을 생성하면 다음과 같이 데이터를 확인할 수 있습니다.

로그 플렉스 보드 위젯 차트-4xx5xx

  • avg: 조회 기간 데이터 평균값입니다.

  • max: 조회 기간 데이터 중 최댓값입니다.

  • recently: 조회 기간 데이터 중 마지막 값입니다.

상태 코드 성공률 파서 설정 항목

상태 코드 성공률 파서는 1차 파서로 파싱된 status 값을 기반으로 HTTP 요청 성공률 데이터를 생성합니다. 특정 상태 코드를 제외하려면 제외할 상태 코드를 입력하세요. status 파싱에 관한 내용은 4xx, 5xx 상태 코드 파서 설정 항목을 참조하세요.

설정 항목

설정 값설명기타
카테고리요청 성공률 데이터를 생성할 카테고리입니다.required
로그 검출 조건필터로 적용할 검색 키, 검색 값을 입력합니다. 로그 검출 조건에 맞는 로그 데이터에 대해서만 요청 성공률 데이터를 생성합니다. 로그 검출 조건을 입력하지 않으면 모든 로그를 대상으로 데이터를 생성합니다.optional
제외할 상태 코드요청 성공률 데이터 생성 시 제외할 상태 코드입니다. 입력하지 않으면 2xx~3xx에 해당하는 전체 성공 상태 코드를 대상으로 요청 성공률 데이터를 생성합니다.optional

데이터 조회

파서를 모두 등록하면 통합 Flex 보드로 이동해 로그 요청 성공률 위젯을 생성하세요.

로그 요청 성공률 위젯 템플릿

위젯을 생성하면 다음과 같이 데이터를 확인할 수 있습니다.

로그 플렉스 보드 요청 성공률 위젯 차트-4xx5xx

차트 위 데이터는 조회 기간에 대한 통계를 나타냅니다. 통계 방법을 최근값, 최댓값, 평균값 등으로 선택할 수 있습니다. 최근값이 기본으로 선택되어 있습니다.

2차 파서 프로세서

로그 2차 파서는 4xx, 5xx 상태 코드 파서상태 코드 성공률 파서 외에도 다음과 같은 필드 가공 프로세서를 제공합니다.

로그 2차 파서 프로세서 목록

프로세서설명
모든 키워드 포함 필터지정한 모든 키워드가 포함된 로그에 플래그 필드를 추가합니다.
일부 키워드 포함 필터지정한 키워드 중 하나라도 포함된 로그에 플래그 필드를 추가합니다.
필드명 변경기존 필드명을 다른 이름으로 변경합니다.
상태 코드 그룹 분류HTTP 상태 코드를 2xx/3xx/4xx/5xx 그룹으로 자동 분류합니다.
URL 정적/동적 분류URL에 확장자(.)가 있으면 정적 콘텐츠, 없으면 동적 서블릿으로 분류합니다.
URL 파라미터 제거URL에서 ? 이후의 쿼리 파라미터를 제거한 값을 저장합니다.
응답 시간 분류응답 시간(ms)을 fast/normal/slow/critical 구간으로 자동 분류합니다.
JSON 필드 추출JSON 문자열 필드에서 특정 키를 추출하여 새 필드로 저장합니다.
GeoIP 변환IP 주소를 국가/도시 정보로 변환합니다.
직접 입력FQN 클래스명으로 프로세서를 직접 등록합니다.

모든 키워드 포함 필터

지정한 모든 키워드가 포함된 로그에 플래그 필드를 추가합니다.

설정 값설명기본값
입력 필드키워드를 검색할 필드명content
저장 필드결과를 저장할 필드명has_str_all
keyword검색할 키워드 목록 (쉼표로 구분해 입력)required

활용 예시: 입력 필드를 content, 키워드를 error, timeout, database로 설정하면 세 키워드가 모두 포함된 로그에만 has_str_all 필드가 추가됩니다.

일부 키워드 포함 필터

지정한 키워드 중 하나라도 포함된 로그에 플래그 필드를 추가합니다.

설정 값설명기본값
입력 필드키워드를 검색할 필드명content
저장 필드결과를 저장할 필드명has_str_any
keyword검색할 키워드 목록 (쉼표로 구분해 입력)required

활용 예시: 입력 필드를 content, 키워드를 reboot, shutdown, restart로 설정하면 키워드 중 하나라도 포함된 로그에 has_str_any 필드가 추가됩니다.

필드명 변경

기존 필드명을 다른 이름으로 변경합니다. 대상 필드명이 이미 존재하면 덮어쓰지 않습니다.

설정 값설명기본값
원본 필드변경할 기존 필드명required
새 필드명변경 후 필드명required

상태 코드 그룹 분류

HTTP 상태 코드를 status_2xx, status_3xx, status_4xx, status_5xx 그룹으로 자동 분류합니다.

설정 값설명기본값
입력 필드상태 코드가 담긴 필드명status
저장 필드그룹 분류 결과를 저장할 필드명status_nxx

활용 예시: status 값이 404이면 status_nxx 필드에 status_4xx가 저장됩니다.

URL 정적/동적 분류

URL에 확장자(.)가 포함되어 있으면 정적 콘텐츠, 포함되지 않으면 동적 서블릿으로 분류합니다.

설정 값설명기본값
입력 필드URL이 담긴 필드명url
저장 필드분류 결과를 저장할 필드명url_type

URL 파라미터 제거

URL에서 ? 이후의 쿼리 파라미터를 제거한 경로만 저장합니다.

설정 값설명기본값
입력 필드URL이 담긴 필드명url
저장 필드파라미터 제거 결과를 저장할 필드명url_without_params

활용 예시: /api/v1/users?page=1&size=20url_without_params 필드에 /api/v1/users가 저장됩니다.

응답 시간 분류

응답 시간(ms)을 구간별로 자동 분류합니다. 구간 임계값을 직접 설정할 수 있습니다.

설정 값설명기본값
입력 필드응답 시간(ms)이 담긴 필드명elapsed
저장 필드분류 결과를 저장할 필드명response_class
Fast 상한(ms)fast 구간 상한값100
Normal 상한(ms)normal 구간 상한값500
Slow 상한(ms)slow 구간 상한값2000

기본값 기준 분류 결과는 다음과 같습니다.

응답 시간분류
0 ~ 100msfast
101 ~ 500msnormal
501 ~ 2000msslow
2001ms 이상critical

활용 예시: 로그 탐색에서 response_class: critical로 필터링하면 응답 시간이 2초를 초과하는 로그만 조회할 수 있습니다.

JSON 필드 추출

1차 파서로 추출한 필드에 JSON 문자열이 포함된 경우 해당 JSON에서 특정 키를 추출하여 새 필드로 저장합니다.

설정 값설명기본값
입력 필드JSON 문자열이 담긴 필드명payload
추출할 키추출할 JSON 키 목록 (쉼표로 구분해 입력)required
저장 접두사추출된 키 이름 앞에 붙일 접두사 (예: json_)optional
노트
  • 로그 전체가 JSON인 경우 1차 JSON 파서가 자동으로 파싱합니다. 이 프로세서는 GROK 1차 파서 사용 시 텍스트 로그 안에 포함된 JSON 부분을 추가로 파싱할 때 유용합니다.

  • 성능 보호를 위해 JSON 필드 크기가 10KB를 초과하면 파싱을 건너뜁니다.

활용 예시

1차 GROK 파싱 결과
payload = {"user":"alice","action":"purchase","product":"laptop","amount":45000}

입력 필드 payload, 추출할 키 user, action, 저장 접두사 pay_ 설정 시 다음과 같이 추출됩니다.

JSON 필드 추출 결과
pay_user = alice
pay_action = purchase

GeoIP 변환

IP 주소를 국가 및 도시 정보로 변환합니다. IP2Location 데이터베이스를 활용해 접근 로그의 지역별 분석이 가능합니다.

설정 값설명기본값
입력 필드IP 주소가 담긴 필드명client_ip
저장 접두사결과 필드 이름의 접두사geo

결과로 {접두사}_country, {접두사}_city 두 개의 필드가 생성됩니다.

활용 예시: 입력 필드 client_ip 값이 223.130.195.200이고 저장 접두사가 geo인 경우:

GeoIP 변환 결과
geo_country = KR
geo_city = Seongnam

직접 입력

목록에 없는 프로세서를 FQN(Fully Qualified Name) 클래스명으로 직접 등록할 수 있습니다.

직접 입력 형식
io.whatap.logsink.processor.ClassName{"param1":"value1","param2":"value2"}
노트

클래스명과 파라미터 형식이 정확해야 합니다. 잘못된 입력 시 프로세서가 동작하지 않을 수 있습니다.

2차 파서 체이닝

동일 카테고리에 여러 2차 파서를 등록해 체이닝할 수 있습니다. 각 프로세서는 등록 순서대로 실행됩니다.

원본 로그
2026-04-23T10:30:00.123+0900|INFO|api-01|192.168.1.10|/api/v1/orders?detail=true|200|1234|{"user":"alice","action":"purchase"}|Request processed
순서파서입력 → 출력
1차GROKtimestamp, level, host, client_ip, url, status, elapsed, payload, content
2차-1JSON 필드 추출payload → user, action
2차-2응답 시간 분류elapsed → response_class (slow)
2차-3상태 코드 그룹 분류status → status_nxx (status_2xx)
2차-4URL 파라미터 제거url → url_without_params (/api/v1/orders)
2차-5GeoIP 변환client_ip → geo_country (KR), geo_city (Seoul)
노트

2차 파서의 카테고리는 1차 파서와 동일하게 설정해야 합니다. 다른 카테고리로 설정하면 해당 로그에 2차 파서가 적용되지 않습니다.

로그 파서를 사용하면 불규칙한 형태의 로그를 쿼리가 가능한 구조화된 형태로 변경할 수 있습니다. 와탭 로그 모니터링은 다음과 같이 두 가지 유형의 파서를 제공합니다.

  • GROK 파서: 임의의 형태로 수집되는 로그를 정규 표현식과 GROK 문법을 활용해 파싱합니다.

  • JSON 파서: JSON 형태로 수집되는 로그를 파싱합니다.

노트

공통 주의사항

  • 같은 카테고리에 여러 개의 파서가 등록되어 있는 경우 첫 번째로 매칭되는 파서만 적용됩니다.

  • 와탭은 와탭 서비스의 안정성에 영향을 줄 수 있는 파서를 비활성화할 수 있는 권한을 가집니다.

GROK 파서

로그가 불규칙한 형태로 수집되는 경우 GROK 파서를 사용해 로그를 파싱할 수 있습니다. GROK 문법은 named regular expressions를 제공해 정규 표현식을 보다 쉽고 편리하게 사용할 수 있습니다.

GROK 파서 패턴 등록에 관해 다음 동영상 가이드를 참조하세요.

GROK 시작하기

GROK은 두 가지 형태의 문법을 제공합니다.

  1. %{SYNTAX:SEMANTIC}: GROK 라이브러리에서 제공하는 문법입니다. named regular expressions를 활용해 태그를 추출할 수 있습니다. 활용 예시는 다음을 참조하세요.

    • SYNTAX: GROK이 제공하는 named regular expressions를 지정합니다.

    • SEMANTIC: 매칭되는 값에 부여할 이름을 지정합니다.

    노트

    named regular expressions

    GROK에서 제공하는 문법입니다. 복잡한 정규 표현식에 이름을 부여해 사용할 수 있도록 GROK에서 제공하는 기능입니다.

    nameregular expression
    WORD\b\w+\b
    SPACE\s*
    NOTSPACE\S+
    UUID[A-Fa-f0-9]{8}-(?:[A-Fa-f0-9]{4}-){3}[A-Fa-f0-9]{12}

    와탭에서 제공하는 모든 named regular expressions 확인을 원한다면 다음 링크를 참조하세요.

  2. (?<SEMANTIC>REGX): 정규 표현식의 named capturing group 문법입니다. 정규 표현식을 활용해서 사용자의 의도에 맞게 태그를 추출할 수 있습니다. 활용 예시는 다음을 참조하세요.

    • SEMANTIC: 매칭되는 값에 부여할 이름을 지정합니다.

    • REGX: 매칭에 사용할 정규 표현식을 입력합니다.

    노트

    named capturing group

    정규 표현식에서 제공하는 문법입니다.

    • capturing group: 여러 개의 토큰을 하나로 묶어 하나의 매칭 단위로 사용하는 기능을 의미합니다.

    • named capturing group: capturing group에 이름을 부여한 것입니다.

    • 문자열 매칭 예시를 살펴보겠습니다. dev@whatap.io

      • 예시 1 (\w+)@(\w+\.\w+)
      • 예시 2 이메일 전체 매칭 및 username과 domain 추가 매칭 시 (?<username>\w+)@(?<domain>\w+\.\w+)

%{SYNTAX:SEMANTIC} 활용 예시

다음은 %{SYNTAX:SEMANTIC} 문법을 활용하는 예시입니다.

Sample log
[2023-08-08 02:02:30,101 GMT][INFO ][i.w.y.l.c.LogSinkDexScheduleThread.realProcess(159)] 8 VirtualLog 20230808 02:01:00.000 {area=4, city=5} 56ms

샘플 로그를 보고 각 단어가 의미하는 내용을 유추할 수 있습니다. 각 부분을 semantic한 단어로 치환 시 다음과 같이 표현할 수 있습니다.

semantic replace
[date][logLevel][caller] projectCode logCategory dexBuildStartTime {area=areaEnum, city=cityEnum} dexBuildElapsed

semantic한 단어 모두 정규 표현식으로 대체할 수 있습니다. GROK 파서를 사용하면 사전 정의된 named regular expressions를 활용할 수 있습니다. 여기서 사용된 TIMESTAMP_ISO8601, LOGLEVEL, DATA 는 GROK에서 제공하는 named regular expressions입니다. 이 값들은 각각 다음의 정규 표현식으로 대체되어 매칭됩니다.

  • name: TIMESTAMP_ISO8601

    • regular expression: %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?
  • name: LOGLEVEL

    • regular expression: LOGLEVEL ([Aa]lert|ALERT|[Tt]race|TRACE|[Dd]ebug|DEBUG|[Nn]otice|NOTICE|[Ii]nfo|INFO|[Ww]arn?(?:ing)?|WARN?(?:ING)?|[Ee]rr?(?:or)?|ERR?(?:OR)?|[Cc]rit?(?:ical)?|CRIT?(?:ICAL)?|[Ff]atal|FATAL|[Ss]evere|SEVERE|EMERG(?:ENCY)?|[Ee]merg(?:ency)?)
  • name: DATA

    • regular expression: .*?
GROK parsing pattern
\[%{TIMESTAMP_ISO8601:date}\sGMT\]\[%{LOGLEVEL:level}\s\]\[%{DATA:caller}\] 

위와 같은 문법으로 파싱을 하면 다음과 같이 태그를 추출할 수 있습니다. 이렇게 GROK의 %{SYNTAX:SEMANTIC} 문법은 복잡하고 긴 정규 표현식을 쉽고 간결하게 적용할 수 있도록 도와주는 역할을 합니다.

Tag extraction
- date : 2023-08-08 02:02:30,101
- caller : i.w.y.l.c.LogSinkDexScheduleThread.realProcess(159)
- level : LEVEL

(?<SEMANTIC>REGX) 활용 예시

named regular expressions로 매칭되지 않는 부분은 (?<SEMANTIC>REGX) 패턴을 사용해서 파싱할 수 있습니다. 위의 샘플 로그에서 %{SYNTAX:SEMANTIC} 문법만으로 파싱되지 않는 영역은 다음과 같습니다.

Unparsed area
8 VirtualLog 20230808 02:01:00.000 {area=4, city=5} 56ms

해당 로그의 각 부분을 semantic한 단어로 치환 시 다음과 같이 표현할 수 있습니다.

semantic replace
projectCode logCategory dexBuildStartTime {area=areaEnum, city=cityEnum} dexBuildElapsed

이렇게 불규칙한 형태의 문자열은 다음과 같은 (?<SEMANTIC>REGX) 문법을 사용해 파싱할 수 있습니다.

샘플 로그 파싱 키워드별 매칭되는 정규 표현식
파싱 키워드(?<SEMANTIC>REGX)
8(?<projectCode>\d)
VirtualLog(?<logCategory>\w*)
20230808 02:01:00.000(?<dexBuildStartTime>\d{8}\s\d{2}:\d{2}:\d{2}\.\d{3})
area=4area=(?<areaEnum>\d)
city=5city=(?<cityEnum>\d)
56ms(?<dexBuildElapsed>\d{2})ms
기본 정규 표현식 문법
문법의미별칭
?0 or 1-
+1 or more-
*0 or more-
a{5}exactly 5-
\wword character[a-zA-Z_0-9]
\swhite space-
.any character except newline-
[abc]any of-
[^abc]not a,b, or c-
[a-z]character between a and z-
[1-3[7-9]]union (combining two or more character classes)-
[1-6&&[3-9]]intersection (교집합)-
[0-9&&[^2468]]subtraction (차집합)-
a{2,}2 or more-
a{1,3}between 1 and 3-
a+?match as few as possible-
{2,3}?match as few as possible-
(abc)capturing group (여러 개의 문자열을 single unit으로 처리함)-
\ddigit[0-9]
\Dnon-digit[^0-9]
\Wnon-word character-
\Snon-white space-

이렇게 파싱된 키워드를 띄어쓰기(\s)와 특수 문자 escape(\{, \,, \})로 연결하면 다음과 같이 패턴을 적용할 수 있습니다.

GROK parsing pattern
(?<projectCode>\d)\s(?<logCategory>\w*)\s(?<dexBuildStartTime>\d{8}\s\d{2}:\d{2}:\d{2}\.\d{3})\s\{area=(?<areaEnum>\d),\scity=(?<cityEnum>\d)\}\s(?<dexBuildElapsed>\d{2})ms

위와 같은 문법으로 파싱을 하면 다음과 같이 태그를 추출할 수 있습니다.

Tag extraction
- projectCode : 8
- logCategory : VirtualLog
- dexBuildStartTime : 20230808 02:01:00.000
- areaEnum : 4
- cityEnum : 5
- dexBuildElapsed : 56

GROK 적용하기

로그 설정 > 로그 1차 파서 설정

  1. GROK 패턴 파서를 적용하려면 로그 설정 메뉴의 로그 1차 파서 설정 탭으로 이동하세요.

  2. + 추가하기를 선택 후 파서 입력란에서 GROK 파서를 선택하세요.

  3. 패턴 등록 버튼 선택 시 오른쪽에 패턴 등록 및 시뮬레이션 창이 나타납니다.

  4. 패턴로그 입력 후 시뮬레이션 버튼을 클릭하여 적용하려는 패턴으로 파싱에 성공하는지 확인하세요.

    패턴 예시: [%{TIMESTAMP_ISO8601:date}\sGMT\][%{LOGLEVEL:level}\s\][%{DATA:caller}\]\s(?<projectCode>\d)\s(?<logCategory>\w*)\s(?<dexBuildStartTime>\d{8}\s\d{2}:\d{2}:\d{2}\.\d{3})\s\{area=(?<areaEnum>\d),\scity=(?<cityEnum>\d)\}\s(?<dexBuildElapsed>\d{2})ms

    로그 예시: [2023-08-08 02:02:30,101 GMT][INFO ][i.w.y.l.c.LogSinkDexScheduleThread.realProcess(159)] 8 VirtualLog 20230808 02:01:00.000 {area=4, city=5} 56ms

  5. 시뮬레이션 성공 시 시뮬레이션 결과퍼포먼스 측정 결과를 조회할 수 있습니다.

  6. 시뮬레이션 후 패턴 적용 버튼 클릭 시 선택한 파서에 입력한 패턴이 적용됩니다.

  7. 패턴 적용 후 카테고리로그 검출 조건, 패턴을 입력하세요.

    GROK 파서 입력

    • 카테고리

      로그 카테고리를 선택하세요. 카테고리는 필수로 입력해야 합니다.

    • 로그 검출 조건
      • 조건에 만족하는 로그만 파서가 적용됩니다.

      • 검색 키검색 값을 선택하거나 직접 입력하세요.

      • 로그 검출 조건은 모든 파서가 수행되기 전에 적용됩니다. 즉 파서의 결과로 추가되는 태그를 사용할 수 없습니다.

  8. 추가 버튼을 선택해 파서를 등록하세요.

노트
  • 로그 파서 목록에서 해당 파서의 적용 순서를 변경하거나 활성화수정, 삭제할 수 있습니다.

  • 파서 시뮬레이션 후 패턴을 등록할 수 있습니다.

노트

GROK 파서 주의사항

  • GROK 파서는 %{SYNTAX:SEMANTIC}, %{SYNTAX:SEMANTIC} 두 가지 패턴을 지원합니다.

  • %{SYNTAX:SEMANTIC} 패턴 사용 시 SEMANTIC을 반드시 입력해야합니다.

  • %{SYNTAX:SEMANTIC} 패턴 사용 시 SEMANTIC은 하나의 파서 안에서 unique 해야합니다.

  • (?<SEMANTIC>REGX) 패턴 사용 시 SEMANTIC은 문자(a-z, A-Z)와 숫자(0-9) 그리고 지정된 특수문자(., _, -)만 올 수 있습니다.

  • SEMANTIC은 문자(a-z, A-Z)로 시작해야 합니다.

  • SEMANTIC은 문자(a-z, A-Z) 또는 숫자(0-9)로 끝나야 합니다.

GROK 추가 패턴 선택하기

GROK 파서 시뮬레이션 시 기본 패턴(WORD, NUMBER, IP 등) 외에 특정 로그 형식에 맞는 추가 패턴을 선택할 수 있습니다. Java, Nginx, MySQL 등 32개 패턴 타입이 11개 카테고리로 그룹핑되어 제공됩니다.

추가 패턴 카테고리 드롭다운

  1. 파서 시뮬레이션 창에서 추가 패턴 (선택) 영역의 드롭다운을 클릭하세요.

  2. 카테고리별로 그룹핑된 패턴 타입 목록에서 필요한 패턴 타입을 선택하세요. 검색 입력란에 패턴 타입 이름 또는 설명을 입력해 검색할 수도 있습니다.

  3. 선택한 패턴 타입은 시뮬레이션 시 기본 패턴과 함께 로드됩니다.

노트

기본 패턴(Core)은 항상 자동으로 포함됩니다. 추가 패턴 선택은 선택 사항입니다.

카테고리별 패턴 타입 목록

카테고리패턴 타입
Web Servershaproxy, httpd, iis, nginx, squid
Application Servers & Frameworksjava, log4j, rails, ruby, springboot
Databasesmongodb, mysql, oracle, postgresql, redis
Cloudaws
System & Infrastructuredocker, kubernetes, linux-syslog
Messaging & Searchelasticsearch, kafka
Network & Securitybind, bro, firewalls, junos, zeek
Mailexim, postfix
Monitoring & Backupbacula, mcollective, nagios
Build Toolsmaven

활용 예시

Tomcat Catalina 8 로그를 파싱하려면 java 패턴 타입을 추가로 선택한 뒤 %{CATALINA8_LOG} 패턴을 사용하세요.

Sample log
31-Jul-2020 16:40:38 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name: Apache Tomcat/8.5.57
GROK parsing pattern
%{CATALINA8_LOG}
Tag extraction
- log_timestamp : 31-Jul-2020 16:40:38
- log.level : INFO
- java.log.origin.thread.name : main
- java.log.origin.class.name : org.apache.catalina.startup.VersionLoggerListener
- log.origin.function : log
- log_message : Server version name: Apache Tomcat/8.5.57

패턴 상세 보기

선택한 추가 패턴 타입에 어떤 패턴이 포함되어 있는지 상세 창에서 확인할 수 있습니다. 패턴 정의(정규 표현식)와 샘플 로그를 조회하고 시뮬레이션에 바로 적용할 수 있습니다.

패턴 상세 보기

추가 패턴 타입을 선택한 뒤 선택된 패턴 타입 태그를 클릭하면 오른쪽에 상세 창이 열립니다. 상세 창은 시뮬레이션 폼을 가리지 않고 나란히 표시되므로, 패턴 정의를 확인하면서 시뮬레이션을 진행할 수 있습니다.

각 패턴 항목에서 다음 기능을 사용할 수 있습니다.

버튼기능설명
샘플샘플 로그 입력해당 패턴에 매칭되는 예시 로그를 시뮬레이션 파싱 로그 입력란에 자동으로 입력합니다.
선택패턴 삽입%{패턴이름} 형식으로 패턴 입력란에 삽입합니다. 해당 패턴 타입도 자동으로 선택됩니다.
복사클립보드 복사%{패턴이름} 형식을 클립보드에 복사합니다.
노트
  • 패턴 항목을 클릭하면 패턴 정의(정규 표현식)가 펼쳐집니다. 여러 패턴을 동시에 펼쳐 정의를 비교할 수 있습니다.

  • 패턴 정의에 포함된 %{PATTERN:field} 참조는 패턴 이름, 필드명, 리터럴 문자가 서로 다른 색상으로 구분되어 표시됩니다.

  • 샘플 버튼으로 입력된 로그로 바로 시뮬레이션을 실행해 파싱 결과를 확인할 수 있습니다.

시뮬레이션 샘플 로그 저장

시뮬레이션에 사용한 로그는 파서 설정과 함께 자동으로 저장됩니다. 파서를 수정할 때 이전에 사용한 샘플 로그가 시뮬레이션 창에 자동으로 복원되어 매번 로그를 다시 입력할 필요가 없습니다.

JSON 파서

로그가 JSON 포맷으로 수집될 경우 JSON 파서를 사용해 쉽고 편리하게 파싱할 수 있습니다.

JSON 적용하기

로그 설정 > 로그 1차 파서 설정

  1. JSON 패턴 파서를 적용하려면 로그 설정 메뉴의 로그 1차 파서 설정 탭으로 이동하세요.

  2. + 추가하기를 선택 후 파서 입력란에서 JSON 파서를 선택하세요.

  3. 패턴 등록 버튼 선택 시 오른쪽에 패턴 등록 및 시뮬레이션 창이 나타납니다.

  4. 패턴로그 입력 후 시뮬레이션 버튼을 클릭하여 적용하려는 패턴으로 파싱에 성공하는지 확인하세요.

    Example
    2023-08-08 02:43:28,615 -- {"host":"10.21.3.24","method":"POST","status":"200","url":"http://dev.whatap.io/yard/api/flush"} --

    예시 로그에서 PrefixPostfix--로 지정하고 Ignoreurl을 지정 시 host, method, status 3개의 태그만 생성됩니다.

    • Prefix
      로그에서 JSON 포맷이 시작하는 위치를 지정합니다. 로그 전체가 JSON 포맷인 경우 빈 값으로 설정합니다.

    • Postfix
      로그에서 JSON 포맷이 끝나는 위치를 지정합니다. 로그 전체가 JSON 포맷인 경우 빈 값으로 설정합니다.

    • Ignore
      JSON 포맷 중 태그를 생성하지 않을 키를 지정합니다.

  5. 시뮬레이션 성공 시 시뮬레이션 결과퍼포먼스 측정 결과를 조회할 수 있습니다.

    파서 시뮬레이션 및 퍼포먼스 측정

  6. 시뮬레이션 후 패턴 적용 버튼 클릭 시 선택한 파서에 입력한 패턴이 적용됩니다.

  7. 패턴 적용 후 카테고리로그 검출 조건, 패턴을 입력하세요.

    Json 파서 입력

    • 카테고리

      로그 카테고리를 선택하세요. 카테고리는 필수로 입력해야 합니다.

    • 로그 검출 조건
      • 조건에 만족하는 로그만 파서가 적용됩니다.

      • 검색 키검색 값을 선택하거나 직접 입력하세요.

      • 로그 검출 조건은 모든 파서가 수행되기 전에 적용됩니다. 즉 파서의 결과로 추가되는 태그를 사용할 수 없습니다.

  8. 추가 버튼을 선택해 파서를 등록하세요.

노트
  • 로그 파서 목록에서 해당 파서의 적용 순서를 변경하거나 활성화수정, 삭제할 수 있습니다.

  • 파서를 등록하기 전에 시뮬레이션을 통해 등록하려는 패턴이 정상적인지 확인할 수 있습니다. GROK 파서 등록 시뮬레이션 과정과 동일합니다. 다음 문서를 참조하세요.

JSON 포맷 활용 예시

Sample log
{"host":"10.21.3.24","method":"POST","status":"200","url":"http://dev.whatap.io/yard/api/flush"}

위와 같은 샘플 로그가 수집된 경우 파서 추가 창에서 JSON 파서를 선택하세요. 복잡한 파싱 로직을 작성할 필요없이 로그 분석에 필요한 태그를 다음과 같이 추출할 수 있습니다.

Tag extraction
- host : 10.21.3.24
- method : POST
- status : 200
- url : http://dev.whatap.io/yard/api/flush

JSON 포맷 일부 구성 시 활용 예시

Some JSON format sample log
2023-08-08 02:43:28,615 -- {"host":"10.21.3.24","method":"POST","status":"200","url":"http://dev.whatap.io/yard/api/flush"} --

만약 예시와 같이 로그의 일부만 JSON 포맷으로 구성되어있다면 PrefixPostfix를 지정해 주세요. 와탭 로그 모니터링은 PrefixPostfix 사이의 영역을 JSON 포맷으로 인식 후 파싱합니다.

Tag extraction
- host : 10.21.3.24
- method : POST
- status : 200
- url : http://dev.whatap.io/yard/api/flush