스프링 부트 Admin 사용하기

  • 스프링 부트 Admin은 관리용 프론트엔드 웹 애플리케이션이며, 액추에이터 엔드포인트를 사람들이 더 많이 소비할 수 있게 한다.
  • 액추에이터 엔드포인트는 두 개의 주요 구성 요소로 나뉜다.
    • 스프링 부트 Admin
    • 클라이언트

Admin 서버 생성하기

  • 일반적으로 Admin 서버는 독립 실행형 애플리케이션으로 사용된다.
  • 의존성 추가
  • 구성 클래스에 @EnableAdminServer 애노테이션 추가
  • 아래 사진에서는 현재 0개 애플리케이션의 0개의 인스턴스가 등록되어 있는 것이다.

Admin 클라이언트 등록하기

  • 두 가지 방법
    • 각 애플리케이션이 자신을 Admin 서버에 등록
    • Admin 서버가 유레카 서비스 레지스트리를 통해서 서비스를 찾기
  • 각 애플리케이션이 자신을 Admin 서버에 등록
    • 의존성 추가
    • spring.boot.admin.client.url 속성에 클라이언트가 자신을 등록할 수 있는 Admin 서버의 위치를 구성한다.
      • spring.application.name 속성으로 마이크로서비스의 이름을 알려준다.
  • Admin 서버가 유레카 서비스 레지스트리를 통해서 서비스를 찾기
    • Admin 서버에 의존성만 추가하면 기본적으로 동작한다.
    • 기본적으로 admin 서버가 유레카 클라이언트이지만, 유레카 서비스로도 등록하기 위해서는 eureka.client.register-with-eureka 속성을 false로 설정하면 된다.
    • 다른 유레카 클라이언트처럼 유레카 서버가 기본 호스트와 포트에서 리스닝하지 않을 때는, eureka.client.service-url.defaultZone 속성에 구성할 수 있다.

Admin 서버 살펴보기

  • 모든 스프링 부트 애플리케이션이 Admin 서버 클라이언트로 등록하면 각 애플리케이션 내부에서 생기는 풍부한 정봅를 Admin 서버가 볼 수 있다.
    • 애플리케이션의 건강 상태 정보와 일반 정보
    • Micrometer를 통해 발행되는 메트릭과 /metrics 엔드포인트
    • 환경 속성
    • 패키지와 클래스의 로깅 레벨
    • 스레드 추적 기록 정보
    • HTTP 요청의 추적 기록
    • 감사 로그

애플리케이션의 건강 상태 정보와 일반 정보 보기

  • /health, /info 엔드포인트를 통해 액추에이터가 제공하는 건강 상태 정보와 일반 정보가 있다.
  • JVM으로부터 받은 애플리케이션 정보의 통계를 볼 수있으며, 여기에는 메모리와 스레드를 보여주는 그래프들과 프로세스 정보가 포함된다.

핵심 메트릭 살펴보기

  • /metrics 엔드포인트로부터 제공되는 정보는 애플리케이션에서 생성되는 메트릭이다.
  • 처음에는 Metrics 탭에서 어떤 메트릭 정보도 보여주지 않는다.
    • 하나 이상의 관찰점(watch)을 설정하면 이것에 관련된 정보를 보여준다.
    • 아래 사진에서는 http.server.requests 부류의 메트릭들에 대해 두 개의 관찰점을 설정하였다.
      • /ingredients 엔드포인트에 대해 GET 요청이 될 때마다 관련 메트릭을 알려주며, 여기서 반환된 상태 코드는 200이다.
      • HTTP 400 응답을 발생시키는 요청이 있을 때마다 관련 메트릭을 알려주게끔 설정하였다.
  • 이 메트릭들은 실시간 데이터를 보여준다는 것이 장점이다.

환경 속성 살펴보기

  • /env 엔드포인트는 스프링 부트 애플리케이션의 모든 속성 근원(JVM 시스템, 명령행 인자, 환경 변수 등)으로부터 해당 애플리케이션에 사용할 수 있는 모든 환경 속성을 반환한다.
  • 수백 개의 속성이 나타날 수 있으므로, 보려는 속성 내역을 이름이나 값으로 필터링할 수 있다.

로깅 레벨을 보거나 설정하기

  • /loggers 엔드포인트는 실행 중인 애플리케이션의 로깅 레벨을 파악하거나 변경하는 데 도움이 된다.

스레드 모니터링

  • /threaddump 엔드포인트는 애플리케이션에서 실행 중인 스레드의 상태 스냅샷을 제공한다.
  • 적시에 스냅샷을 캡처하는 /threaddump 엔드포인트와 다르게, 각 스레드의 상태를 보여주는 Threads 탭의 막대 그래프는 지속적으로 변경된다.
    • 스레드가 실행 중이면 초록색으로, 대기 중이면 노란색이 되며, 중단되면 빨간색이 된다.

HTTP 요청 추적하기

  • /httptrace 엔드포인트로부터 받은 데이터를 보여준다.
  • 요청 시점에 100개의 최근 HTTP 추적 기록을 반환하고, 탭에 머무는 동안 추적이 계속된다.
    • 초록색: 성공적인 요청
    • 노란색: 클라이언트 에러
    • 빨간색: 서버 에러
  • 아래쪽에는 추적 이력 데이터가 나타나며, 애플리케이션에서 받은 각 요청을 한 행으로 보여준다.
    • 원하는 행을 클릭하면 해당 행이 확장되면서 요청 헤더와 응답 헤더를 포함하는 해당 요청에 관한 추가 정보를 보여준다.

Admin 서버의 보안

  • 액추에이터에 보안이 중요하듯이, Admin 서버에도 보안이 중요하다.
  • Admin 서버가 해당 엔드포인트에 접근하기 위해 인증 정보를 알아야 한다.

Admin 서버에 로그인 활성화하기

  • 의존성 추가
  • 관리자 이름과 비밀번호를 구성

액추에이터로 인증하기

  • 액추에이터 엔드포인트가 인증 정보를 제공하지 않으면 Admin 서버도 액추에이터 엔드포인트를 소비할 수 없게 된다.
  • Admin 서버의 클라이언트 애플리케이션이 자신의 인증 정보를 Admin 서버에 제공하는 방법 2가지
    • 클라이언트 애플리케이션이 직접 Admin 서버에 등록할 때 직접 제공
    • 유레카를 통해 발견되게 함으로써 자신의 인증 정보를 함께 제공
  • 클라이언트 애플리케이션이 직접 Admin 서버에 등록할 때 직접 제공
    • spring.boot.admin.client.instance.metadata.user.namespring.boot.admin.client.instance.metadata.user.password 속성을 각 클라이언트에 지정하면 Admin 서버에 등록할 때 함께 제공된다.
  • 유레카를 통해 발견되게 함으로써 자신의 인증 정보를 함께 제공
    • eureka.instance.metadata-map.user.nameeureka.instance.metadata-map.user.password 속성을 지정하면 된다.