From 32710c2e061f9047e68089626559fa8d386bd22f Mon Sep 17 00:00:00 2001 From: Zhou Weidong <502333560@qq.com> Date: Wed, 21 Oct 2026 06:28:11 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8E=A5=E5=85=A5=20Prometheus=20?= =?UTF-8?q?=E7=9B=91=E6=8E=A7=EF=BC=88=E6=94=BE=E8=A1=8C=20/actuator/prome?= =?UTF-8?q?theus=20+=20=E6=8C=87=E6=A0=87=E6=9A=B4=E9=9C=B2=20+=20compose?= =?UTF-8?q?=20=E7=BC=96=E6=8E=92=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 27 +++++++++++++++++++ .../src/main/resources/application.yml | 12 +++++++++ .../src/main/resources/application.yml | 12 +++++++++ .../framework/security/SecurityConfig.java | 5 ++-- prometheus.yml | 16 +++++++++++ 5 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 prometheus.yml diff --git a/docker-compose.yml b/docker-compose.yml index 3b0b1e8..3301837 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -145,7 +145,34 @@ services: start_period: 40s retries: 3 + # ─────────── 监控 ─────────── + prometheus: + image: prom/prometheus:latest + container_name: fruitshorts-prometheus + restart: unless-stopped + ports: + - "9090:9090" + volumes: + - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro + - prometheus-data:/prometheus + command: + - "--config.file=/etc/prometheus/prometheus.yml" + + grafana: + image: grafana/grafana:latest + container_name: fruitshorts-grafana + restart: unless-stopped + ports: + - "3000:3000" + volumes: + - grafana-data:/var/lib/grafana + environment: + - GF_SECURITY_ADMIN_USER=admin + - GF_SECURITY_ADMIN_PASSWORD=admin + volumes: # 命名卷:跟着 compose 项目走,`docker compose down -v` 才会删 db-data: redis-data: + prometheus-data: + grafana-data: diff --git a/fruitshorts-admin-api/src/main/resources/application.yml b/fruitshorts-admin-api/src/main/resources/application.yml index 3202aef..29fcfa8 100644 --- a/fruitshorts-admin-api/src/main/resources/application.yml +++ b/fruitshorts-admin-api/src/main/resources/application.yml @@ -66,3 +66,15 @@ springdoc: logging: level: com.fruitshorts: debug + +management: + endpoints: + web: + exposure: + include: prometheus,health + endpoint: + health: + show-details: always + metrics: + tags: + application: ${spring.application.name} diff --git a/fruitshorts-app-api/src/main/resources/application.yml b/fruitshorts-app-api/src/main/resources/application.yml index 9fa1bbe..c43fa8f 100644 --- a/fruitshorts-app-api/src/main/resources/application.yml +++ b/fruitshorts-app-api/src/main/resources/application.yml @@ -97,3 +97,15 @@ fruitshorts: logging: level: com.fruitshorts: info + +management: + endpoints: + web: + exposure: + include: prometheus,health + endpoint: + health: + show-details: always + metrics: + tags: + application: ${spring.application.name} diff --git a/fruitshorts-framework/src/main/java/com/fruitshorts/framework/security/SecurityConfig.java b/fruitshorts-framework/src/main/java/com/fruitshorts/framework/security/SecurityConfig.java index 9731823..34c7f8f 100644 --- a/fruitshorts-framework/src/main/java/com/fruitshorts/framework/security/SecurityConfig.java +++ b/fruitshorts-framework/src/main/java/com/fruitshorts/framework/security/SecurityConfig.java @@ -53,9 +53,10 @@ public class SecurityConfig { "/swagger-ui/**", "/swagger-ui.html", "/v3/api-docs/**", - /* 健康检查:给容器编排与冒烟脚本用(本项目没引 actuator,见 HealthController 注释) */ + /* 健康检查与监控:/actuator/health 给容器编排,/actuator/prometheus 给 Prometheus 抓取指标 */ "/healthz", - "/actuator/health" + "/actuator/health", + "/actuator/prometheus" }; private final JwtAuthenticationFilter jwtAuthenticationFilter; diff --git a/prometheus.yml b/prometheus.yml new file mode 100644 index 0000000..bd743fb --- /dev/null +++ b/prometheus.yml @@ -0,0 +1,16 @@ +# Author: fruit.com.cn +# Prometheus 抓取配置:抓取后端双服务的 actuator 指标(服务名走 compose 网络) +global: + scrape_interval: 15s + evaluation_interval: 15s + +scrape_configs: + - job_name: "fruitshorts-app-api" + metrics_path: "/actuator/prometheus" + static_configs: + - targets: ["app-api:8081"] + + - job_name: "fruitshorts-admin-api" + metrics_path: "/actuator/prometheus" + static_configs: + - targets: ["admin-api:8080"]