Belajar Quarkus - Observability & Health
Episode 9 of 24

Belajar Quarkus - Observability & Health

Episode ini membahas observability di Quarkus: SmallRye Health untuk liveness dan readiness probes, SmallRye Metrics dan Micrometer, konfigurasi logging dan structured logging, serta pembuatan custom health checks.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Aplikasi yang berjalan di produksi tanpa observability seperti terbang tanpa instrumen. Kalian tidak tahu apakah aplikasi sehat, lambat, atau menolak koneksi — sampai pengguna mengeluh. Observability menjawab tiga pertanyaan dasar: apakah aplikasi hidup, apakah siap menerima traffic, dan seberapa baik kinerjanya.

Episode 9 membahas fondasi observability Quarkus: SmallRye Health untuk liveness dan readiness probes, SmallRye Metrics dan Micrometer untuk pengukuran, konfigurasi logging dan structured logging, serta pembuatan custom health checks.

Quarkus SmallRye Health untuk Probes

Menambahkan Extension

SmallRye Health mengimplementasikan spesifikasi MicroProfile Health. Tambahkan dengan ./mvnw quarkus:add-extension -Dextensions=smallrye-health.

Endpoint Health

Setelah extension aktif, tiga endpoint tersedia:

Endpoint health Quarkus
/q/health       # gabungan liveness + readiness
/q/health/live  # liveness probe
/q/health/ready # readiness probe
Cek health check
curl http://localhost:8080/q/health

Respons berformat JSON:

Respons health check
{
  "status": "UP",
  "checks": [
    {
      "name": "SmallRye Reactive Messaging - liveness check",
      "status": "UP"
    }
  ]
}

Perintah curl http://localhost:8080/q/health mengembalikan status agregat. Kubernetes memakai /q/health/live untuk liveness probe dan /q/health/ready untuk readiness probe.

Custom Health Checks

Liveness Check

Liveness menjawab: apakah proses aplikasi masih hidup dan tidak deadlock? Implementasikan interface HealthCheck:

JavaCustom liveness check
import io.smallrye.health.api.HealthCheck;
import org.eclipse.microprofile.health.HealthCheckResponse;
import org.eclipse.microprofile.health.Liveness;
import jakarta.enterprise.context.ApplicationScoped;
 
@Liveness
@ApplicationScoped
public class LivenessCheck implements HealthCheck {
 
    @Override
    public HealthCheckResponse call() {
        return HealthCheckResponse.up("aplikasi-hidup");
    }
}

Method call() mengembalikan HealthCheckResponse.up("aplikasi-hidup") saat sehat. Annotation @Liveness menandai check ini masuk ke probe liveness.

Readiness Check

Readiness menjawab: apakah aplikasi siap menerima traffic? Implementasikan HealthCheck dengan annotation @Readiness, lalu kembalikan HealthCheckResponse.up("database") saat dependensi seperti database siap dan down saat bermasalah. Kubernetes berhenti mengirim traffic ke pod yang readiness-nya down, sementara liveness tetap up selama proses hidup sehingga pod tidak di-restart sia-sia.

SmallRye Metrics dan Micrometer Integration

Menambahkan Extension

Quarkus mendukung dua API metrik: SmallRye Metrics (MicroProfile) dan Micrometer. Micrometer adalah pilihan modern yang terintegrasi dengan banyak backend; tambahkan dengan ./mvnw quarkus:add-extension -Dextensions=micrometer-registry-prometheus.

Endpoint Metrik

Dengan Micrometer + Prometheus registry, metrik tersedia di /q/metrics dalam format Prometheus:

Baca metrik aplikasi
curl http://localhost:8080/q/metrics
curl http://localhost:8080/q/metrics | grep quarkus

Metrik Kustom

Ukur perilaku bisnis dengan MeterRegistry:

JavaCounter metrik kustom
import io.micrometer.core.instrument.MeterRegistry;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
 
@ApplicationScoped
public class OrderService {
 
    @Inject
    MeterRegistry registry;
 
    public void buatOrder() {
        registry.counter("orders.created").increment();
    }
}

registry.counter("orders.created").increment() menambah counter setiap order dibuat. Metrik ini muncul di /q/metrics dan bisa ditarik Prometheus untuk alerting.

Logging dan Structured Logging

Konfigurasi Logging

Konfigurasi level log per kategori:

Konfigurasi logging
quarkus.log.level=INFO
quarkus.log.category."com.example".level=DEBUG
quarkus.log.console.enable=true

Structured Logging JSON

Untuk produksi, log berformat JSON mudah diproses oleh agregator:

Logging JSON
quarkus.log.console.format-json=true
quarkus.log.console.json-export-name=application

Dengan format-json=true, setiap baris log menjadi objek JSON yang berisi timestamp, level, logger, dan pesan. Ini mempermudah parsing otomatis dan querying log di sistem terpusat.

Logging dari Kode

Dari kode, gunakan org.jboss.logging.Logger dengan pola LOG.info("Order baru dibuat") dan LOG.debugf("Detail order: %s", id). Log terstruktur ini mengikuti konfigurasi global.

Monitoring dan Integrasi

Kombinasi health probes dan metrik adalah fondasi monitoring. Di deployment Kubernetes, pasang livenessProbe dengan path /q/health/live dan readinessProbe dengan path /q/health/ready, keduanya pada port 8080. Kubernetes merestart pod yang gagal liveness dan menghentikan traffic ke pod yang gagal readiness; metrik dari /q/metrics di-scrape Prometheus untuk alerting dan dashboard.

Penutup

Episode 9 membuat aplikasi kalian terlihat jelas dari luar: memahami SmallRye Health dengan liveness dan readiness probes, membuat custom health checks, memakai SmallRye Metrics dan Micrometer untuk metrik kustom, serta mengonfigurasi logging terstruktur untuk produksi.

Inti yang harus dibawa pulang:

  • /q/health, /q/health/live, dan /q/health/ready disediakan SmallRye Health.
  • Liveness menandakan proses hidup; readiness menandakan siap menerima traffic.
  • Custom check dibuat dengan interface HealthCheck.
  • Micrometer + Prometheus mengekspos metrik di /q/metrics.
  • Counter dan timer kustom menambah visibilitas perilaku bisnis.
  • Structured logging JSON mempermudah agregasi log terpusat.

Di episode 10 selanjutnya kita akan membahas transaction dan persistence advanced — manajemen transaksi dengan Narayana/JTA, propagation behavior dan rollback, optimasi JPA, fetch strategy dan caching, serta database migrations dengan Flyway atau Liquibase.

Belajar Quarkus - Observability & Health | Belajar Quarkus