15 - Spring Boot Micrometer

03/03/2025 - 3 phút

Follow  on Google News

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ả!