Cara Monitoring Java Spring Boot dengan Micrometer, Prometheus dan Grafana
Dalam lingkup dunia programming, pasti semuanya pernah mengalami masa-masa dimana servicenya mengalami kendala pada performa, mulai dari naiknya CPU, Memory, dan sebagainya, sehingga mengakibatkan service mengalami penurunan jumlah traksaksi per detik (TPS) atau bahkan sampai hang.
Banyak faktor yang menyebabkan menurunnya performa sebuah service, mulai dari faktor eksternal seperti kondisi kesehatan server dan jaringan, juga faktor internal yaitu pada service itu sendiri.
Monitoring adalah hal yang sangat penting untuk mengetahui metrics dan health service kita pada server lab maupun production, sehingga apabila terjadi penurunan performa kita bisa lebih mudah untuk mencari tahu pola yg membuat aplikasi tidak berjalan secara optimal, serta memberi tahu jika terjadi perilaku yang tidak wajar, untuk itulah kita perlu menambahkan fitur monitoring pada service kita, salah satunya menggunakan Micrometer, Prometheus, dan Grafana. Micrometer untuk mengekspos metrics pada aplikasi kita, Prometheus untuk menampung metrics data, dan Grafana untuk mempermudah membaca metricsnya dengan memvisualisasikan pada tampilan grafis.
Disini kita akan belajar cara setup Micrometer, Prometheus dan Grafana pada service Java Spring boot, pastikan anda sudah punya terbiasa dalam membuat aplikasi Java menggunakan framework Spring Boot serta menjalankan docker.
Pertama, tambahkan dependency Prometheus dan Springboot Actuator di pom.xml
<! — spring actuator →
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency><! — micrometer →
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
Kemudian tambahkan baris berikut di application.properties, anda bisa melimitasi beberapa sesuai dengan kebutuhan misal health, info, metric, dll. Namun disini kita akan melakukan include all
management.endpoints.web.exposure.include=*
Jalankan modul java, dan cek pada endpoint actuator. Disini port tomcat http server saya ubah ke port 5000 karena port default (8080) sudah digunakan pada program lain.
Buat sebuah file bernama prometheus.yml dengan isi berikut
global:
scrape_interval: 10sscrape_configs:
- job_name: 'spring_micrometer'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
static_configs:
- targets: ['192.168.1.10:5000']
Disini kita akan mengkonfigurasikan endpoint target yang akan di scrape, yaitu url http actuator pada service java kita (192.168.1.10:5000). Kemudian buat file docker-compose.prometheus-grafana.yml dengan isi berikut
version: "3.7"
services:
# -------------------
# PROMETHEUS
# -------------------
prometheus:
container_name: prometheus
image: prom/prometheus
ports:
- 9090:9090
volumes:
- $PWD/prometheus.yml:/etc/prometheus/prometheus.yml
environment:
TZ: Asia/Jakarta
networks:
- c0deslinger # -------------------
# GRAFANA
# -------------------
grafana:
container_name: grafana
image: grafana/grafana
ports:
- 9100:3000
environment:
TZ: Asia/Jakarta
networks:
- c0deslingernetworks:
c0deslinger:
name: c0deslinger
Pastikan kedua file tersebut berada di dalam folder yang sama, lalu jalankan docker Prometheus dan Grafana dengan perintah
docker-compose -f docker-compose.prometheus-grafana.yml up -d
Cek endpoint Prometheus, lalu masuk ke tab Status > Targets. Disini kita bisa melihat bahwa Prometheus dan Actuator berhasil terkoneksi
Selanjutnya kita coba cek endpoint grafana
Saat pertama kali login, masukkan user & password admin:admin, kemudian nanti akan muncul form lagi untuk mengatur ulang password, anda bisa memasukkan password baru atau skip. Berikut adalah tampilan dashboard pertama kali masuk ke Grafana.
Selanjutnya mari kita atur dashboard untuk monitor program kita. pertama-tama, masuk ke Configuration > Data Source. Klik add datasource, lalu pilih Prometheus.
Pada form ini, kita perlu mengisi url Prometheus. Pada file docker compose yang kita gunakan sebelumnya, kita sudah mengatur agar container Prometheus dan Grafana berjalan di satu network yang sama, yaitu network c0deslinger, sehingga kita bisa memanggil endpoint Prometheus berdasarkan nama container
Setelah itu klik tombol Save & Test, dan pastikan muncul notifikasi “Data source is working”
Selanjutnya kita buat dashboard, masuk ke menu Dashboard > Manage
Buat panel
Selanjutnya, di menu ini kita bisa menambahkan metric apa saja yg akan di monitor, misal kita menambahkan process cpu usage
Selanjutnya simpan dashboard, beri nama sesuai project atau konteks dari project tersebut
Sehingga pada dashboard akan muncul display yg sudah kita tambahkan tadi
Kita juga bisa menambahkan dan mengubah nama panel agar mudah dalam memonitor program kita
Selain itu, kita juga bisa menggunakan template dashboard yang sudah tersedia di website Grafana Community, sehingga kita bisa memonitor secara langsung tanpa repot-repot membuat panel satu-satu. Berhubung disini kita menggunakan Java Springboot, kita bisa menggunakan template dashboard ini
Klik download JSON di pojok kanan bawah, lalu kita import ke Grafana.
Dan berikut hasilnya, mudah bukan?