Belajar Java - Monitoring, Observability & Production Support
Series/Belajar Java/Episode 22
Episode 22 of 24

Belajar Java - Monitoring, Observability & Production Support

Episode ini membahas observability dan production support: metrik JVM dan pengumpulan metrik dengan Micrometer, log management dan structured logging, distributed tracing dengan OpenTelemetry dan Grafana, health check dan readiness probe, serta incident response dan SLO.

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

Pendahuluan

Aplikasi di produksi butuh mata yang melihat ke dalam. Episode 22 membahas monitoring, observability, dan production support: metrik JVM dengan Micrometer, log management dan structured logging, distributed tracing dengan OpenTelemetry, serta health check, readiness probe, incident response, dan SLO.

Observability menjawab tiga pertanyaan: apa yang terjadi, mengapa terjadi, dan bagaimana memperbaikinya. Kalian akan membangun sistem yang membuat aplikasi bisa diamati dan dikelola dengan baik di produksi.

Metrik JVM dan Pengumpulan Metrik dengan Micrometer

Mengapa Metrik Penting

Metrik adalah angka terukur tentang perilaku aplikasi: CPU, memori, heap, jumlah thread, dan GC pause. Metrik memberi gambaran kesehatan aplikasi dari waktu ke waktu.

Micrometer sebagai Facade

Micrometer menyediakan API metrik terpadu yang bisa diekspor ke berbagai backend (Prometheus, Datadog, Grafana Cloud). Tambahkan dependency:

Dependency Micrometer
<dependency>
  <groupId>io.micrometer</groupId>
  <artifactId>micrometer-core</artifactId>
  <version>1.13.3</version>
</dependency>

Membuat Metrik Kustom

Buat counter dan timer sederhana:

Metrik kustom dengan Micrometer
import io.micrometer.core.instrument.*;
 
public class MetrikApp {
    private final Counter requestCounter;
 
    public MetrikApp(MeterRegistry registry) {
        this.requestCounter = Counter.builder("app.request.total")
                .description("Total request masuk")
                .register(registry);
    }
 
    public void handleRequest() {
        requestCounter.increment();
    }
}

Counter.builder("app.request.total") mendaftarkan metrik yang bertambah setiap request.

Log Management dan Structured Logging

Structured Logging

Structured logging menulis log dalam format terstruktur (JSON) sehingga mudah dicari dan dianalisis. Dengan SLF4J dan Logback, output JSON memuat field seperti timestamp, level, dan message:

Logging dengan SLF4J
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
public class Layanan {
    private static final Logger log = LoggerFactory.getLogger(Layanan.class);
 
    public void proses(String id) {
        log.info("Memproses pesanan dengan id {}", id);
    }
}

log.info("Memproses pesanan dengan id {}", id) memakai parameterized logging — hindari concatenation string.

Log Management

Kumpulkan log dari banyak layanan ke satu tempat: ELK Stack (Elasticsearch, Logstash, Kibana) atau Loki + Grafana. Konsolidasi log membuat troubleshooting lintas layanan menjadi mungkin.

Distributed Tracing dengan OpenTelemetry dan Grafana

Mengapa Distributed Tracing

Di microservices, satu request melintasi banyak layanan. Distributed tracing melacak perjalanan request itu dengan traceId dan spanId, sehingga kalian bisa melihat di mana waktu dihabiskan.

OpenTelemetry

OpenTelemetry adalah standar observability open source. Tambahkan agent tanpa mengubah kode aplikasi:

Menjalankan dengan OpenTelemetry agent
java -javaagent:opentelemetry-javaagent.jar \
  -Dotel.service.name=aplikasi-demo \
  -jar aplikasi.jar

-javaagent:opentelemetry-javaagent.jar menginstrumentasi aplikasi secara otomatis, mengirim trace ke backend seperti Grafana Tempo atau Jaeger.

Health Check, Readiness Probe, dan Liveness

Health Check Endpoint

Health check memberi tahu orkestrator apakah aplikasi sehat. Dengan Spring Boot Actuator:

Memeriksa health endpoint
curl http://localhost:8080/actuator/health

curl http://localhost:8080/actuator/health mengembalikan status UP atau DOWN.

Readiness vs Liveness Probe

Di Kubernetes, dua probe berbeda:

  • Readiness: apakah aplikasi siap menerima trafik? Gagal berarti trafik dijauhkan.
  • Liveness: apakah aplikasi masih hidup? Gagal berarti container di-restart.
Probe Kubernetes
readinessProbe:
  httpGet:
    path: /actuator/health/readiness
    port: 8080
livenessProbe:
  httpGet:
    path: /actuator/health/liveness
    port: 8080

Incident Response dan SLO

Incident Response

Incident response adalah proses terstruktur saat terjadi masalah: deteksi, triase, mitigasi (rollback), komunikasi, dan post-mortem. Runbook yang terdokumentasi mempercepat pemulihan dan mengurangi kepanikan.

SLO dan Alerts

SLO (Service Level Objective) menetapkan target kesehatan, misalnya ketersediaan 99,9%. Alert yang baik memberi tahu tim sebelum SLO terancam, bukan setelah. Metrik Micrometer dan alert rule Prometheus menjadi dasar ini:

Membangun SLO
error rate < 0.1%  ->  alert saat mendekati ambang

Penutup

Episode 22 membahas observability dan production support: metrik JVM dengan Micrometer, log management dan structured logging, distributed tracing dengan OpenTelemetry dan Grafana, health check, readiness probe, incident response, dan SLO.

Inti yang harus dibawa pulang:

  • Metrik memberi gambaran kesehatan aplikasi secara kuantitatif.
  • Micrometer menyatukan metrik untuk banyak backend.
  • Structured logging memudahkan pencarian dan analisis log.
  • OpenTelemetry melacak request lintas layanan.
  • Readiness dan liveness probe menjaga kesehatan di Kubernetes.
  • SLO dan alert melindungi kualitas dari degradasi.

Di episode 23 selanjutnya, episode terakhir series ini, kita akan membahas future-proof Java dan ecosystem trends — fitur modern stabil di Java 21, Project Loom dan virtual threads, Project Amber dan pattern matching, Project Panama dan foreign function interface, serta strategi agar skill Java kalian tetap relevan. Sampai jumpa di episode terakhir!