모니터링 시스템

2024. 10. 2. 09:00모니터링

2024/10/02

 

애플리케이션을 개발하고 배포까지 마무리하면
개발자로서의 역할은 끝난걸까요?
당연히 아니겠죠? 애플리케이션의 안정적이고
효율적인 운영을 위해 모니터링은 필수적입니다.

 

또한, 웹 애플리케이션 개발은 항상 해커들의 타겟이 됩니다.
해커들은 다양한 기법을 사용하여 시스템의 취약점을 찾고,
이를 악용하려고 합니다.따라서 보안은 매우 중요한 요소입니다.

 

 

※  모니터링에 대해 알아보자.

 

   ▶ 모니터링이란?

모니터링시스템의 성능, 안정성 및 가용성을 실시간으로 관찰하고 측정하는 과정을 의미한다. 모니터링 도구를 사용하여 시스템의 상태를 추적하고, 문제를 감지하고, 성능을 최적화하며, 장애 발생 시 빠르게 대응할 수 있다.

 

 

       ●  모니터링의 중요성

            ○  문제 예방 : 모니터링을 통해 잠재적인 문제를 사전에 발견하고 해결할 수 있다.
            ○  빠른 대응 : 문제가 발생했을 때 신속하게 대응할 수 있어 시스템 다운타임을 최소화한다.
            ○  성능 최적화 : 애플리케이션의 성능 병목 지점을 찾아 개선할 수 있다.
            ○  사용자 경험 향상 : 안정적이고 빠른 서비스를 제공하여 사용자 만족도를 높인다.
            ○  비즈니스 연속성 : 시스템 가용성을 보장하여 비즈니스 운영의 연속성을 유지할 수 있다.

 

       ●  모니터링의 범위

            ○  서버 모니터링 : CPU, 메모리, 디스크 사용량, 네트워크 트래픽 등 서버 자원 사용을 모니터링한다.
            ○  애플리케이션 모니터링 : 애플리케이션의 상태, 성능, 로그 등을 모니터링한다.
            ○  네트워크 모니터링 : 네트워크 트래픽, 대역폭 사용량, 네트워크 지연 등을 모니터링한다.
            ○  데이터베이스 모니터링 : 쿼리 성능, 연결 수, 데이터베이스 사용량 등을 모니터링한다.
            ○  보안 모니터링 : 보안 이벤트, 침입 시도, 취약점 등을 모니터링한다.

 

   ▶ Spring Boot Actuator란?

📌  Spring Boot ActuatorSpring Boot 애플리케이션의 상태와 성능을 모니터링하고 관리할 수 있도록 다양한 엔드포인트를 제공하는 기능이다. Actuator는 헬스 체크, 메트릭스, 환경 정보, 로그 정보 등 여러 가지 중요한 정보를 쉽게 확인할 수 있도록 도와준다.

 

       ●  Actuator 의존성 추가

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

 

 

       ●  Actuator 엔드포인트

👉  Actuator는 기본적으로 여러 엔드포인트를 제공한다. 이러한 엔드포인트는 /actuator 경로 하위에 위치하며, 각각의 엔드포인트는 다양한 정보를 제공한다.


            ○   /actuator/health
: 애플리케이션의 상태를 확인한다.
              /actuator/metrics : 애플리케이션의 메트릭 정보를 제공한다.
            ○   /actuator/loggers : 로깅 설정을 조회하고 변경할 수 있다.
            ○   /actuator/env : 환경 변수와 설정 정보를 확인한다.
            ○   /actuator/beans : 애플리케이션 컨텍스트에 있는 빈 목록을 확인한다.
            ○   /actuator/threaddump : 스레드 덤프를 확인한다.
            ○   /actuator/httptrace : 최근 HTTP 요청 및 응답을 추적한다.

 

 

       ●  Actuator 엔드포인트 설정

📍 기본적으로 모든 엔드포인트가 활성화되어 있지 않을 수 있다. application.properties 파일을 사용하여 필요한 엔드포인트를 활성화하거나 비활성화할 수 있다.

 

            ○  설정 옵션 설명

               ▪   never : 헬스 체크 상세 정보를 절대 표시하지 않다.
               ▪  
always : 모든 사용자에게 헬스 체크 상세 정보를 항상 표시한다.
               ▪   when_authorized : 인증된 사용자에게만 헬스 체크 상세 정보를 표시한다.

 ⚙️ src/main/resources/application.properties

spring.application.name=sample

server.port=8080

#모든 엔드포인트 노출 설정
management.endpoints.web.exposure.include=* 

#헬스 체크 엔드포인트 상세 정보 표시 설정
management.endpoint.health.show-details=always 
# 이 설정은 /actuator/health 엔드포인트에서 헬스 체크 정보를 항상 상세히 보여주도록 설정한다. 
# 기본적으로, 헬스 체크 엔드포인트는 요약된 상태 정보만 제공하며, 상세 정보는 노출되지 않는다.



       ●  주의사항 및 권장사항

            ○  보안
               ▪   모든 엔드포인트를 노출하는 설정은 개발 및 테스트 환경에서는 유용할 수 있지만, 운영 환경에서는 보안 위험을 증가시킬 수 있다.
               ▪   필요한 엔드포인트만 노출하는 것을 권장한다.
               ▪   헬스 체크 엔드포인트에서 상세 정보를 항상 노출하는 설정 역시 운영 환경에서는 민감한 정보를 포함할 수 있으므로, show-details설정 when_authorized 옵션을 사용하는 것이 좋다.

            ○  엔드포인트 보호
               ▪   actuator 접근 포트만 다른 포트로 설정하여 보호 할 수 있다.

# 애플리케이션의 기본 포트를 8080으로 설정
server.port=8080

# Actuator 엔드포인트를 19090 포트에서 서비스하도록 설정
management.server.port=19090


               ▪   Spring Security를 사용하여 민감한 엔드포인트에 접근 제어를 설정하는 것이 좋다.
               ▪   예를 들어, /actuator 경로에 대한 보안 설정을 추가할 수 있다.

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/actuator/**").authenticated()
            .and()
            .httpBasic();
    }
}

 

 

 

 

'모니터링' 카테고리의 다른 글

시큐어 코딩 - XSS  (2) 2024.10.11
시큐어 코딩 - CSRF  (9) 2024.10.11
시큐어 코딩 - CORS  (0) 2024.10.09
애플리케이션 로그 모니터  (2) 2024.10.07
모니터링 - Prometheus와 Grafana  (0) 2024.10.04