在Spring Boot應用中,通過整合Actuator、Prometheus和Grafana可以構建完整的監控體系,實現指標采集、存儲和可視化。以下是具體實現步驟:
一、Spring Boot Actuator 配置
作用:暴露應用健康指標、性能數據等監控端點。
1. 添加依賴
xml
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
2. 配置Actuator端點(application.yml)
yaml
management:endpoints:web:exposure:include: "health,info,prometheus" # 暴露Prometheus格式指標endpoint:health:show-details: alwaysprometheus:enabled: truemetrics:export:prometheus:enabled: truetags: # 自定義全局標簽(如應用名)application: my-spring-app
3. 驗證端點
訪問?http://localhost:8080/actuator/prometheus
,查看原始指標數據。
二、Prometheus 配置
作用:定時抓取Spring Boot的指標數據并存儲。
1. 安裝Prometheus
bash
docker run -d --name prometheus -p 9090:9090 prom/prometheus
2. 配置抓取目標(prometheus.yml)
yaml
scrape_configs:- job_name: 'spring-boot-app'scrape_interval: 15smetrics_path: '/actuator/prometheus'static_configs:- targets: ['host.docker.internal:8080'] # Docker中訪問宿主機labels:application: 'my-spring-app'
3. 重啟Prometheus
bash
docker restart prometheus
4. 驗證數據抓取
訪問?http://localhost:9090/targets
,確保狀態為 ?UP。
三、Grafana 配置
作用:可視化展示Prometheus中的監控數據。
1. 安裝Grafana
bash
docker run -d --name grafana -p 3000:3000 grafana/grafana
2. 添加數據源
- 登錄Grafana(默認賬號:admin/admin)。
- ?Configuration > Data Sources > Add data source,選擇 ?Prometheus。
- 配置URL:
http://host.docker.internal:9090
(Docker環境)。
3. 導入儀表盤模板
- ?Create > Import,輸入官方模板ID:
4701
(JVM監控)或?11378
(Spring Boot)。 - 選擇數據源為Prometheus,調整時間范圍和刷新頻率。
四、自定義監控指標
通過Micrometer注冊自定義業務指標:
1. 注冊計數器
java
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;@RestController
public class MyController {private final Counter apiCounter;public MyController(MeterRegistry registry) {apiCounter = Counter.builder("api.requests.total").description("Total API requests").tag("endpoint", "/my-api").register(registry);}@GetMapping("/my-api")public String myApi() {apiCounter.increment();return "OK";}
}
2. 在Grafana中查詢
使用PromQL查詢自定義指標:
promql
sum(rate(api_requests_total[5m])) by (endpoint)
五、安全加固(可選)
1. 保護Actuator端點
java
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/actuator/health").permitAll().antMatchers("/actuator/**").hasRole("ADMIN").and().httpBasic();}
}
2. Prometheus認證
在prometheus.yml
中配置Basic Auth:
yaml
basic_auth:username: adminpassword: secret
六、監控指標示例
- ?JVM監控:
- 內存使用:
jvm_memory_used_bytes
- 線程數:
jvm_threads_live
- 內存使用:
- ?HTTP請求:
- QPS:
http_server_requests_seconds_count
- 延遲:
http_server_requests_seconds_sum
- QPS:
- ?系統資源:
- CPU使用率:
system_cpu_usage
- 磁盤空間:
disk_free_bytes
- CPU使用率:
七、優化與告警
- ?Grafana Alerting:設置閾值觸發通知(如CPU > 80%)。
- ?Alertmanager集成:配置郵件、Slack等通知渠道。
- ?日志聯動:結合ELK或Loki實現日志與指標關聯分析。
通過以上步驟,可快速搭建Spring Boot應用的監控可視化平臺,實時掌握應用健康狀態和性能瓶頸。