From 9953a0fd3c34d514eadce6f80f167043a4583dd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=82=98=EA=B2=BD?= <1030n@naver.com> Date: Sat, 23 Aug 2025 06:56:05 +0900 Subject: [PATCH 1/5] =?UTF-8?q?:wrench:=20=EC=84=9C=EB=B8=8C=EB=AA=A8?= =?UTF-8?q?=EB=93=88=20monitoring=20=EC=84=A4=EC=A0=95=EA=B0=92=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources b/src/main/resources index deff0bc..b0607fb 160000 --- a/src/main/resources +++ b/src/main/resources @@ -1 +1 @@ -Subproject commit deff0bc2e5091b5c3d3bd3a7829373199e2c8a64 +Subproject commit b0607fb7b7b0ee73af8510c278a468f0c9d2ea9c From 2557e86243ab627965c7a7fb3670b1395ccbfbc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=82=98=EA=B2=BD?= <1030n@naver.com> Date: Sat, 23 Aug 2025 06:57:13 +0900 Subject: [PATCH 2/5] =?UTF-8?q?:wrench:=20SecurityConfig=20prometheus=20?= =?UTF-8?q?=EC=A0=91=EA=B7=BC=20=ED=97=88=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/likelion/danchu/global/config/SecurityConfig.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/likelion/danchu/global/config/SecurityConfig.java b/src/main/java/com/likelion/danchu/global/config/SecurityConfig.java index 3cc9721..583ac37 100644 --- a/src/main/java/com/likelion/danchu/global/config/SecurityConfig.java +++ b/src/main/java/com/likelion/danchu/global/config/SecurityConfig.java @@ -56,6 +56,8 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .permitAll() .requestMatchers("/swagger-ui/**", "/v3/api-docs/**") .permitAll() + .requestMatchers("/actuator/health", "/actuator/info", "/actuator/prometheus") + .permitAll() .anyRequest() .authenticated()) .addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class); From 4227cfec6554788be5e81be020422e7ce5cde5cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=82=98=EA=B2=BD?= <1030n@naver.com> Date: Sat, 23 Aug 2025 06:58:58 +0900 Subject: [PATCH 3/5] =?UTF-8?q?:heavy=5Fplus=5Fsign:=20monitoring=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EC=9D=98=EC=A1=B4=EC=84=B1=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/build.gradle b/build.gradle index 3e4193d..e6470d5 100644 --- a/build.gradle +++ b/build.gradle @@ -59,6 +59,10 @@ dependencies { // Flyway implementation 'org.flywaydb:flyway-core' implementation 'org.flywaydb:flyway-mysql' + + // Grafana & Prometheus + implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'io.micrometer:micrometer-registry-prometheus' } tasks.named('test') { From bcf79d7dfa7ad9e8ea46acd5e5a473a1fe0f81e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=82=98=EA=B2=BD?= <1030n@naver.com> Date: Sat, 23 Aug 2025 06:59:36 +0900 Subject: [PATCH 4/5] =?UTF-8?q?:sparkles:=20prometheus.yml=20=EC=84=9C?= =?UTF-8?q?=EB=B2=84=20=EB=B3=B5=EC=82=AC=20=EA=B3=BC=EC=A0=95=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/cd.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 9f7d369..9bfe0f3 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -51,14 +51,14 @@ jobs: token: ${{ secrets.GIT_ACTION_TOKEN }} submodules: true - - name: Copy docker-compose.yml to Server + - name: Copy compose & prometheus.yml to Server uses: appleboy/scp-action@master with: host: ${{ secrets.SSH_HOST }} port: ${{ secrets.SSH_PORT }} username: ${{ secrets.SSH_USERNAME }} key: ${{ secrets.SSH_PRIVATE_KEY }} - source: "docker-compose.yml" + source: "docker-compose.yml,prometheus.yml" target: "~/app" - name: Deploy on server From ddbde07f32cf8ec72972bbddfd72b204d6cfd057 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=82=98=EA=B2=BD?= <1030n@naver.com> Date: Sat, 23 Aug 2025 07:01:05 +0900 Subject: [PATCH 5/5] =?UTF-8?q?:sparkles:=20Prometheus=20&=20Grafana=20?= =?UTF-8?q?=EA=B5=AC=EC=B6=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 66 +++++++++++++++++++++++++++++++++++++++++++--- prometheus.yml | 49 ++++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 prometheus.yml diff --git a/docker-compose.yml b/docker-compose.yml index 02a009e..afc8691 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -66,6 +66,8 @@ services: depends_on: - app - dozzle + - grafana + - prometheus networks: - danchu-network restart: unless-stopped @@ -74,9 +76,66 @@ services: image: amir20/dozzle:latest container_name: dozzle volumes: - - /var/run/docker.sock:/var/run/docker.sock:ro # 로그 접근을 위한 도커 소켓 마운트 + - /var/run/docker.sock:/var/run/docker.sock:ro # 로그 접근을 위한 도커 소켓 마운트 networks: - - danchu-network + - danchu-network + restart: unless-stopped + + grafana: + image: grafana/grafana + container_name: grafana + environment: + - GF_SERVER_ROOT_URL=https://grafana.danchu.site/ + - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD} + - GF_USERS_ALLOW_SIGN_UP=false + volumes: + - grafana-storage:/var/lib/grafana + networks: + - danchu-network + restart: unless-stopped + + prometheus: + image: prom/prometheus:latest + container_name: prometheus + volumes: + - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro + networks: + - danchu-network + restart: unless-stopped + + node-exporter: + image: prom/node-exporter + container_name: node-exporter + command: + - '--path.rootfs=/host' + volumes: + - '/:/host:ro,rslave' + networks: + - danchu-network + restart: unless-stopped + + mysqld-exporter: + image: prom/mysqld-exporter:v0.14.0 + container_name: mysqld-exporter + environment: + - DATA_SOURCE_NAME=exporter:${MYSQL_EXPORTER_PASSWORD}@(mysql:3306)/danchu + depends_on: + mysql: + condition: service_healthy + networks: + - danchu-network + restart: unless-stopped + + redis-exporter: + image: oliver006/redis_exporter:v1.67.0 + container_name: redis-exporter + environment: + - REDIS_ADDR=redis:6379 + depends_on: + redis: + condition: service_healthy + networks: + - danchu-network restart: unless-stopped networks: @@ -85,4 +144,5 @@ networks: volumes: mysql-data: - redis-data: \ No newline at end of file + redis-data: + grafana-storage: \ No newline at end of file diff --git a/prometheus.yml b/prometheus.yml new file mode 100644 index 0000000..5cbef93 --- /dev/null +++ b/prometheus.yml @@ -0,0 +1,49 @@ +global: + scrape_interval: 5s + evaluation_interval: 5s + scrape_timeout: 4s + +scrape_configs: + # Prometheus + - job_name: 'prometheus' + static_configs: + - targets: ['prometheus:9090'] + labels: + application: prometheus + service: prometheus + + # Spring Boot + - job_name: 'danchu' + metrics_path: /actuator/prometheus + static_configs: + - targets: ['app:8080'] + labels: + application: danchu + service: app + component: spring-boot + + # node-exporter + - job_name: 'node-exporter' + static_configs: + - targets: ['node-exporter:9100'] + labels: + application: danchu + service: node-exporter + + # MySQL + - job_name: 'mysql' + static_configs: + - targets: ['mysqld-exporter:9104'] + labels: + application: danchu + service: mysql + component: exporter + + # Redis + - job_name: 'redis' + static_configs: + - targets: ['redis-exporter:9121'] + labels: + application: danchu + service: redis + component: exporter \ No newline at end of file