# Monitoring Hands-On
TIP
- Demo Application 을 Kubernetes cluster에 배포
- Kubernetes로 부터 Micrometer 정보를 discovery
- Target으로 부터 Pod 및 JVM metrics 수집
- Grafana dashboard에서 Pod 및 JVM metrics 정보를 시각화
# Step 01. Application
- Demo Application 다운로드
git clone https://github.com/cnpst/sam-zcp-lab
cd sam-zcp-lab
- Maven Dependency 설정 : micrometer 추가, spring-actuator
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Micormeter core dependecy -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-core</artifactId>
</dependency>
<!-- Micrometer Prometheus registry -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- springboot(application.yaml) properties 수정
#Metrics related configurations
management:
server:
port: 8090
endpoint:
metrics:
enabled: true
prometheus:
enabled: true
endpoints:
web:
base-path: /
exposure:
include: "*"
metrics:
export:
prometheus:
enabled: true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- maven build
mvn clean package
# Step 02. Docker Image
- Dockerfile 작성
FROM openjdk:8-jdk-alpine
ADD target/sample-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom",”jar","/app.jar"]
1
2
3
2
3
- Docker Image Build
docker build -t spring-boot-monitoring-demo .
docker images
- Application 실행/검증
docker run -p 8080:8080 -p 8090:8090 spring-boot-monitoring-demo
curl localhost:8080
- Metric 확인 :
curl localhost:8090/prometheus
- Docker image Push to Registry
docker tag spring-boot-monitoring-demo:[VERSION] [REPOSITORY_ADDRESS]/spring-boot-monitoring-demo:[VERSION]
docker push [REPOSITORY_ADDRESS]/spring-boot-monitoring-demo:[VERSION]
# Step 03. Kubernetes Deploy
- deployment.yaml
- spec.template.metadata.annotations.prometheus.io/scrape : Discorvery 대상 여부
- spec.template.metadata.annotations.prometheus.io/port : Discovery target port
- spec.template.metadata.annotations.prometheus.io/path : Discovery target path
...
template:
metadata:
...
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "8090"
prometheus.io/path: /prometheus
spec:
containers:
- name: spring-boot-cicd-demo
image: cloudzcp/spring-boot-monitoring-demo:latest
...
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
- Demo Application 배포
kubectl apply -f k8s/deployment.yaml
- Metric확인
kubectl port-forward spring-boot-cicd-demo-5795695496-ljfkw 8090:8090
curl localost:8090
- 결과
jvm_memory_used_bytes{area="heap",id="PS Survivor Space",} 4390912.0
jvm_memory_used_bytes{area="heap",id="PS Old Gen",} 1.6629768E7
# Step 04. Dashboard 구성
- Import 메뉴 Click
- Upload .json File Click
- 다운로드 받은 sam-zcp-lab 프로젝트 > grafana > micrometer-grafana-dashboard.json 파일 import
- Options > prometheus combo box > prometheus data source 선택 >
Import
버튼 선택
Heap Memory, Threads, Class Loading, Open File, GC 등에 대한 metrics을 그래프 형태로 조회
기타 Dashboard