코딩마을방범대

[ELK] Log를 불러올 때 타임스탬프를 커스텀 필드로 정의하기 본문

💡 백엔드/ELK

[ELK] Log를 불러올 때 타임스탬프를 커스텀 필드로 정의하기

신짱구 5세 2024. 11. 13. 14:27
728x90

 

 

 

 

도커를 통해 ELK 구축한 후 Spring boot 로그와 연결하기

ELK란 아래 포스트를 통해 개념을 확인할 수 있다. ELK 스택(Elasticsearch, Kibana, Beats, Logstash) 개념 정리ELK 스택Elasticsearch, Logstash, Kibana의 세 가지 인기 있는 프로젝트로 구성된 스택을 의미

sweet-rain-kim.tistory.com

 

위 포스트를 통해 ELK 구축 시 기본 타임스탬프로 설정되기 때문에, 로그를 읽어들인 시간으로 기록된다.

이 때문에 따로 필드를 만들어줘야 하는 번거로움이 있다.

아예 로그를 읽어들일 때 커스텀 timestamp를 기록하는 방법이 있는데, 이 방법은 로그의 한 줄 한 줄에 timstamp가 기록되어 있어야 가능하다.

이 포스트에서는 주로 timestamp 만을 가지고 이야기 하고 있지만, 굳이 Date 타입이 아닌 다른 필드를 생성하고 싶은 경우에도 참고하면 좋을 것 같다.

 

 

 


 

 

 

 

 

 

먼저 logstash.conf 파일을 열어주면, 로그를 읽어들일 파이프라인이 설정되어 있을 것이다.

만약 로그가 아래와 같이 저장된다고 가정한다면, 앞 부분의 로그가 찍힌 시간만 가져오고 싶다.

[24-10-02 11:09:27.438][INFO ] log message

 

 

여기서 필터 부분만 이렇게 수정해주면 된다.

아래와 같이 설정해주면 기본 필드인 timestamp 필드가 기본 로그 시간으로 기록되며, level 이라는 로그레벨도 같이 저장된다.

filter {
  # Grok 필터를 사용하여 로그의 각 필드를 추출
  grok {
    match => {
      "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\]\[%{LOGLEVEL:level}\]*"
    }
  }

  # Date 필터를 사용하여 timestamp 필드를 @timestamp로 변환
  date {
    match => [ "timestamp", "yy-MM-dd HH:mm:ss.SSS" ]
    target => "@timestamp"
  }
}

 

 

 

728x90