**Mengimplementasikan Metrik Kustom di Aplikasi Spring Boot untuk Prometheus**

Joniss - Feb 25 - - Dev Community

Dalam pengembangan aplikasi modern, terutama yang menggunakan arsitektur mikroservis, pemantauan (monitoring) adalah aspek kritis untuk memastikan kesehatan dan kinerja sistem. Prometheus adalah salah satu alat monitoring yang paling populer, dan Spring Boot menyediakan dukungan yang kuat untuk mengintegrasikan metrik aplikasi dengan Prometheus. Artikel ini akan membahas cara mengimplementasikan metrik kustom di aplikasi Spring Boot dan mengeksposnya ke Prometheus menggunakan spring-boot-starter-actuator dan micrometer-registry-prometheus.


Apa Itu Metrik Kustom?

Metrik kustom adalah metrik yang Anda definisikan sendiri untuk memantau aspek spesifik dari aplikasi Anda. Misalnya, Anda mungkin ingin melacak jumlah permintaan tertentu, waktu respons, atau jumlah entitas yang diproses. Dengan metrik kustom, Anda dapat mengumpulkan data yang relevan dengan bisnis atau aplikasi Anda dan memvisualisasikannya menggunakan alat seperti Prometheus dan Grafana.


Mengapa Menggunakan spring-boot-starter-actuator dan micrometer-registry-prometheus?

spring-boot-starter-actuator

Dependency ini menambahkan fitur siap produksi ke aplikasi Spring Boot, termasuk:

  • Pemantauan: Memantau kesehatan aplikasi, metrik, dan informasi lainnya.
  • Endpoint Actuator: Menyediakan endpoint seperti /actuator/health, /actuator/metrics, dan /actuator/prometheus untuk mengakses data pemantauan.

micrometer-registry-prometheus

Pustaka ini memungkinkan aplikasi Spring Boot untuk mengekspos metrik dalam format yang kompatibel dengan Prometheus. Dengan ini, Anda dapat:

  • Mengekspos metrik aplikasi ke Prometheus melalui endpoint /actuator/prometheus.
  • Mengintegrasikan metrik aplikasi dengan sistem monitoring berbasis Prometheus.

Langkah-langkah Implementasi Metrik Kustom

1. Menambahkan Dependensi

Tambahkan dependensi berikut ke file pom.xml atau build.gradle aplikasi Spring Boot Anda:

<dependencies>
    <!-- Spring Boot Actuator -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!-- Micrometer Prometheus Registry -->
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-registry-prometheus</artifactId>
    </dependency>
</dependencies>

Enter fullscreen mode Exit fullscreen mode

2. Mengaktifkan Endpoint Actuator

Konfigurasikan aplikasi Spring Boot untuk mengekspos endpoint Actuator, termasuk endpoint Prometheus. Tambahkan konfigurasi berikut ke file application.yml atau application.properties:

management:
  endpoints:
    web:
      exposure:
        include: health, metrics, prometheus
  metrics:
    export:
      prometheus:
        enabled: true

Enter fullscreen mode Exit fullscreen mode

3. Membuat Metrik Kustom

Anda dapat membuat metrik kustom menggunakan Micrometer, yang terintegrasi dengan Spring Boot. Berikut adalah contoh membuat metrik kustom untuk melacak jumlah permintaan tertentu:

a. Membuat Counter

Counter digunakan untuk melacak jumlah kejadian tertentu, seperti jumlah permintaan ke endpoint tertentu.

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Service;

@Service
public class CustomMetricsService {

    private final Counter customCounter;

    public CustomMetricsService(MeterRegistry registry) {
        this.customCounter = Counter.builder("custom.requests.count")
                .description("Jumlah permintaan kustom")
                .tag("type", "custom")
                .register(registry);
    }

    public void incrementCounter() {
        customCounter.increment();
    }
}

Enter fullscreen mode Exit fullscreen mode

b. Membuat Timer

Timer digunakan untuk mengukur durasi suatu operasi, seperti waktu respons endpoint.

import io.micrometer.core.instrument.Timer;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Service;

@Service
public class CustomMetricsService {

    private final Timer customTimer;

    public CustomMetricsService(MeterRegistry registry) {
        this.customTimer = Timer.builder("custom.requests.timer")
                .description("Waktu respons permintaan kustom")
                .tag("type", "custom")
                .register(registry);
    }

    public void recordTimer(Runnable task) {
        customTimer.record(task);
    }
}

Enter fullscreen mode Exit fullscreen mode

4. Menggunakan Metrik Kustom di Controller

Anda dapat menggunakan metrik kustom di controller untuk melacak permintaan atau operasi tertentu.

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class CustomController {

    private final CustomMetricsService customMetricsService;

    public CustomController(CustomMetricsService customMetricsService) {
        this.customMetricsService = customMetricsService;
    }

    @GetMapping("/custom-endpoint")
    public String customEndpoint() {
        // Increment counter
        customMetricsService.incrementCounter();

        // Record timer
        customMetricsService.recordTimer(() -> {
            // Simulasi operasi yang memakan waktu
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        });

        return "Custom endpoint called!";
    }
}

Enter fullscreen mode Exit fullscreen mode

5. Mengekspos Metrik ke Prometheus

Setelah mengimplementasikan metrik kustom, metrik tersebut akan otomatis tersedia di endpoint /actuator/prometheus. Prometheus dapat mengumpulkan metrik ini dengan mengkonfigurasi target scrape ke endpoint tersebut.

Contoh output dari /actuator/prometheus:

# HELP custom_requests_count Jumlah permintaan kustom
# TYPE custom_requests_count counter
custom_requests_count{type="custom",} 5.0

# HELP custom_requests_timer Waktu respons permintaan kustom
# TYPE custom_requests_timer summary
custom_requests_timer_count{type="custom",} 3.0
custom_requests_timer_sum{type="custom",} 300.0

Enter fullscreen mode Exit fullscreen mode

Mengintegrasikan dengan Prometheus dan Grafana

1. Konfigurasi Prometheus

Tambahkan target scrape ke aplikasi Spring Boot di file prometheus.yml:

scrape_configs:
  - job_name: 'spring_boot_app'
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['localhost:8080']  # Ganti dengan alamat aplikasi Anda

Enter fullscreen mode Exit fullscreen mode

2. Membuat Dashboard di Grafana

  1. Tambahkan Prometheus sebagai data source di Grafana.
  2. Buat dashboard baru dan tambahkan panel untuk memvisualisasikan metrik kustom.
    • Contoh query untuk counter: custom_requests_count.
    • Contoh query untuk timer: rate(custom_requests_timer_sum[1m]).

Kesimpulan

Dengan menggunakan spring-boot-starter-actuator dan micrometer-registry-prometheus, Anda dapat dengan mudah mengimplementasikan metrik kustom di aplikasi Spring Boot dan mengeksposnya ke Prometheus. Metrik kustom memungkinkan Anda untuk memantau aspek spesifik dari aplikasi Anda, memberikan wawasan yang lebih mendalam tentang kinerja dan kesehatan sistem. Integrasi dengan Prometheus dan Grafana memungkinkan Anda untuk memvisualisasikan dan menganalisis metrik ini secara real-time, membantu Anda merespons masalah dengan cepat dan memastikan aplikasi berjalan dengan optimal.


Referensi dan Bacaan Lebih Lanjut

Dengan mempelajari lebih lanjut melalui referensi di atas, Anda dapat memperdalam pemahaman tentang pemantauan dan observability dalam aplikasi Spring Boot.

. . . . . . . .