Sistem yang aman tidak cukup — ia harus bisa dibuktikan kondisinya. Episode ini membahas tiga pilar observability, metrik, log, dan trace, beserta pengumpulan log terpusat, alerting, dan perbandingan layanan AWS, GCP, dan Azure.

Setelah di episode 14 kita membangun pertahanan berlapis — firewall, WAF, dan enkripsi — satu pertanyaan tersisa: bagaimana kalian tahu sistem kalian benar-benar sehat? Keamanan melindungi sistem dari serangan dari luar; observability melindungi sistem dari dalam: dari kesalahan kode, resource yang menipis, dan perubahan yang tidak disengaja.
Seorang engineer yang andal bukan yang mengklaim "sistem kami tidak pernah down", melainkan yang bisa menunjukkan angkanya: berapa persen ketersediaannya, berapa latensi rata-ratanya, dan ke mana error mengalir saat ada masalah. Episode ini membekali kalian dengan tiga pilar observability, pengumpulan log terpusat, alerting, serta perbandingan alat di AWS, GCP, dan Azure.
Observability berdiri di atas tiga pilar yang saling melengkapi. Menguasai ketiganya sekaligus — bukan salah satu saja — yang membedakan operasional modern dari sekadar "memantau":
Hubungan ketiganya sederhana: metrik menjawab ada masalah?, log menjawab apa yang terjadi?, dan trace menjawab kenapa bisa terjadi?. Monitoring memberi tahu bahwa sesuatu salah; observability memberi tahu apa dan mengapa, tanpa perlu menebak.
Tip
Metrik dipakai untuk alert, log dipakai untuk diagnosis, dan trace dipakai untuk memahami alur lintas service. Jika kalian hanya mengumpulkan metrik, kalian akan tahu sistem bermasalah tetapi tidak tahu penyebabnya; jika hanya mengumpulkan log, kalian tenggelam dalam data tanpa alarm yang memberitahu kapan harus membacanya.
Untuk layanan yang melayani request, pola RED method adalah titik awal yang baik: Rate (jumlah request per detik), Error (jumlah request gagal per detik), dan Duration (distribusi latensi). Untuk infrastruktur pendukung, perhatikan CPU, memory, disk, dan jaringan.
| Metrik | Contoh Nilai | Alarm Saat |
|---|---|---|
| CPU / memory usage | 60 persen rata-rata | Naik stabil di atas 85 persen |
| Request rate | 1200 request per detik | Turun drastis tanpa penjelasan |
| Error rate (5xx) | 0,2 persen | Di atas 1 persen |
| Latency p95 | 250 ms | Di atas 500 ms |
Perhatikan kolom alarm: nilai puncak sesaat biasanya bukan indikator masalah — yang berbahaya adalah tren yang berkelanjutan. Baseline selama 30 hari adalah kompas kalian untuk menilai apakah kenaikan kali ini normal atau sinyal masalah.
Mengapa log harus dikumpulkan terpusat? Instance di cloud bersifat fana — ia bisa diganti kapan saja — dan container berpindah antar node. Log yang tersimpan di disk instance akan ikut hilang saat instance dihentikan. Grep manual ke 50 server juga mustahil saat insiden. Solusinya adalah agregasi terpusat: agent di setiap instance mengirim log ke satu tempat, lalu tempat itu bisa dicari, di-query, dan dijadikan alarm.
Alur standarnya: agent di instance mengirim log ke layanan log terpusat (CloudWatch Logs, Cloud Logging, Log Analytics), lalu alarm berbasis metrik atau log mengirim notifikasi ke email, Slack, atau PagerDuty saat ambang batas terlewati. Contoh mengambil statistik CPU instance lewat CLI:
aws cloudwatch get-metric-statistics \
--namespace AWS/EC2 \
--metric-name CPUUtilization \
--dimensions Name=InstanceId,Value=i-0abc123def456 \
--statistics Average \
--period 300 \
--start-time 2026-08-03T00:00:00Z \
--end-time 2026-08-03T01:00:00ZPerintah aws cloudwatch get-metric-statistics mengembalikan deret titik data dalam rentang waktu yang diminta. Hasilnya berupa JSON seperti berikut:
{
"Datapoints": [
{
"Timestamp": "2026-08-03T00:30:00Z",
"Average": 42.7,
"Unit": "Percent"
},
{
"Timestamp": "2026-08-03T00:45:00Z",
"Average": 61.3,
"Unit": "Percent"
}
],
"Label": "CPUUtilization"
}Angka inilah yang menjadi bahan keputusan: rata-rata 42 sampai 61 persen menandakan instance ter-utilisasi wajar. Jika hasilnya menunjukkan 95 persen secara konsisten, itu sinyal untuk menaikkan kapasitas — atau mengevaluasi konfigurasi aplikasi.
Ketika metrik memberi tahu bahwa ada masalah, log memberi tahu detailnya. Setelah log terpusat, kalian tidak lagi membuka terminal per server — cukup satu tempat untuk mencari. Contoh query di CloudWatch Logs Insights untuk menemukan error terbaru:
fields @timestamp, @message, @requestId
| filter @message like /ERROR|Exception/
| sort @timestamp desc
| limit 20Query ini mengambil timestamp, isi pesan, dan request ID dari semua instance sekaligus, menyaring yang mengandung ERROR atau Exception, lalu mengurutkannya dari yang terbaru. Pola yang sama berlaku di Cloud Logging (dengan query SQL-like) dan Log Analytics (dengan KQL). Yang penting bukan sintaksnya — melainkan konsepnya: log dari seluruh fleet dipersempit menjadi beberapa baris yang relevan dalam hitungan detik.
Tip
Saat memulai query log lewat CLI, kalian menggunakan perintah aws logs start-query untuk memulai pencarian asinkron lalu aws logs get-query-results untuk mengambil hasilnya. Di konsol, hal yang sama terjadi di balik layar — satu query yang sama yang kalian tulis di sini.
Ketika satu request melewati banyak service — API gateway, autentikasi, service A, service B, sampai database — siapa yang paling lambat? Log per service tidak menjawab ini, karena tiap service hanya melihat potongan kecil. Di sinilah trace berperan: satu trace ID menandai seluruh perjalanan satu request, dan setiap hop direkam sebagai span.
| Span | Service | Durasi |
|---|---|---|
/api/orders | API Gateway | 4 ms |
| Auth | Service Auth | 38 ms |
| Get user profile | Service User | 120 ms |
| Query orders | Database | 45 ms |
Dari tabel di atas terlihat jelas: 120 ms di service User bukanlah kegagalan aplikasi — ia penyumbang latensi terbesar. Tanpa trace, kalian akan menebak-nebak service mana yang harus dioptimasi. Dengan trace, keputusannya berbasis data. Di balik layar, alat seperti X-Ray, Cloud Trace, dan Application Insights membangun tabel semacam ini secara otomatis dari request yang melewati sistem kalian.
Alarm tidak berguna jika semua alarm dianggap sebagai alarm palsu. Praktik yang sehat:
Warning
Bahaya terbesar monitoring bukan alat yang mahal, melainkan alert fatigue: terlalu banyak alarm membuat tim berhenti mempercayai semua alarm. Lebih baik lima alarm yang tepat dan ditindaklanjuti daripada lima puluh alarm yang diabaikan.
Ketiga cloud besar membangun fondasi observability yang identik, dengan penamaan berbeda:
| Pilar | AWS | GCP | Azure |
|---|---|---|---|
| Metrik dan alarm | CloudWatch | Cloud Monitoring | Azure Monitor |
| Log terpusat | CloudWatch Logs | Cloud Logging | Azure Log Analytics |
| Distributed tracing | X-Ray | Cloud Trace | Application Insights |
| Notifikasi alert | SNS ke email/Slack/PagerDuty | Alert channels | Action Groups |
Semuanya berpikir dengan pola yang sama: metrik disimpan sebagai deret waktu, log disimpan dan bisa di-query (CloudWatch Logs Insights, Cloud Logging, Log Analytics), dan trace mengikuti satu request melintasi service. Jika kalian sudah memahami konsep episode ini, berpindah cloud hanya soal belajar penamaan dan sintaks query — fondasi konseptualnya sudah sama.
Pada episode 15 ini kalian telah membangun kemampuan untuk membuktikan kesehatan sistem: tiga pilar observability — metrik untuk alert, log untuk diagnosis, dan trace untuk memahami alur lintas service; pengumpulan log terpusat — mengumpulkan log dari instance fana ke satu tempat yang bisa dicari; alerting yang sehat — alarm berbasis ambang yang jelas, berjeda, dan punya pemilik; serta perbandingan alat di AWS, GCP, dan Azure.
Namun ada paradoks yang harus kalian pahami: observability hanya berguna jika sistem yang diamati bisa direproduksi dengan pasti. Membangun environment staging kedua secara manual lewat klik-klik konsol hampir dijamin menghasilkan sistem yang berbeda — dan monitoring di atas fondasi yang berbeda itu menjadi menyesatkan. Episode berikutnya, Infrastructure as Code & Cloud Automation, memberikan kalian kunci untuk membangun, menduplikasi, dan mengubah infrastruktur dengan presisi yang sama seperti menulis kode.