[ELK] tomcat 로그 모니터링 툴 작업기 -2

HI·2024년 5월 9일
0

ELK 작업

목록 보기
1/4
post-thumbnail

이번엔 작업중 해결했던 문제점을 정리하려고 한다.

1. 다양한 grok 패턴 적용하기

기본 grok 패턴 적용

일단 기본적으로 제공하는 다양한 패턴이 있다.
[기본_제공되는 grok패턴 확인 링크]
링크를 확인하여 grok 패턴으로 사용할 수 있다.

 grok {
            match => {
              "message" => [
                 "%{GREEDYDATA:ALL}"
              ]
            }
       }

ALL이라는 필드로 모든데이터가 쌓인 필드 생성된다.

사용자 정의 grok 패턴 적용

  • $vi pattern_zip 파일 생성(파일명 상관없음)
    MY_DATE_PATTERN %{MONTHDAY}-%{MONTH}-%{YEAR} %{HOUR}:?%{MINUTE}(?::?%{SECOND})
    DATE_PATTERN_2 %{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:?%{MINUTE}(?::?%{SECOND})
    MY_LOGLEVEL \b(?:정보?|심각?|경고)\b
    ACCES_DATE %{MONTHDAY}/%{MONTH}/%{YEAR}:%{HOUR}:?%{MINUTE}(?::?%{SECOND})

사용할 패턴들 명시한다.

  • grok 패턴으로 사용하기
grok {
            patterns_dir => ["/dir/pattern_zip"]
            match => {
              "message" => [
                 "\(%{GREEDYDATA:java_line}\) %{DATE_PATTERN_2:log_date} : %{GREEDYDATA:function_1} : %{GREEDYDATA:function_2_unit}",
                 "\(%{GREEDYDATA:java_line}\) %{DATE_PATTERN_2:log_date} : %{GREEDYDATA:function_1}"
              ]
            }
       }

참고자료) grok패턴 적용 정리 블로그
참고자료) 사용자 grok 패턴 적용 정리 블로그
참고자료) grok 패턴 적용

2. @timestamp가 아닌 시간필드 만들기

@timestamp는 색인에 데이터가 쌓이는 시간으로 만들어지기 때문에 로그가 생성된 시간으로 시각화 그래프를 보기 힘들다.

2024-04-23 23:29:41.336
[23/Apr/2024:00:00:01 +0900]

이렇게 로그에 찍히는 다양한 시간패턴으로 @timestamp 를 대체할 필드를 만들자

filter {
    grok {
          patterns_dir => ["/dir/pattern_zip"]
          match => { "message" => "%{MY_DATE_PATTERN:log_date} %{MY_LOGLEVEL:log_level}" }
        }
    date {
          match => [ "log_date", "YYYY-MM-dd HH:mm:ss.SSS", "YYYY-MM-dd HH:mm:ss,SSS","dd/MMM/yyyy:HH:mm:ss" ]
          target => "log_time"
    }   
}
  • log_date라는 필드로 캡쳐한 날짜가 들어가게 한다.
    "log_date":"2024-04-23 23:29:41.336"
    "log_date":"23/Apr/2024:00:00:01"
  • date filter로 log_time이라는 필드가 생성되게 한다.

    date filter도 패턴을 체크하는것이기 때문에 날짜 형식이 패턴이랑 맞아야함
    2024-02-13 11:22:13.123 => YYYY-MM-dd HH:mm:ss.SSS
    2024-02-13 11:22:13,123 => YYYY-MM-dd HH:mm:ss,SSS
    23/Apr/2024:00:00:01 => dd/MMM/yyyy:HH:mm:ss

나는 ","를 "."로 봐서 패턴이 매칭이 안되서 왜 안되지ㅠㅠ 시간을 많이 보냈다..

es date filte 공식문서_More details on the syntax부분 확인하여 시간 패턴 체크
참고자료) date filter 사용하기 -1
참고자료) date filter 사용하기 -2

3. 변하는 공백 패턴 처리 방법

2024-04-11 INFO(공백1)tomcat...
2024-04-11 INFO(공백2)tomcat...
로그레벨 뒤 공백이 하나만 오는 패턴이라고 생각했는데 어떤경우는 공백이 두번 들어가는게 있어서 패턴에서 캡쳐가 되지 않는 문제 확인!

\(%{GREEDYDATA:java_line}\) %{DATE_PATTERN_2:log_date} : %{GREEDYDATA:function_1}\s*(?: : %{GREEDYDATA:function_2_unit})?

위의 패턴처럼 \s* 을 사용하면 n개의 공백으로 체크함

4. 한 로그줄에서 두번 grok 패턴 사용하기

       grok{
         match => {
              "message" => [
                 "\(%{GREEDYDATA:java_line}\) %{DATE_PATTERN_2:log_date} : " ]
            }
            break_on_match => true
       }
       grok {
            match => {
              "message" => [
                 "%{DATE_PATTERN_2:log_date}\s+"
              ]
            }
            break_on_match => true
       }

grok filter 두번 넣어주기.

여러가지 grok 패턴 정의 매칭되는거 찾아가기

  grok {
            match => {
              "message" => [
                 "%{DATA:DATA1}",
                 "%{WORD:DATA2}"
              ]
            }
            break_on_match => true
       }

%{DATA}에 매칭되면 DATA1 필드로 생성이 되고 매칭되지 않으면 다음패턴인 %{WORD}에 매칭되는지 확인 후 DATA2 필드로 생성이 된다.
다음처럼 match에 여러 grok패턴이 있으면 순차적으로 맞는 패턴을 확인한다.

그래서 다양한 grok패턴에 매칭이 된다면 먼저 매칭할 grok패턴을 앞쪽에 넣어줘야 원하는 필드로 생성되는걸 확인할 수 있음.

logstash를 수정해가며 확인하지 말고 Grok Debugger에서 grok패턴 확인 가능.
Custom Patterns도 넣어서 확인해볼 수 있다.

5. Filbeat로 오늘날짜 로그파일 가져오기

filebeat는 tomcat* 이렇게 tomcat으로 시작하는 파일은 찾을 수 있으나, tomcat_%{today} 이런식으로 오늘날짜 파일을 가져오는 패턴체크하는 방법은 없다.

- type: log
  enabled: true
  paths:
    - /dir/tomcat*
  ignore_older: 24h
  fields:
    log_type: "tomcat_log"
    project: "my_project"

대신 ignore_older 라를 옵션을 사용하여 tomcat로 시작하고 생성된지 24시간전인 파일들만 가져오게 한다.
현재시간 : 05월09일 11시47분이라면
05월 08일 11시47분부터 쓰여진 tomcat
로 시작하느 로그 파일을 가져옴.

profile
https://github.com/gaeunban

0개의 댓글