15 - Spring Boot Micrometer
03/03/2025 - 3 phút
Trong bài viết này, chúng ta sẽ tìm hiểu về Spring Boot Micrometer, cách theo dõi và đo lường hiệu suất ứng dụng.
1. Giới Thiệu
Trong hệ thống microservices và ứng dụng hiện đại, giám sát và theo dõi hiệu suất là yếu tố quan trọng giúp đảm bảo độ ổn định và tối ưu hóa hiệu suất. Spring Boot Micrometer là một thư viện mạnh mẽ giúp tích hợp giám sát hiệu suất dễ dàng với các công cụ như:
- Prometheus (thu thập và giám sát metric).
- Grafana (hiển thị dashboard trực quan).
- New Relic, Datadog, CloudWatch (theo dõi logs và hiệu suất ứng dụng).
Trong bài viết này, chúng ta sẽ tìm hiểu về Spring Boot Micrometer, cách cài đặt, cấu hình metric, và tích hợp với Prometheus và Grafana.
2. Cài Đặt Spring Boot Micrometer
2.1. Thêm Dependency
Spring Boot hỗ trợ Micrometer thông qua Spring Boot Actuator. Thêm vào pom.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.2. Kích Hoạt Actuator Và Micrometer
Cấu hình application.properties
:
management.endpoints.web.exposure.include=health,metrics,prometheus
management.metrics.export.prometheus.enabled=true
- management.endpoints.web.exposure.include: Mở các endpoint Actuator.
- management.metrics.export.prometheus.enabled: Bật Prometheus metric.
Sau khi cấu hình, bạn có thể truy cập các metric tại:
http://localhost:8080/actuator/prometheus
3. Tích Hợp Custom Metrics Với Micrometer
3.1. Đo Lường Request API
Tạo MetricService.java
để ghi nhận metric custom:
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Service;
@Service
public class MetricService {
private final MeterRegistry meterRegistry;
public MetricService(MeterRegistry meterRegistry) {
this.meterRegistry = meterRegistry;
}
public void trackCustomMetric() {
meterRegistry.counter("custom_metric_counter").increment();
}
}
- MeterRegistry giúp ghi nhận metric.
- counter() tạo một bộ đếm số lần API được gọi.
3.2. Thêm Metric Vào REST Controller
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/metrics")
public class MetricController {
private final MetricService metricService;
public MetricController(MetricService metricService) {
this.metricService = metricService;
}
@GetMapping("/custom")
public String increaseMetric() {
metricService.trackCustomMetric();
return "Metric counter increased!";
}
}
Truy cập API:
http://localhost:8080/metrics/custom
Sau đó kiểm tra metric tại:
http://localhost:8080/actuator/prometheus
4. Tích Hợp Micrometer Với Prometheus & Grafana
4.1. Chạy Prometheus Với Docker
Tạo file prometheus.yml
:
scrape_configs:
- job_name: 'spring-boot-app'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['host.docker.internal:8080']
Chạy Prometheus bằng Docker:
docker run -d --name=prometheus -p 9090:9090 -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
Truy cập Prometheus tại:
http://localhost:9090
4.2. Chạy Grafana Để Hiển Thị Dashboard
Chạy Grafana với Docker:
docker run -d --name=grafana -p 3000:3000 grafana/grafana
Truy cập Grafana tại:
http://localhost:3000
- Đăng nhập với admin/admin.
- Thêm Prometheus làm nguồn dữ liệu (
http://localhost:9090
). - Import dashboard
Spring Boot Micrometer
từ Grafana Dashboards.
5. Tối Ưu Hiệu Suất Với Micrometer
5.1. Giới Hạn Số Lượng Metrics
Giảm tải bằng cách chỉ mở những metric cần thiết:
management.metrics.export.prometheus.step=10s
management.metrics.tags.application=spring-boot-app
- step=10s: Giảm tần suất gửi dữ liệu.
- tags.application: Thêm nhãn cho metric.
5.2. Giám Sát HTTP Request Time
@Bean
public WebMvcMetricsFilter webMvcMetricsFilter(MeterRegistry meterRegistry) {
return new WebMvcMetricsFilter(meterRegistry, new DefaultWebMvcTagsProvider(), "http_requests", true);
}
Lệnh PromQL để kiểm tra request time:
rate(http_server_requests_seconds_sum[5m]) / rate(http_server_requests_seconds_count[5m])
5.3. Giám Sát Memory & CPU
Sử dụng metric có sẵn:
rate(system_cpu_usage[5m])
6. Kết Luận
Spring Boot Micrometer giúp giám sát hiệu suất ứng dụng, tích hợp dễ dàng với Prometheus & Grafana.
Tóm tắt:
- Micrometer giúp theo dõi metric hệ thống như CPU, memory, request API.
- Tích hợp với Prometheus và Grafana để trực quan hóa dữ liệu.
- Tối ưu hiệu suất bằng cách giới hạn metric và tối ưu PromQL.
👉 Trong bài viết tiếp theo, chúng ta sẽ tìm hiểu về Spring Boot OpenTelemetry, giúp theo dõi và tracing ứng dụng hiệu quả!