본문 바로가기

Spring/Springboot

[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.memory.committed",
    "jvm.memory.max", 			// jvm 메모리 최대치
    "jvm.memory.usage.after.gc",
    "jvm.memory.used", 			// jvm 메모리 사용량
    "jvm.threads.daemon",
    "jvm.threads.live", 		// jvm 스레드
    "jvm.threads.peak",
    "jvm.threads.states"

 

2. 시스템 메트릭

  • 시스템 메트릭 제공
  • system. process. disk. 으로 시작함
  • CPU 지표, 파일 디스크립터 메트릭, 가동 시간 메트릭, 사용 가능한 디스크 공간 확인
    "disk.free",
    "disk.total",
    "process.cpu.usage",
    "process.files.max",
    "process.files.open",
    "process.start.time",
    "process.uptime",
    "system.cpu.count",
    "system.cpu.usage",
    "system.load.average.1m",

 

 

 

3. 애플리케이션 시작 메트릭

 

  • 애플리케이션 시작 시간 메트릭 제공
"application.ready.time", 	// 애플리케이션을 시작하는데 걸리는 시간, ApplicationStartedEvent로 측정
"application.started.time" // 애플리케이션이 요청을 처리할 준비가 되는데 걸리는 시간, ApplicationReadyEvent로 측정

 

cf) 스프링은 내부에 여러 초기화 단계가 있고 각 단계별로 내부에서 애플리케이션 이벤트를 발행함

ApplicationStartedEvent: 스프링 컨테이너가 완전히 실행된 상태. 이후에는 커맨드 라인 러너가 호출됨

ApplicationReadyEvent: 커맨드 아니 러너가 실행된 이후에 호출됨

 

 

4. 스프링 MVC 메트릭

  • 스프링 MVC 컨트롤러가 처리하는 모든 요청을 다룸
  • 메트릭 이름: http.server.requests
  • 태그를 사용해서 아래와 같은 정보를 분류해서 확인할 수 있음
    • uri: 요청 URI
    • method: GET, POST 같은 HTTP  메서드
    • status: 200, 400, 500 같은 HTTP Status 코드
    • exception: 예외
    • outcome: 상태코드 그룹으로 모아서 확인: 1xx: INFORMATIONAL, 2xx: SUCCESS, 3xx: REDIRECTION, 4xx: CLIENT_ERROR, 5xx: SERVER_ERROR

 

 

5. 데이터 소스 메트릭

  • DataSource, 커넥션 풀에 관한 메트릭 확인
  • jdbc.connections. 로 시작함
  • 최대 커넥션, 최소 커넥션, 활성 커넥션, 대기 커넥션 수 등을 확인할 수 있음
  • 히카리 커넥션 풀을 사용하면 hikaricp. 를 통해 커넥션 풀의 자세한 메트릭을 확인할 수 있음
    "hikaricp.connections",
    "hikaricp.connections.acquire",
    "hikaricp.connections.active",
    "hikaricp.connections.creation",
    "hikaricp.connections.idle",
    "hikaricp.connections.max",
    "hikaricp.connections.min",
    "hikaricp.connections.pending",
    "hikaricp.connections.timeout",
    "hikaricp.connections.usage",
    "jdbc.connections.active",
    "jdbc.connections.idle",
    "jdbc.connections.max",
    "jdbc.connections.min",

 

 

6. 로그 메트릭

  • logback.events: logback 로그에 대한 메트릭을 확인할 수 있음
  • trace, debug, info, warn, error 각각의 로그 레벨에 따른 로그 수를 확인할 수 있음
  • 예를 들어서 error 로그 수가 급격히 높아진다면 위험한 신호로 받아드릴 수 있음
"logback.events"

 

 

7. 톰캣 메트릭

  • tomcat. 으로 시작함
    "tomcat.sessions.active.current",
    "tomcat.sessions.active.max",
    "tomcat.sessions.alive.max",
    "tomcat.sessions.created",
    "tomcat.sessions.expired",
    "tomcat.sessions.rejected"

 

  • 톰캣 메트릭을 모두 사용하려면 다음 옵션을 켜야함(옵션을 켜지 않으면 tomcat.session. 관련 정보만 노출됨)
// application.yml

server:
  tomcat:
    mbeanregistry:
      enabled: true

 

왜 실행시키면 이 내용이 삭제되는거징.......ㅎ? 

 

 

 

8. 기타 메트릭

  • HTTP 클라이언트 메트릭(RestTemplate, webClient)
  • 캐시 메트릭
  • 작업 실행과 스케줄 메트릭
  • 스프링 데이터 리포지토리 메트릭
  • 몽고DB 메트릭
  • 레디스 메트릭

 

 

9. 사용자 정의 메트릭

  • 사용자가 직접 메트릭을 정의할 수 있음
  • 예를 들어서 주문수, 취소수를 메트릭으로 만들 수 있음
  • 사용자 정의 메트릭을 만들기 위해서는 마이크로미터의 사용법을 먼저 이해해야 함