메트릭(metric)
은 일반적으로 시스템 또는 서버의 성능 및 상태를 측정하고 수집하는 데 사용되는 데이터 서버의 동작을 모니터링
하고 최적화할 수 있게 도와준다.IntelliJ : 2022.1.3.Ultimate
spring boot : 3.2.2
java jdk : 17
// spring boot 애플리케이션을 모니터링하고 관리하는 데 도움이 되는 운영 환경용 기능들
implementation 'org.springframework.boot:spring-boot-starter-actuator'
// 애플리케이션 메트릭을 수집하기 위한 간단하고 일관된 API를 제공하는 메트릭 퍼사드 라이브러리
implementation 'micrometer.io:micrometer-registry-prometheus'
# Spring Boot 액추에이터의 웹 엔드포인트 중 어떤 것들을 노출할 것인지 지정
management:
endpoints:
web:
exposure:
include: '*'
metrics:
# Micrometer를 통해 수집된 Metric 데이터를 Prometheus 형식으로 노출할지 여부를 결정
export:
prometheus:
enabled: true
# HTTP 요청의 처리 시간을 자동으로 측정하여 Metric으로 수집하도록 지정
web:
server:
auto-time-requests: true
http://127.0.0.1:8080/actuator
{
"_links": {
"self": { # 현재 Actuator 엔드포인트에 대한 URL
"href": "http://127.0.0.1:8080/actuator",
"templated": false
},
"beans": { # 애플리케이션 컨텍스트에 등록된 빈(Bean)들의 목록을 조회할 수 있는 URL
"href": "http://127.0.0.1:8080/actuator/beans",
"templated": false
},
"caches-cache": { # 특정 캐시에 대한 정보를 조회할 수 있는 URL
"href": "http://127.0.0.1:8080/actuator/caches/{cache}",
"templated": true
},
"caches": { # 애플리케이션에서 사용 중인 캐시의 목록을 조회할 수 있는 URL
"href": "http://127.0.0.1:8080/actuator/caches",
"templated": false
},
"health-path": { # 특정 경로에 대한 헬스체크 정보를 제공하는 URL
"href": "http://127.0.0.1:8080/actuator/health/{*path}",
"templated": true
},
"health": { # 애플리케이션의 상태 및 헬스체크 정보를 제공하는 URL
"href": "http://127.0.0.1:8080/actuator/health",
"templated": false
},
"info": { # 애플리케이션의 추가 정보를 제공하는 URL
"href": "http://127.0.0.1:8080/actuator/info",
"templated": false
},
"conditions": { # 애플리케이션의 자동 구성 조건에 대한 정보를 제공하는 URL
"href": "http://127.0.0.1:8080/actuator/conditions",
"templated": false
},
"configprops": { // 플리케이션의 구성 프로퍼티(Config Props)에 대한 정보를 제공하는 URL
"href": "http://127.0.0.1:8080/actuator/configprops",
"templated": false
},
"configprops-prefix": {
"href": "http://127.0.0.1:8080/actuator/configprops/{prefix}",
"templated": true
},
"env": { # 애플리케이션의 환경 설정에 대한 정보를 제공하는 URL
"href": "http://127.0.0.1:8080/actuator/env",
"templated": false
},
"env-toMatch": {
"href": "http://127.0.0.1:8080/actuator/env/{toMatch}",
"templated": true
},
"loggers": { # 로깅 설정에 대한 정보를 조회하고 변경할 수 있는 UR
"href": "http://127.0.0.1:8080/actuator/loggers",
"templated": false
},
"loggers-name": {
"href": "http://127.0.0.1:8080/actuator/loggers/{name}",
"templated": true
},
"heapdump": { # JVM의 힙 덤프를 생성하는 URL
"href": "http://127.0.0.1:8080/actuator/heapdump",
"templated": false
},
"threaddump": { # 애플리케이션의 스레드 덤프를 생성하는 URL
"href": "http://127.0.0.1:8080/actuator/threaddump",
"templated": false
},
"metrics": { # 애플리케이션의 Metric 정보를 제공하는 URL
"href": "http://127.0.0.1:8080/actuator/metrics",
"templated": false
},
"metrics-requiredMetricName": {
"href": "http://127.0.0.1:8080/actuator/metrics/{requiredMetricName}",
"templated": true
},
"scheduledtasks": { # 스케줄된 작업에 대한 정보를 조회할 수 있는 URL
"href": "http://127.0.0.1:8080/actuator/scheduledtasks",
"templated": false
},
"mappings": { 애플리케이션의 URL 매핑 정보를 조회할 수 있는 URL
"href": "http://127.0.0.1:8080/actuator/mappings",
"templated": false
}
}
}
http://127.0.0.1:8080/actuator/metrics
{
"names": [
# 애플리케이션이 실행되고 Ready 상태가 되기까지 걸린 시간
"application.ready.time",
# 애플리케이션이 시작되기 시작한 시간
"application.started.time",
# 디스크의 여유 공간
"disk.free",
# 디스크의 총 용량
"disk.total",
# 현재 활성화된 executor 작업의 수
"executor.active",
# 완료된 executor 작업의 수
"executor.completed",
# executor 풀의 핵심 크기
"executor.pool.core",
# executor 풀의 최대 크기
"executor.pool.max",
# executor 풀의 현재 크기
"executor.pool.size",
# executor 풀의 큐에 대기 중인 작업의 수
"executor.queue.remaining",
# 현재 executor 풀에 대기 중인 작업의 수
"executor.queued",
# 총 HTTP 서버 요청의 수
"http.server.requests",
# 현재 처리 중인 HTTP 서버 요청의 수
"http.server.requests.active",
# JVM 버퍼의 개수.
"jvm.buffer.count",
# 사용 중인 JVM 버퍼 메모리 양.
"jvm.buffer.memory.used",
# JVM 버퍼의 총 용량.
"jvm.buffer.total.capacity",
# 로드된 JVM 클래스의 수
"jvm.classes.loaded",
# 언로드된 JVM 클래스의 수
"jvm.classes.unloaded",
# JVM에서의 클래스 컴파일 시간
"jvm.compilation.time",
# GC(Garbage Collection) 중에 살아있는 객체의 크기
"jvm.gc.live.data.size",
# GC 중에 수집될 수 있는 최대 데이터 크기
"jvm.gc.max.data.size",
# GC로 할당된 메모리 양
"jvm.gc.memory.allocated",
# GC로 프로모션된 메모리 양
"jvm.gc.memory.promoted",
# GC 오버헤드.
"jvm.gc.overhead",
# GC 일시 정지 시간.
"jvm.gc.pause",
# JVM에 대한 일반적인 정보를 포함하는 문자열
"jvm.info",
# JVM이 할당한 메모리 중에 현재 커밋된(확보된) 메모리 양
"jvm.memory.committed",
# JVM이 최대로 사용할 수 있는 메모리 양
"jvm.memory.max",
# 가비지 컬렉션 후의 JVM 메모리 사용률
"jvm.memory.usage.after.gc",
# JVM이 현재 사용 중인 메모리 양
"jvm.memory.used",
# 현재 실행 중인 데몬(백그라운드) 스레드의 수
"jvm.threads.daemon",
# 현재 활성화된 스레드의 수
"jvm.threads.live",
# 애플리케이션이 실행되는 동안 최대로 활성화된 스레드의 수
"jvm.threads.peak",
# 애플리케이션이 실행되면서 시작된 총 스레드의 수
"jvm.threads.started",
# 현재 스레드의 상태를 나타내는 메트릭
"jvm.threads.states",
# Logback 로깅 이벤트의 총 수
#애플리케이션에서 로깅이 발생할 때마다 이 값이 증가
"logback.events",
# 현재 프로세스의 CPU 사용률
"process.cpu.usage",
# 프로세스가 시작된 시간
"process.start.time",
# 프로세스가 실행된 시간
"process.uptime",
# 시스템에서 사용 가능한 CPU 코어의 수
"system.cpu.count",
# 시스템 전체 CPU 사용률
"system.cpu.usage",
# 현재 활성화된 Tomcat 세션의 수
"tomcat.sessions.active.current",
# Tomcat 세션의 최대 활성화 수
"tomcat.sessions.active.max",
# 유효한 최대 Tomcat 세션 수
"tomcat.sessions.alive.max",
# 애플리케이션에서 생성된 총 Tomcat 세션 수
"tomcat.sessions.created",
# 만료된 Tomcat 세션의 총 수
"tomcat.sessions.expired",
# 거부된 Tomcat 세션의 총 수
"tomcat.sessions.rejected"
]
}
📌 여담
📚 참고