Skip to content

Commit d372974

Browse files
authored
feat: prometheus 기반 리소스 모니터링 시스템 구축 (#98)
* refactor: 프로메테우스 그라파나 설정 * refactor: 모니터링 관련 배포 스크립트 추가 * fix: 경로 불일치로 인한 no data 픽스 * refactor: include *로 변경
1 parent a529fe5 commit d372974

File tree

6 files changed

+89
-3
lines changed

6 files changed

+89
-3
lines changed

.github/workflows/DeployToDev.yml

+4-2
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ jobs:
6161
username: ${{ secrets.NCP_SERVER_USERNAME }}
6262
password: ${{ secrets.NCP_SERVER_PASSWORD }}
6363
port: ${{ secrets.NCP_SERVER_PORT }}
64-
source: infra/development/docker/docker-compose.yml
64+
source: "infra/development/docker/docker-compose.yml, infra/development/docker/monitoring-docker-compose.yml"
6565
target: ${{ secrets.DOCKER_COMPOSE_YAML_PATH }}
6666
strip_components: 3
6767

@@ -75,6 +75,8 @@ jobs:
7575
script: |
7676
docker-compose -f ${{ secrets.DOCKER_COMPOSE_YAML_PATH }}/docker-compose.yml pull
7777
docker-compose -f ${{ secrets.DOCKER_COMPOSE_YAML_PATH }}/docker-compose.yml --env-file ${{ secrets.ENV_FILE_PATH }} up -d
78+
docker-compose -f ${{ secrets.DOCKER_COMPOSE_YAML_PATH }}/monitoring-docker-compose.yml pull
79+
docker-compose -f ${{ secrets.DOCKER_COMPOSE_YAML_PATH }}/monitoring-docker-compose.yml --env-file ${{ secrets.ENV_FILE_PATH }} up -d
7880
7981
check:
8082
needs: deploy
@@ -97,4 +99,4 @@ jobs:
9799
fields: repo,message,commit,author,eventName,workflow,job,took,pullRequest
98100
env:
99101
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEB_HOOK_URL }}
100-
if: always()
102+
if: always()

build.gradle

+3-1
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,11 @@ dependencies {
5858

5959
//JACKSON
6060
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0'
61-
6261
implementation 'com.fasterxml.jackson.module:jackson-module-jsonSchema:2.15.0'
6362

63+
// MONITORING
64+
implementation 'org.springframework.boot:spring-boot-starter-actuator'
65+
runtimeOnly 'io.micrometer:micrometer-registry-prometheus'
6466
}
6567

6668

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
version: '3.8'
2+
3+
services:
4+
prometheus:
5+
image: prom/prometheus:latest
6+
container_name: onepiece-prometheus
7+
user: "$UID:$GID"
8+
ports:
9+
- "${PROMETHEUS_PORT}:9090"
10+
volumes:
11+
- ./prometheus:/etc/prometheus
12+
command:
13+
- '--web.enable-lifecycle'
14+
- '--config.file=/etc/prometheus/prometheus.yml'
15+
networks:
16+
- monitoring-network
17+
18+
grafana:
19+
image: grafana/grafana:latest
20+
container_name: onepiece-grafana
21+
user: "$UID:$GID"
22+
ports:
23+
- "${GRAFANA_PORT}:3000"
24+
volumes:
25+
- 'grafana_storage:/var/lib/grafana'
26+
depends_on:
27+
- prometheus
28+
networks:
29+
- monitoring-network
30+
31+
networks:
32+
monitoring-network:
33+
driver: bridge
34+
35+
volumes:
36+
grafana_storage: {}
+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
groups:
2+
- name: cpu-node
3+
rules:
4+
- record: job_instance_mode:node_cpu_seconds:avg_rate5m
5+
expr: avg by (job, instance, mode) (rate(node_cpu_seconds_total[5m]))
6+
7+
- name: system-monitor
8+
rules:
9+
- alert: ApplicationDown
10+
expr: up == 0
11+
for: 5m
12+
annotations:
13+
summary: "Instance {{ $labels.instance }} down"
14+
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."
15+
16+
- alert: HighRequestLatency
17+
expr: histogram_quantile(0.5, rate(api_http_request_duration_seconds_bucket[5m])) > 1
18+
for: 5m
19+
annotations:
20+
summary: "High request latency on {{ $labels.instance }}"
21+
description: "{{ $labels.instance }} has a median request latency above 1s (current value: {{ $value }}s)"

monitoring/prometheus/prometheus.yml

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
global:
2+
scrape_interval: 15s
3+
evaluation_interval: 15s
4+
5+
# Attach these extra labels to all timeseries collected by this Prometheus instance.
6+
external_labels:
7+
monitor: 'codelab-monitor'
8+
9+
rule_files:
10+
- 'prometheus.rules.yml'
11+
12+
scrape_configs:
13+
- job_name: 'prometheus'
14+
metrics_path: '/actuator/prometheus'
15+
16+
static_configs:
17+
- targets: ['172.17.0.1:8080']
18+
labels:
19+
group: 'prometheus'

src/main/resources/application.yml

+6
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,9 @@ cloud:
6565
encryption:
6666
secret-key: ${ENCRYPTION_SECRET_KEY}
6767
algorithm: ${ENCRYPTION_ALGORITHM}
68+
69+
management:
70+
endpoints:
71+
web:
72+
exposure:
73+
include: "*"

0 commit comments

Comments
 (0)