Cara Monitoring Java Spring Boot dengan Micrometer, Prometheus dan Grafana

Yusuf Fachroni
5 min readMar 12, 2021

--

contoh monitoring pada 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.

Endpoint actuator aktif, kita bisa mengakses beberapa fungsi pada daftar link endpoint yang ditampilkan

Buat sebuah file bernama prometheus.yml dengan isi berikut

global:
scrape_interval: 10s
scrape_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:
- c0deslinger
networks:
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?

--

--

Yusuf Fachroni
Yusuf Fachroni

Written by Yusuf Fachroni

Programmer, Illustrator, Kamen Rider

No responses yet