SPRING/Spring Boot

[SpringBoot] 엑츄에이터(Actuator)(3) - 로그 및 HTTP 기록 확인하기

IT록흐 2023. 5. 11. 16:43
반응형
 

[SpringBoot] 모니터링 - 엑츄에이터(Actuator)(1)

개발이 완료되면 App을 모니터링해야 한다. ( Production-Ready ) App상태정보, 트래픽, DB상태정보 등등 다양한 모니터링 데이터를 파악해야 하는데 개발자가 하나 하나 파악하기에 어려움이 있다. Sprin

lordofkangs.tistory.com

 

 

이전 포스팅에서 Actuator에 대해서 알아보았다.

이번 포스팅에서는 Actuator를 활용하여 실시간으로 로그레벨을 수정해보고 HTTP 요청/응답 기록을 확인해보겠다.

 

 

실시간 로그레벨 수정하기

 

logger 엔드포인트는 Spring에 등록된 클래스의 로그레벨을 노출한다.

 

로그레벨은 중요하다.

 

프로그램을 운영하다가 에러가 발생하면 로그를 보는데 로그수준에 맞는 로그만 확인 가능하다. 조금 더 많은 정보를 얻으려면 로그레벨을 변경해야 한다. 로그레벨은 설정파일에 있기에 수정하려면 서버 재기동을 해야한다. 에러 조치를 위해 잠시 변경했다가 원복하는 경우가 다수이기에 부담이 된다.

 

Actuator를 이용하면 설정파일을 수정하지 않고도 임시로 로그레벨을 변경할 수 있다.

 

LogController.java

@Slf4j
@RestController
public class LogController {

    @GetMapping("/log")
    public String log(){
        log.trace("Trace Log");
        log.debug("Debug Log");
        log.info("Info Log");
        log.warn("Warn Log");
        log.error("Error Log");
        return "Log OK!";
    }
}

 

롬복에서 제공하는 @Slf4j 어노테이션으로 각 레벨별 로그를 찍는 Controller를 하나 만든다.

 

application.yml

logging:
  level:
    com.example.demo.controller: debug

 

LogController가 속한 패키지의 로그레벨을 Debug로 설정한다. SpringBoot 프로젝트를 실행하여 loggers 엔드포인트 로그레벨을 확인해보자.

 

로그레벨이 DEBUG임을 확인할 수 있다.

 

 

http://localhost:8080/log를 Request하여 찍힌 로그도 위와 같다.  ERROR부터 Debug까지 로그가 찍혔다. 그럼 이를 설정파일 변경없이 실시간으로 바꾸어 보자. 

 

 

서버에 Request를 보낼 때 POST 방식으로 보내야 한다.

이를 위해 포스트맨을 사용하였다.

 

 

Postman API Platform | Sign Up for Free

Postman is an API platform for building and using APIs. Postman simplifies each step of the API lifecycle and streamlines collaboration so you can create better APIs—faster.

www.postman.com

 

 

요청시 URL 포맷은 아래와 같다.

 

http://localhost:8080/actuator/loggers/com.example.demo.controller 

[ loggers 엔드포인트 url 경로 ] + [ 변경할 패키지 및 클래스 경로 ]

 

Body에 데이터를 넣어야 한다. JSON 방식으로 configuredLevel 설정에 변경할 로그레벨 수준을 입력한다. Request를 Send하면 204 Response를 받는다. 정상처리되었음을 의미한다. 

 

그럼 다시 loggers 엔드포인트를 확인해보자.

 

로그레벨이 Trace로 바뀌었다. LogController를 호출해보자.

 

 

로그도 Trace 수준까지 찍히고 있음이 확인되었다. 

이와 같이, 액츄에이터를 활용하면 로그레벨수준을 재기동없이 변경가능하여 보다 편리한 트러블슈팅이 가능해진다.

 

 

 

HTTP 요청/응답 기록 확인하기

 

엑츄에이터는 요청/응답 기록을 HTTP 방식을 사용하여 JSON 형태로 노출한다. 엑츄에이터는 기록을 httpexchanges 엔드포인트로 노출하는데, HttpExchangeRepository 인터페이스의 구현체를 빈으로 등록되지 않으면 httpexchanges 엔드포인트가 활성화되지 않는다.

 

그럼 httpexchanges 엔드포인트를 활성화시켜보자.

 

 

1. HttpExchangeRepository 구현체 Bean등록하기

@SpringBootApplication
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
    
	//HttpExchangeRepository 구현체 Bean 등록
	@Bean
	public InMemoryHttpExchangeRepository httpExchangeRepository(){
		return new InMemoryHttpExchangeRepository();
	}

}

 

 

SprinbBoot 프로젝트 Main 클래스에 @Bean 어노테이션으로 HttpExchangeRepository 구현체를 Bean으로 등록한다. 

 

2. 프로젝트 실행하기 

 

 

http://localhost:8080/actuator/httpexchanges 로 접근하면 request와 response 기록이 노출된다. 

 

 

엑츄에이터를 활용하면 실시간으로 로그레벨 수정 및 HTTP 요청/응답 확인이 가능해진다. 프로그램을 운영하면서 꼭 필요한 데이터들이다. 다양한 데이터를 한 가지 라이브러리가 제공하면 누구나 쉽게 에러에 대응할 수 있게 된다. 이는 SpringBoot가 제공하는 가장 큰 강점 중 하나이다.

 

 


 

참고자료

 

스프링 부트 - 핵심 원리와 활용 - 인프런 | 강의

실무에 필요한 스프링 부트는 이 강의 하나로 모두 정리해드립니다., - 강의 소개 | 인프런

www.inflearn.com

 

반응형