본문 바로가기

Spring/Springboot

[Springboot] 프로메테우스 설치 애플리케이션에서 발생한 메트릭을 그 순간만 확인하는 것이 아닌 과거 이력까지 함께 확인하려면 메트릭을 보관하는 DB가 필요함 이렇게 하려면 어디선가 메트릭을 지속해서 수집하고 DB에 저장해야 함 프로메테우스가 바로 이런 역할을 담당함 1. 프로메테우스 아키텍처 2. 설치 https://prometheus.io/download/ Download | Prometheus An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach. prometheus.io mac 사용자는 darwin-amd64 선택 다운로.. 더보기
[Springboot] 다양한 메트릭 확인하기 1. JVM 메트릭 JVM 관련 메트릭을 제공 jvm. 으로 시작함 메모리, 버퍼, 가비지 수집, 스레드, 로드 및 언로드된 클래스 수, JVM 버전 정보, JIT 컴파일 시간 등의 정보를 확인할 수 있음 "jvm.buffer.count", "jvm.buffer.memory.used", "jvm.buffer.total.capacity", "jvm.classes.loaded", "jvm.classes.unloaded", "jvm.compilation.time", "jvm.gc.live.data.size", "jvm.gc.max.data.size", "jvm.gc.memory.allocated", "jvm.gc.memory.promoted", "jvm.gc.overhead", "jvm.info", "jvm... 더보기
[Springboot] 마이크로미터 1. 모니터링의 필요성 서비스를 운영할 때는 애플리케이션에 CPU, 메모리, 커넥션 사용, 고객 요청수 같은 수 많은 지표들을 확인하는 것이 필요함 어디에 어떤 문제가 발생했는지 사전에 대응할 수 있고, 문제 발생 시 원인을 빠르게 파악해서 대처할 수 있음 2. 마이크로미터(Micrometer) 라이브러리 세상에는 다양한 모니터링 툴이 존재하는데, 각 툴마다 정보를 전달하는 방법이 다 다름, 그래서 이 것을 표준 측정하도록 돕는게 마이크로미터 라이브러리 -> 애플리케이션 메트릭 파사드라고 불리는데, 애플리케이션의 메트릭(측정 지표)을 마이크로미터가 정한 표준 방법으로 모아서 제공해줌 마이크로미터 추상체를 사용하고 예를들어 JMX구현체, 프로메테우스 구현체 등 구현체를 선택하면됨 -> 마이크로미터가 추상화.. 더보기
[Springboot] 액츄에이터와 보안 1. 액츄에이터와 보안 액츄에이터가 제공하는 기능들은 애플리케이션 내부 정보를 너무 많이 노출함 그래서 외부 인터넷 망이 공개된 곳에 액츄에이터의 엔드포인트를 공개하는 것은 보안상 좋은 방법이 아님 액츄에이터의 엔드포인트들은 외부 인터넷에서 접근이 불가능하게 막고, 내부에서만 접근 가능한 내부망을 사용하는 것이 안전함 2. 보안 방법 1) 액츄에이터 포트 설정 외부 인터넷 망을 통해서 8080 포트에만 접근할 수 있고, 다른 포트는 내부망에서만 접근할 수 있다면 그 다른 포트번호에서 액츄에이터 실행되도록 설정하면 됨 // application.properties management.server.port={포트번호} 2) 액츄에이터 URL 경로에 인증 설정 포트를 분리하는 것이 어렵고 어쩔 수 없이 외부 .. 더보기
[Springboot] 액츄에이터 - loggers 엔드포인트 1. 기능 로깅과 관련된 정보를 확인하고, 실시간 변경 가능 2. 실습 package hello.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @Slf4j @RestController public class LogController { @GetMapping("/log") public String log() { log.trace("trace log"); log.debug("debug log"); log.info("info log"); log.warn("wa.. 더보기
[Springboot] 액츄에이터 - info 엔드포인트 1. 기능 1) 애플리케이션의 기본 정보 노출 2) 기본으로 제공하는 기능 java: 자바 런타임 정보(default: 비활성화) os: OS 정보(default: 비활성화) env: Environment에서 info로 시작하는 정보(default: 비활성화) build: 빌드 정보, META-INF/build-info.properties 파일 필요 git: git 정보, git.properties 파일 필요 2. 실습 1) JAVA, OS 정보 application.yml 내용 추가 management: info: java: enabled: true os: enabled: true 2) env management: info: env: enabled: true info: app: name: hello-a.. 더보기
[Springboot] 액츄에이터 - 헬스정보 health 엔드포인트 헬스 정보를 사용하면 애플리케이션에 문제가 발생했을 때 문제를 빠르게 인지할 수 있음 애플리케이션이 요청에 응답할 수 있는지 판단하는 것을 넘어서 애플리케이션이 사용하는 데이터베이스가 응답하는지, 디스크 사용량에는 문제가 없는지 같은 다양한 정보들을 포함해서 만들어짐 헬스 기능을 직접 구현할 수도 있음 액츄에이터는 db, mongo, redis, diskspace, ping 등과 같은 수 많은 헬스 기능을 기본으로 제공함 헬스 정보를 자세히 보려면 아래와 같은 옵션을 지정하면됨 // application.properties management.endpoint.health.show-details=always 헬스 정보 디테일하게 보기 // application.yml management: endpoint:.. 더보기
[springboot] 액츄에이터(actuator) 1. 의존성 추가 // build.gradle implementation 'org.springframework.boot:spring-boot-starter-actuator' //actuator 추가 2. 액츄에이터가 제공하는 수 많은 기능을 확인할 수 있음 액츄에이터가 제공하는 기능 하나하나를 엔드포인트라고하고 health는 헬스 정보를 beans는 스프링 컨테이너에 등록된 빈을 보여줌 { "_links": { "self": { "href": "http://localhost:8080/actuator", "templated": false }, "beans": { "href": "http://localhost:8080/actuator/beans", "templated": false }, "caches-cac.. 더보기