ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Monitoring] APM, Spring Boot Actuator, micrometer
    Backend/공부,개념 2023. 5. 24. 03:18
    반응형

    서버 모니터링에 사용되는 기술/개념들을 하나씩 찍먹 해보아야겠다. 다른 블로그나 공식 문서에 아주 잘 나와있어서 나는 대략 개념만 이해할 정도로 적으려고 한다 @_ @

     

    APM(Application Performance Management/Monitoring)

    애플리케이션 성능 관리 / 모니터링

     

    • 어느 구간에서, 어느 사용자가, 어떤 애플리케이션 사용 중 어느 과정에서 문제가 생긴 것인지를 신속하게 탐지하는 것이 중요함

     

    APM 구성

    • APM은 Agent / Repository Server / Application Server로 구성됨
      • Agent : 웹 서버에 설치되어 데이터를 수집한 뒤
      • Repository Server : Agent에서 데이터를 전송하거나 Agent서버로 pull하여 데이터를 받아감
      • Application Server : Repository Server에 보관된 데이터를 불러와 애플리케이션 성능을 분석하여 결과물을 사용자에게 제공

     

    APM 종류

    • DB 성능 관리
      • SQL의 튜닝 및 DBMS 소프트웨어 병목 현상 모니터링
    • 애플리케이션 성능 관리 -> 보통 웹 서버의 APM은 이것을 말함
    • E2E(End to End, 최종 사용자) 성능 관리

     

    출처


    Actuator

    Spring Boot Acutator는 애플리케이션의 모니터링 및 관리에 도움이 되는 기능을 제공하며, spring-boot-starter-actuator 패키지를 추가하여 사용할 수 있다.

    Spring의 자원 상태를 Http Endpoint 혹은 JMX 형태로 제공한다.

     

    가장 기본적인 health check 정보부터 제공되는 API(mappings), 환경변수(env), metrics 등을 제공해 준다.

     

    intellij에서 애플리케이션을 실행시켰을 때 Run 창에서 console옆에 Acutator를 볼 수 있다.

     

    Endpoints

    Acutator의 대부분의 Endpoint는 비활성화된 상태로 제공된다. (부트 2.x버전부터)

    기본적으로 사용 가능한 엔드포인트는 /health/info이며, WEB API를 통해 제공받고 싶다면 나머지는 다음 설정으로 활성화할 수 있다.

    management.endpoints.web.exposure.include=

     

    application.yml 설정

    • application.yml파일의 managment 하위에 작성하면 여러 기능들을 설정할 수 있다.
    • 기본적으로 엔드포인트는 /actuator 경로 아래에 제공되며 서버의 port와 address를 사용한다.
      • 이를 변경하기 위해서는 management.endpoints.webbase-path, port, address등을 변경하면 된다.
      • 실제 서버와 다른 포트를 사용하는 것이 보안상 안전할 것 같다.

     

    그리고 엔드포인트로 서버의 API나 각종 지표를 쉽게 얻을 수 있기 때문에, 보안상 취약할 수 있다. 설정을 통해서 최대한 비활성화해둔 뒤 필요한 정보들만 활성화해서 내보내는 것이 좋을 것 같다.

     

    아래 참고할만한 링크 중 Actuator 안전하게 사용하기에 나온 Spring Security 설정 / properties 설정 코드이다.

    // WebSecurityConfig 샘플
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests() // 접근에 대한 인증 설정
              .antMatchers("/login", "/signup", "/user").permitAll() // 누구나 접근 허용
              .antMatchers("/actuator/**").hasRole("ADMIN") // ADMIN만 접근 가능
              .anyRequest().authenticated() // 나머지 요청들은 권한의 종류에 상관 없이 권한이 있어야 접근 가능
            .and()
          ...
        ;
      }
    # Actuator 보안 설정 샘플
    ​
    # 1. Endpoint all disable
    management.endpoints.enabled-by-default = false
    ​
    # 2. Enable specific endpoints
    management.endpoint.info.enabled = true
    management.endpoint.health.enabled = true
    ​
    # 3. Exclude all endpoint for JMX and Expose specific endpoints
    management.endpoints.jmx.exposure.exclude = *
    management.endpoints.web.exposure.include = info, health
    ​
    # 4. Use other port for Actuator
    management.server.port = [포트번호]
    ​
    # 5. Change Actuator Default path
    management.endpoints.web.base-path = [/변경된 경로]


    이외 사용하는 방법이나 디테일한 것들은 공식 문서를 참고하면 될 것 같다.

     

    참고할만한 링크


    Micrometer

    이렇게 Spring Acutator에서 제공해주는 지표들을 모니터링 서비스에 적용시켜야 한다. micrometer는 JVM 기반의 다양한 모니터링 시스템과 호환되는 추상화된 표준 인터페이스를 제공하는 라이브러리이다.

    Spring Boot Actuator는 Micrometer를 의존성으로 가지고 있고, micrometer의 MeterRegistry 빈을 자동으로 주입한다.

     

    모듈

    • micrometer-core : 최소한의 종속성을 가짐
    • micrometer-registry-xx
      • ex) micrometer-registry-prometheus
      • 특정 서비스는 registry의존성을 추가해서 사용

     

    각각 데이터 수집방식(인터페이스)이 다른데 micrometer가 파사드처럼 추상화해서 표준 프로토콜같은걸 제공해주는 듯 micrometer-core는 기본이고 micromter-registry-{특정서비스} 이렇게 의존성 추가해서 쓰는 듯 하다

     

    공식 문서

    'Backend > 공부,개념' 카테고리의 다른 글

    [Kotlin] Kotest, mockk  (0) 2023.09.03
    [Kotlin] DSL (Domain Specific Language) 이란  (0) 2023.07.18
    Local Cache, Rate Limiter  (0) 2023.04.15
    헥사고날 아키텍처 공부중..  (0) 2023.03.06
    [Spring] Spring Data  (0) 2023.02.27

    댓글

Designed by Tistory.