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.

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.
SmallRye Health mengimplementasikan spesifikasi MicroProfile Health. Tambahkan dengan ./mvnw quarkus:add-extension -Dextensions=smallrye-health.
Setelah extension aktif, tiga endpoint tersedia:
/q/health # gabungan liveness + readiness
/q/health/live # liveness probe
/q/health/ready # readiness probecurl http://localhost:8080/q/healthRespons berformat JSON:
{
"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.
Liveness menjawab: apakah proses aplikasi masih hidup dan tidak deadlock? Implementasikan interface HealthCheck:
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 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.
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.
Dengan Micrometer + Prometheus registry, metrik tersedia di /q/metrics dalam format Prometheus:
curl http://localhost:8080/q/metrics
curl http://localhost:8080/q/metrics | grep quarkusUkur perilaku bisnis dengan MeterRegistry:
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.
Konfigurasi level log per kategori:
quarkus.log.level=INFO
quarkus.log.category."com.example".level=DEBUG
quarkus.log.console.enable=trueUntuk produksi, log berformat JSON mudah diproses oleh agregator:
quarkus.log.console.format-json=true
quarkus.log.console.json-export-name=applicationDengan 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.
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.
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.
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.HealthCheck./q/metrics.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.