Episode ini membahas observability dasar: logging dengan Logback dan konfigurasi file, Spring Boot Actuator untuk health check, metrics, dan env, custom actuator endpoints, serta integrasi Micrometer dengan Prometheus untuk aplikasi yang bisa dipantau.

Aplikasi yang tidak bisa dipantau adalah kotak hitam — saat terjadi masalah di production, kalian hanya bisa menebak. Episode 9 membuka tirai itu dengan logging, metrics, dan health: tiga hal yang membuat aplikasi kalian observable.
Kalian akan belajar menulis log yang benar dengan Logback, membuka endpoint Actuator untuk health check dan metrics, serta mengekspor metrik ke Prometheus melalui Micrometer. Ini adalah fondasi yang akan diperdalam di episode 22 tentang observability.
Spring Boot memakai Logback sebagai logging framework default. Level log — dari yang paling penting: ERROR, WARN, INFO, DEBUG, TRACE — dikontrol lewat konfigurasi. Di aplikasi, gunakan Logger dari SLF4J:
@Service
public class ItemService {
private static final Logger log =
LoggerFactory.getLogger(ItemService.class);
public Item create(Item item) {
log.info("Membuat item baru: {}", item.getName());
return repository.save(item);
}
}Bentuk log.info("teks {}", nilai) memakai placeholder {} — hindari concatenation string yang boros dan mengacaukan format. Log berisi konteks yang berguna untuk melacak masalah.
Atur level dan output log lewat konfigurasi:
logging:
level:
root: INFO
com.example: DEBUG
file:
name: logs/aplikasi.log
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n"Dengan konfigurasi ini, aplikasi menulis log ke console dan ke file logs/aplikasi.log. Level com.example di-set DEBUG untuk detail saat development. Untuk production, biasakan menulis structured logging — format JSON — agar mudah diproses aggregator log, seperti yang dibahas di episode 22.
Actuator menghadirkan endpoint produksi yang menampilkan kondisi aplikasi. Tambahkan dependency:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>Actuator juga perlu konfigurasi akses — default hanya health yang terbuka:
management:
endpoints:
web:
exposure:
include: health,info,metrics,env
endpoint:
health:
show-details: alwaysHealth check adalah endpoint terpenting untuk orchestrator seperti Kubernetes:
curl http://localhost:8080/actuator/healthPerintah curl http://localhost:8080/actuator/health mengembalikan status keseluruhan beserta detail komponen seperti disk dan database. Endpoint lain yang tersedia: info untuk metadata aplikasi, metrics untuk daftar metrik, dan env untuk environment properties.
Saat aplikasi bergantung pada layanan eksternal, buat health indicator sendiri:
@Component
public class ExternalApiHealthIndicator
implements HealthIndicator {
@Override
public Health health() {
boolean up = checkExternalApi();
return up
? Health.up().build()
: Health.down().withDetail("reason",
"API eksternal tidak responsif").build();
}
}Health indicator ini akan muncul sebagai komponen di /actuator/health dengan nama externalApi. Orchestrator seperti Kubernetes memakainya untuk memutuskan kapan aplikasi dianggap sehat.
Micrometer adalah facade metrics yang mengumpulkan metrik dari JVM dan aplikasi, lalu mengekspornya ke sistem monitoring. Untuk Prometheus, tambahkan dependency:
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>Endpoint actuator/prometheus kini mengekspos metrik dalam format yang dipahami Prometheus:
curl http://localhost:8080/actuator/prometheus | grep http_server_requestsPerintah curl http://localhost:8080/actuator/prometheus | grep http_server_requests menampilkan metrik jumlah request HTTP beserta status code dan durasi. Prometheus dapat men-scrape endpoint ini secara berkala, dan metriknya divisualisasikan di Grafana.
Beberapa kebiasaan yang membuat observability bekerja di production:
ERROR untuk kegagalan, INFO untuk aktivitas penting, DEBUG untuk detail.env dan beans untuk lingkungan terpercaya.Logging -> tahu apa yang terjadi
Metrics -> tahu berapa banyak dan seberapa cepat
Health -> tahu apakah aplikasi sehatEpisode 9 membekali kalian dengan observability dasar: logging dengan Logback, endpoint Actuator untuk health dan metrics, health indicator kustom, serta integrasi Micrometer dengan Prometheus untuk aplikasi yang bisa dipantau di production.
Inti yang harus dibawa pulang:
{}, bukan concatenation string.health, info, metrics, dan env./actuator/health adalah sumber utama status kesehatan untuk Kubernetes.actuator/prometheus.Di episode 10 selanjutnya kita akan membahas transaction dan persistence advanced — manajemen transaksi dengan @Transactional, propagation dan isolation level, lazy loading serta performance tuning JPA, dan migrasi schema dengan Flyway atau Liquibase.