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>
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
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();
}
}
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);
}
}
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!";
}
}
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
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
2. Membuat Dashboard di Grafana
- Tambahkan Prometheus sebagai data source di Grafana.
- 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])
.
- Contoh query untuk counter:
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
- Dokumentasi Resmi Spring Boot Actuator
- Dokumentasi Resmi Micrometer
- Dokumentasi Resmi Prometheus
- Panduan Grafana untuk Prometheus
Dengan mempelajari lebih lanjut melalui referensi di atas, Anda dapat memperdalam pemahaman tentang pemantauan dan observability dalam aplikasi Spring Boot.