스프링/스프링부트
-
프로메테우스 - 설정스프링/스프링부트 2023. 10. 2. 16:41
프로메테우스가 애플리케이션 메트릭을 수집하도록 연동하는 과정 1. 애플리케이션 설정 : 프로케테우스가 애플리케이션의 메트릭을 가져갈 수 있도록 애플리케이션에서 프로메테우스의 형식에 맞추어 메트릭 만들기 2. 프로메테우스 설정 : 프로메테우스가 애플리케이션의 메트릭을 주기적으로 수집하도록 설정 아래의 사이트에서 운영체제에 맞는 프로메테우스를 다운받으면 된다. https://prometheus.io/download/ prometheus.exe를 실행하면 9090포트로 프로메테우스 페이지에 접근할 수 있다. http://localhost:9090 애플리케이션 설정 프로메테우스는 localhost:8080/actuator/metrics의 JSON 형식은 이해하지 못한다. 마이크로미터가 프로메테우스 포멧에 맞춰서..
-
프로메테우스와 그라파나 소개스프링/스프링부트 2023. 10. 2. 16:03
프로메테우스 메트릭은 실시간 상황을 알려주지만 과거 이력을 저장해주지 않는다. 애플리케이션에서 발생한 메트릭을 저장하고 지속적으로 확인하기 위해서 메트릭을 보관하는 데이터베이스가 필요하다. 프로메테우스는 이러한 기능을 담당한다. 그라파나 프로메테우스는 데이터베이스인데, 이 데이터베이스의 데이터를 보기 쉽게 만들어주는 대시보드가 필요하다. 그라파나는 유연하게 데이터를 그래프로 보여주는 도구이다. 전체 구조 1. 왼쪽의 매트릭은 액츄에이터와 마이크로미터를 사용해서 자동으로 생성된다. -> 마이크로미터 프로메테우스 구현체는 프로메테우스가 읽을 수 있는 형식으로 메트릭을 만들어준다. 2. 프로메테우스는 만들어진 메트릭을 지속해서 수집한다. 3. 프로메테우스가 수집된 메트릭을 내부의 데이터베이스에 저장한다. 4...
-
메트릭의 종류들스프링/스프링부트 2023. 10. 2. 15:56
마이크로미터와 액츄에이터가 기본으로 제공하는 메트릭 JVM 메트릭 - jvm 메모리 및 버퍼 풀 세부 정보 가비지 수집 관련 통계스레드 활용 로드 및 언로드된 클래스 수 JVM 버전 정보 JIT 컴파일 시간 시스템 메트릭 - system CPU 지표 파일 디스크립터 메트릭 가동 시간 메트릭 사용 가능한 디스크 공간 - disk.free, disk.total 애플리케이션 시작 메트릭 - application application.started.time : 애플리케이션을 시작하는데 걸리는 시간 - ApplicationStartedEvent로 측정 -> ApplicationStartedEvent : 스프링 컨테이너가 완전히 실행된 상태이다. 이후에 커맨드 라인 러너가 호출된다. application.ready..
-
메트릭 확인스프링/스프링부트 2023. 10. 2. 15:28
CPU, JVM 사용량, 커넥션 사용 등을 수집하려면 개발자가 지표를 수집해서 마이크로미터가 제공하는 표준 방법에 따라 등록하면 된다. 마이크로미터는 다양한 지표 수집 기능이 존재한다. 스프링 부트 액츄에이터는 마이크로미터가 제공하는 지표 수집을 @AutoConfiguration을 통해 자동으로 등록해주기 때문에 이 기능을 사용하면 된다. 액츄에이터의 엔드포인트중에 metrics가 존재한다. localhost:8080/actuator/metrics 일부만 캡쳐했지만 이외에도 많은 정보를 보여주는데, 상세 내용을 보기원하면 uri뒤에 입력하면 된다. 예를 들어 localhost:8080/actuator/metrics/jvm.memory.used를 입력하면 jvm의 메모리 사용량을 확인할 수 있다. tag ..
-
마이크로미터란?스프링/스프링부트 2023. 10. 2. 15:01
서비스 운영 시에는 CPU, 메모리, 고객 요청과 같은 지표들을 확인하는 것이 필요한데 모니터링 툴을 이용해서 시스템의 다양한 정보를 파악하는 것이 중요하다. 모니터링 툴이 많은데 중간에 사용하는 모니터링 툴을 변경하면 기존에 측정했던 코드를 변경하는 모니터링에 맞춰서 전부 변경해야 한다. 이런 문제를 해결해주는 기능이 마이크로미터이다. -> 마이크로미터는 라이브러리이다. 개발자는 위의 사진처럼 마이크로미터 표준 측정 방법으로 메트릭(측정 지표)를 전달하면 된다. 이후에 원하는 모니터링 툴에 맞는 구현체를 선택하고, 모니터링 툴이 변경되어도 해당 구현체만 바꿔주면 된다. 결론적으로 애플리케이션 코드는 모니터링 툴이 변경되어도 그대로 유지되는 것이다. 스프링부트 액츄에이터는 마이크로미터를 기본으로 내장해서..
-
액츄에이터와 보안스프링/스프링부트 2023. 10. 1. 14:32
액츄에이터가 제공하는 기능은 애플리케이션의 내부 정보를 많이 노출하기에 외부 인터넷 망이 공개된 곳에 액츄에이터의 엔드포인트를 공개하는 것은 보안상 좋지 않다. 외부에서 접근할 수 없게 만들고 내부에서만 접근 가능하도록 내부망을 사용하는 것이 좋은 방법이다. 내부망을 사용하는 것이 가장 좋은 방법이지만 이외에도 2가지 방법이 있다. 1. 액츄에이터 포트 설정 외부에 노출되는 8080 포트에서 액츄에이터에 접근할 수 없도록 다른 포트에 액츄에이터를 설정하는 것이다. application.yml management: server: port: 9292 프로그램 재시작을 하면 8080포트와 9292포트가 같이 실행된다. localhost:8080/actuator로 연결하면 접근할 수 없고 localhost:92..
-
로거 - loggers스프링/스프링부트 2023. 10. 1. 14:19
로깅과 관련된 정보를 확인하고 로깅 레벨을 실시간으로 변경할 수도 있다. LogController @Slf4j @RestController public class LogController { @GetMapping("/log") public String log() { log.trace("trace log"); log.debug("debug log"); log.info("info log"); log.warn("warn log"); log.error("error log"); return "ok"; } } 일단 접근하면 log를 출력하는 컨트롤러를 만든다. log는 default가 info까지여서 info, warn, error의 로그만 출력될 것이다. application.yml logging: level: ..
-
애플리케이션 정보 - info스프링/스프링부트 2023. 10. 1. 14:01
info 엔드포인트에서 기본으로 제공하는 정보 java : 자바 런타임 정보 os : OS 정보 env : Environment 에서 info. 로 시작하는 정보 build : 빌드 정보, META-INF/build-info.properties 파일이 필요하다. git : git 정보, git.properties 파일이 필요하다. 여기서 env, java, os는 기본적으로 비활성화 되어있다. application.yml management: info: java: enabled: true os: enabled: true env: enabled: true endpoint: shutdown: enabled: true info: app: name: hello-actuator company: jch info는 ..