코드를 쳐서 기능 개발만이 아닌 실제로 서비스를 운영하다 보면 서비스가 잘 돌아가는지, 문제는 없는지 모니터링도 상당히 중요하다.
운영 환경에서 서비스를 할 떄 필요한 기능들을 프로덕션 준비 기능 이라고 한다.
1.지표(metric)
2.추적(trace)
3.감사(auditing)
4.모니터링
스프링 부트에서는 액추에이터 라는 것을 제공한다. 이것을 활용해 더나아가 마이크로미터, 프로메테우스, 그라파나 등을 사용해 모니터링을 효율적으로 할 수 있다.
액츄에이터를 사용하기 위해서는 액츄에이터 라이브러리를 추가해 줘야 한다.
implementation 'org.springframework.boot:spring-boot-starter-actuator'
yml 설정을 통해 액츄에이터가 제공하는 수 많은 기능들을 확인해 보자.
*설정은 모든 엔드포인트를 웹에 노출 시키는 것이다.
액츄에이터가 제공하는 기능 하나하나를 엔드포인트 라고 한다.
8080/actuator/{엔드포인트명} 으로 원하는 기능을 실행할 수 있다.
엔드포인트를 사용하려면 다음 2가지 과정이 모두 필요하다.
- 엔드포인트 활성화(on/off)
- 엔드포인트 노출(활성화된 엔드포인트를 HTTP에 노출할지 아니면 JMX에 노출할지 선택)
간단한 헬스 정보는 show-components: always
문제가 있으면 down 으로 나옴
그냥 실행하면 안되고 따로 yml 설정을 해줘야 한다.
이 예시에서는 JAVA와 OS에 대한 정보를 얻을 수 있다.
빌드 정보 노출시 META-INF/build-info.properties 파일을 만들어야 한다.
하지만 gradle를 사용 한다면 gradle에 사진처럼 내용을 추가 해주면 된다.
프로젝트가 깃으로 관리되고 있으면 해당 기능을 사용할 수 있다.
더 자세한 정보를 얻고 싶으면 yml에서 info/git/mode : full 을 추가 해주면 된다.
컨트룰러 호출과 액츄에이터 호출을 비교해보자
부트는 로그 기본 Info 라 Root의 configuredLevel을 보면 Info인걸 확인할 수 있다
httpexchanges 엔드포인트를 사용하자
HttpExchangeRepository 인터페이스의 구현체를 빈으로 등록해야 httpexchanges 엔드포인트를 사용할 수 있다.
부트는 InMemoryHttpExchangeRepository구현체를 제공함
이 구현체는 최대 100개의 Http 요청을 제공함
-외부 인터넷 망을 통해서 8080 포트에만 접근할 수 있고, 다른 포트는 내부망에서만 접근할 수 있다면 액츄에이터에 다른 포트를 설정하면 된다.