Episode ini membahas operational readiness untuk aplikasi Groovy: menyiapkan runbook untuk deployment dan incident response, metrik operasional, logging dan runtime observability, serta upgrade path dan compatibility check untuk versi Groovy dan JVM.

Aplikasi yang sudah dideploy belum berarti selesai. Yang membedakan aplikasi andal dari aplikasi rapuh adalah kesiapan operasional — dokumen runbook, metrik, dan observability yang memadai.
Episode 19 membahas penyiapan runbook untuk deployment dan incident response, metrik operasional, logging dan runtime observability, serta upgrade path dan compatibility check untuk versi Groovy dan JVM.
Runbook adalah dokumen langkah-demi-langkah untuk menjalankan operasi rutin dan menangani insiden. Runbook yang baik mencakup:
Tujuan utama runbook: siapa pun bisa mengeksekusi langkah tanpa pengetahuan sebelumnya.
Deployment runbook untuk aplikasi Groovy berbasis container:
docker pull myapp:1.2.0
docker run -d --name app -p 8080:8080 myapp:1.2.0
curl -f http://localhost:8080/healthdocker pull myapp:1.2.0 mengambil image versi tertentu, dan curl -f http://localhost:8080/health memverifikasi aplikasi sehat setelah start. curl -f http://localhost:8080/health menghentikan script dengan kode error jika health check gagal — langkah verifikasi wajib di runbook.
Untuk insiden, runbook memberi langkah diagnosis yang terurut:
Aplikasi JVM perlu memantau metrik berikut:
Micrometer adalah standar metrik di ekosistem JVM. Contoh sederhana mengekspos metrik dari aplikasi Groovy:
import io.micrometer.core.instrument.MeterRegistry
class SapaService {
final MeterRegistry registry
String sapa(String nama) {
registry.counter("sapa.requests").increment()
"Halo, ${nama}"
}
}registry.counter("sapa.requests").increment() mencatat setiap pemanggilan. MeterRegistry registry adalah titik masuk Micrometer, yang bisa diekspor ke Prometheus, Datadog, atau platform observability lain.
Log terstruktur memudahkan mesin memproses data:
import groovy.json.JsonOutput
def logJson = { level, pesan, extra = [:] ->
def data = [level: level, pesan: pesan] + extra
println JsonOutput.toJson(data)
}
logJson("info", "Request masuk", [path: "/api/sapa", durasi: 42])logJson("info", "Request masuk", [path: "/api/sapa", durasi: 42]) menghasilkan satu baris JSON yang bisa diparsing. [level: level, pesan: pesan] + extra menggabungkan map utama dengan field tambahan — log terstruktur seperti ini dipakai tool seperti Loki dan Elasticsearch.
Untuk observability runtime JVM, aktifkan Java Flight Recorder dan pantau melalui JMX:
java -XX:StartFlightRecording=filename=app.jfr,duration=120s -jar app.jarjava -XX:StartFlightRecording=filename=app.jfr,duration=120s -jar app.jar merekam profil aplikasi selama dua menit ke file JFR. File ini bisa dianalisis di JDK Mission Control untuk menemukan bottleneck dan perilaku abnormal.
Sebelum upgrade Groovy atau JDK, periksa kompatibilitas:
groovy --version
java -versiongroovy --version menampilkan versi Groovy, dan java -version menampilkan versi JDK. java -version penting karena setiap versi Groovy punya jangkauan JDK yang didukung — misalnya Groovy 4.x mendukung JDK 8 hingga 23.
Upgrade yang aman dilakukan bertahap:
Jalankan matriks test terhadap beberapa versi JDK:
JAVA_HOME=/opt/jdk17 gradle test
JAVA_HOME=/opt/jdk21 gradle testJAVA_HOME=/opt/jdk17 gradle test menjalankan test dengan JDK 17, dan JAVA_HOME=/opt/jdk21 gradle test dengan JDK 21. JAVA_HOME=/opt/jdk21 gradle test memastikan aplikasi bekerja di seluruh versi yang kalian dukung.
Episode 19 membawa aplikasi Groovy kalian menuju kesiapan produksi: runbook untuk deployment dan insiden, metrik operasional, structured logging dan observability, serta strategi upgrade yang aman.
Inti yang harus dibawa pulang:
Di episode 20 selanjutnya kita akan membahas security dan compliance — safe execution of dynamic scripts, input validation, sandboxing, pencegahan code injection, serta secure dependency management dan supply chain awareness.