
스프링 배치를 쓰면서 담당 팀원이 모니터링을 하는게 좋을 것 같다는 말을해서
연동해보려고한다!
전에 아주짧게 각 개념이랑 특징 호로롭
Prometheus 는 모니터링 도구localhost:9090).Grafana는 시각화 도구이건 docker-compse.yml 파일
version: '3.8'
services:
...
prometheus:
image: prom/prometheus
container_name: prometheus
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
grafana:
image: grafana/grafana
container_name: grafana
ports:
- "3000:3000"
volumes:
- grafana-data:/var/lib/grafana
depends_on:
- prometheus
volumes:
mysql-data:
redis-data:
chroma-data:
grafana-data:
일케 프로메테우스 설정, 그라파나 설정 넣어주고 볼륨도 정해줫다
그런다음 프로테메우스 설정yml이 필요함
경로는 이렇게

global:
scrape_interval: 20s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: [ 'localhost:9090' ]
벌써 다했음 정말쉽죠??
이제 스프링 부트 앱을 프로메테우스가 추적하도록 설정해야함
먼저 의존성 추가해주기
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-registry-prometheus'
1번째 의존성은 애플리케이션의 상태, 메트릭, 환경 정보 등을 자동으로 노출해주는 기능이다. (애플리케이션 자체의 모니터링 인터페이스)
2번 째 의존성은 모니터링 툴마다 메트릭의 포맷(양식)이 다른데, 이 micrometer 라는 라이브러리는 프로메테우스 툴이 사용하는 메트릭 포맷에 맞춰 메트릭을 변경시켜준다고 함.
micrometer = 인터페이스, 프로메테우스 = 구현체
즉, 두 의존성을 추가해주면
Spring Boot 앱이 /actuator/prometheus 라는 엔드포인트를 만들어서
👉 Prometheus가 수집 가능한 텍스트 포맷의 메트릭을 제공해줌
management.endpoints.web.exposure.include=*
management.server.port=9292
server.tomcat.mbeanregistry.enabled=true
exposure.include=*: 모든 Actuator 엔드포인트를 외부로 노출management.server.port=9292 server.tomcat.mbeanregistry.enabled=true : 톰캣 쓰레드 풀의 최대 쓰레드 수, 사용 쓰레드 수도 보기 위해 톰캣 관련 메트릭을 추가global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: [ 'localhost:9090' ]
- job_name: "spring-actuator" // 수집하는 이름으로 임의의 이름
metrics_path: '/actuator/prometheus' // 수집할 경로를 지정
scrape_interval: 1m // 수집할 주기를 설정 1m은 1분, 1s는 1초
static_configs:
- targets: ['host.docker.internal:9292'] // 수집할 서버의 IP, PORT 를 지정, application.yml 에 포트를 9292로 지정했음
그런다음 도커 실행시켜주고 compse.yml 실행시켜주고~~
스프링 어플리케이션 작동시켜준다.
하면 로그인하라고 뜨는데
Id : admin
pwd : admin
으로 접속하고나서 비밀번호 변경시켜준다.

여기들어가서
프로메테우스 설정해주면되늗데

http://prometheus:9090
으로 작성해준다.
단, 이 경우는 docker-compse.yml 하나의 파일안에 promethues랑 grafana가 같이있어야함
이유는 ?
docker-compse 안에서는 서비스 이름 = 도커 네트워크 호스트 이름
이렇게 컴포즈 파일안에 여러 서비스들이 있는데 각 이름들이 호스트 이름이될수잇음
이렇게 설정해주면 이제 그라파나가 프로메테우스의 정보를 읽어오기시작함
참고로 나는 properties에서 포트번호 바꿔준거니깐
원래는 http://localhost:8080/actuator/prometheus 으로 들어가면됨!!

이런식으로 정보들을 15초마다 불러와줌
https://grafana.com/grafana/dashboards/?search=spring
여기들어간다

호환되는거 확인하고 나는 제일 처음에있는거 선택했음!!

여기서 ID 복사해오고 다시
localhost:3000으로 들어간다


여기다가 필요한 아이디값 치고 로드 갈기면댐

굿
ㅊㅊ : https://dkswhdgur246.tistory.com/64
https://alswns7984.tistory.com/63

| 그래프 | 설명 |
|---|---|
| G1 Eden Space (heap) | 새 객체가 주로 할당되는 공간. 여기가 꽉 차면 GC가 발생하여 일부 객체가 Survivor나 Old로 이동 |
| G1 Old Gen (heap) | 오래 살아남은 객체들이 저장되는 공간. 이 영역이 계속 커지면 Full GC 가능성이 높아진다 |
| G1 Survivor Space (heap) | Eden에서 살아남은 객체들이 잠시 머무는 공간. 일정 횟수 이상 살아남으면 Old Gen으로 이동. |

| 그래프 | 설명 |
|---|---|
| CodeCache (non-heap) | JIT 컴파일된 코드가 저장되는 영역. 코드 실행 최적화와 관련 있다. |
| Compressed Class Space (non-heap) | 클래스 메타데이터를 위한 공간 (Compressed Oops 사용 시). |
| Metaspace (non-heap) | 클래스 메타데이터가 저장됩니다. 과거 PermGen의 대체 공간입니다. |
먼소린지모르겠군...

| 그래프 | 설명 |
|---|---|
| Direct Buffers | ByteBuffer.allocateDirect() 같은 네이티브 메모리를 사용한 버퍼 크기. 네트워크/파일 I/O에서 자주 사용. |
| Threads | 현재 실행 중인 스레드 수. Daemon과 Live 스레드, Peak (최대치) 모두 보여준다. |