-
[Monitoring] APM, Spring Boot Actuator, micrometerBackend/공부,개념 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 등을 제공해 준다.
Endpoints
Acutator의 대부분의 Endpoint는 비활성화된 상태로 제공된다. (부트 2.x버전부터)
기본적으로 사용 가능한 엔드포인트는
/health
와/info
이며, WEB API를 통해 제공받고 싶다면 나머지는 다음 설정으로 활성화할 수 있다.management.endpoints.web.exposure.include=
application.yml 설정
- application.yml파일의
managment
하위에 작성하면 여러 기능들을 설정할 수 있다. - 기본적으로 엔드포인트는
/actuator
경로 아래에 제공되며 서버의 port와 address를 사용한다.- 이를 변경하기 위해서는
management.endpoints.web
의base-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의존성을 추가해서 사용
- ex)
각각 데이터 수집방식(인터페이스)이 다른데
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