모니터링-액츄에이터

Shaun·2023년 4월 2일
1

모니터링

목록 보기
1/2
post-thumbnail

코드를 쳐서 기능 개발만이 아닌 실제로 서비스를 운영하다 보면 서비스가 잘 돌아가는지, 문제는 없는지 모니터링도 상당히 중요하다.

운영 환경에서 서비스를 할 떄 필요한 기능들을 프로덕션 준비 기능 이라고 한다.

1.지표(metric)
2.추적(trace)
3.감사(auditing)
4.모니터링

액츄에이터

스프링 부트에서는 액추에이터 라는 것을 제공한다. 이것을 활용해 더나아가 마이크로미터, 프로메테우스, 그라파나 등을 사용해 모니터링을 효율적으로 할 수 있다.

액츄에이터를 사용하기 위해서는 액츄에이터 라이브러리를 추가해 줘야 한다.

implementation 'org.springframework.boot:spring-boot-starter-actuator'

  • 라이브러리를 추가해주고 8080/actuator 으로 테스트 해준다.

  • 8080/actuator/health 로 서버가 잘 동작하고 있는지 체크도 가능하다

  • yml 설정을 통해 액츄에이터가 제공하는 수 많은 기능들을 확인해 보자.

  • *설정은 모든 엔드포인트를 웹에 노출 시키는 것이다.

  • 액츄에이터가 제공하는 기능 하나하나를 엔드포인트 라고 한다.

  • 8080/actuator/{엔드포인트명} 으로 원하는 기능을 실행할 수 있다.

엔드포인트 필수 설정

엔드포인트를 사용하려면 다음 2가지 과정이 모두 필요하다.

  1. 엔드포인트 활성화(on/off)
  2. 엔드포인트 노출(활성화된 엔드포인트를 HTTP에 노출할지 아니면 JMX에 노출할지 선택)
  • 대부분 엔드 포인트는 활성화(on) 상태이며 노출이 되어 있지 않다. 보통은 HTTP를 사용하므로 HTTP에 어떤 엔드포인트를 노출할지 선택하면 된다. (원하는 기능 고르기)

  • 특정 엔드포인트(기능) 을 사용하려면 management.endpoint.{엔드포인트명}.enabled=true로 적용하면 됀다.

엔드포인트 노출

  • 모든 엔드포인트는 노출 하지만 env,beans 는 제외

헬스정보

  • 애플리케이션이 사용하는 DB가 응답하는지 , 디스크 용량 문제는 없는지 등등 다양한 정보를 제공 해준다.
  • 헬스 정보를 좀 더 자세히 보고싶으면 엔드포인트를 yml에 추가시켜 주면 됀다.

  • 간단한 헬스 정보는 show-components: always

  • 문제가 있으면 down 으로 나옴

애플리케이션 정보

  • info 엔드포인트로 애플리케이션 기본 정보를 알아보자

  • 그냥 실행하면 안되고 따로 yml 설정을 해줘야 한다.

  • 이 예시에서는 JAVA와 OS에 대한 정보를 얻을 수 있다.

빌드 정보 / git 정보

빌드 정보

  • 빌드 정보 노출시 META-INF/build-info.properties 파일을 만들어야 한다.

  • 하지만 gradle를 사용 한다면 gradle에 사진처럼 내용을 추가 해주면 된다.

git 정보

  • 프로젝트가 깃으로 관리되고 있으면 해당 기능을 사용할 수 있다.

  • 더 자세한 정보를 얻고 싶으면 yml에서 info/git/mode : full 을 추가 해주면 된다.

로거

  • hello.controller 패키지에 간단한 컨트룰러를 만들어 준뒤 테스트 해보자

  • 컨트룰러 호출과 액츄에이터 호출을 비교해보자

  • 부트는 로그 기본 Info 라 Root의 configuredLevel을 보면 Info인걸 확인할 수 있다

  • hello.controller 는 Debug로 설정해서 Debug가 나온것을 확인할 수 있다

  • 로거 이름으로 더 자세하게 볼수도 있다.

실시간 로그 레벨 변경

  • 운영중에 실시간으로 로그레벨을 변경하고 싶을때는 어떤 방법을 사용할까?

  • 간단하다. POST요청으로 바디에 원하는 레벨을 넣어주기만 하면 됀다.

HTTP 요청 응답 기록

  • httpexchanges 엔드포인트를 사용하자

  • HttpExchangeRepository 인터페이스의 구현체를 빈으로 등록해야 httpexchanges 엔드포인트를 사용할 수 있다.

  • 부트는 InMemoryHttpExchangeRepository구현체를 제공함

  • 이 구현체는 최대 100개의 Http 요청을 제공함

  • 지금까지 실행한 http 요청과 응답을 확인할 수 있다.

액츄에이터 보안

  • 지금까지 한것들로만 봐도 극히 일부지만 많은 정보를 노출 시킨다. 그래서 액츄에이터의 엔드포인트들은 외부 인터넷에서 접근이 불가능하게 막고 내부에서만 접근 가능 하도록 하는것이 좋다.

-외부 인터넷 망을 통해서 8080 포트에만 접근할 수 있고, 다른 포트는 내부망에서만 접근할 수 있다면 액츄에이터에 다른 포트를 설정하면 된다.

  • 어쩔수 없이 외부 인터넷망을 통해서 접근해야 한다면 서블릿 필터, 시큐리티 ,인터셉터등으로 추가 개발을 해야 한다.
profile
호주쉐프에서 개발자까지..

0개의 댓글