Pemantauan vs Observabilitas: Perbedaan Nyata, Dengan Log, Metrik, dan Jejak

  1. Beranda
  2. Blog
  3. DevOps

DevOps

Pemantauan vs Observabilitas: Perbedaan Nyata, Dengan Log, Metrik, dan Jejak

Pemantauan memberi tahu Anda bahwa ada sesuatu yang salah. Observabilitas membantu Anda mengetahui alasannya, meskipun kegagalannya tidak pernah Anda prediksi. Ikuti insiden checkout untuk melihat bagaimana keduanya bekerja sama.

9 menit baca
Pemantauan vs kemampuan observasi: perbedaan nyata, dengan log, metrik, dan jejak

Poin penting

  • Pemantauan memantau masalah yang diketahui, menggunakan metrik dan peringatan yang telah ditentukan sebelumnya.
  • Observabilitas adalah seberapa baik Anda dapat memahami keadaan internal sistem dari keluarannya.
  • Log, metrik, dan jejak adalah sinyal umum, namun mengumpulkannya tidak menjamin adanya wawasan.
  • Keduanya bekerja sama: pemantauan meningkatkan kewaspadaan, dan kemampuan observasi membantu Anda menemukan penyebabnya.

Dasbornya berwarna hijau, namun pelanggan mengeluh bahwa pembayarannya rusak. Jika Anda pernah berada di posisi ini, Anda sudah memahami perbedaan antara pemantauan vs kemampuan observasi. Pemantauan Anda hanya memeriksa apa yang ingin Anda periksa, dan kegagalan ini adalah sesuatu yang baru.

Panduan ini menjelaskan kedua ide tersebut tanpa bahasa pemasaran, dan mengikuti satu kejadian fiktif mulai dari peringatan hingga akar permasalahan. Log, jejak, dan angka diciptakan untuk mengilustrasikan prosesnya. Anda juga harus tahu bahwa vendor dan praktisi mengambil garis ini secara berbeda, dan beberapa orang menganggapnya sebagai bagian dari perbedaan pemasaran. Kami fokus pada bagian praktisnya.

Jawaban singkatnya

Pemantauan adalah sebuah aktivitas. Anda memutuskan terlebih dahulu apa yang harus diperhatikan, seperti CPU, tingkat kesalahan, atau ruang disk, dan Anda menetapkan ambang batas yang memicu peringatan. Ia menjawab: “Apakah hal yang saya khawatirkan terjadi?”

Observabilitas adalah properti sistem Anda. Istilah ini berasal dari teori kontrol, yang menggambarkan seberapa baik Anda dapat menyimpulkan keadaan internal suatu sistem dari keluaran eksternalnya. Dalam praktiknya, ia menjawab: “Apa yang terjadi dan mengapa, termasuk masalah yang tidak pernah saya perkirakan?”

Bayangkan sebuah mobil. Lampu peringatan di dashboard sedang memantau. Mereka mencakup serangkaian masalah yang diketahui. Port diagnostik lengkap seorang mekanik, yang memungkinkan seseorang mengajukan pertanyaan baru tentang bagian mana pun dari mesin, lebih dekat dengan kemampuan observasi.

Pemantauan vs observasi secara berdampingan

Aspek Pemantauan Observabilitas
Pertanyaan utama Apakah ada yang salah? Mengapa itu salah?
Terbaik untuk Mode kegagalan yang diketahui Kegagalan yang tidak diketahui dan baru
Pendekatan Pemeriksaan dan dasbor yang telah ditentukan sebelumnya Eksplorasi terbuka atas data yang kaya
Keluaran yang khas Peringatan dan grafik status Jawaban atas pertanyaan baru
Detail datanya Seringkali dikumpulkan Terperinci, per permintaan jika memungkinkan
Pengaturan Konfigurasikan pemeriksaan dari luar Memerlukan instrumentasi kode Anda
Digunakan oleh Operasional, staf yang siap dipanggil Pengembang dan staf siap panggil

Ini bukanlah pilihan di antara keduanya. Anda masih memerlukan peringatan untuk memberi tahu Anda kapan harus mencarinya.

Mengapa pemantauan saja tidak cukup

Dengan satu aplikasi di satu server, daftar kesalahan yang mungkin terjadi cukup singkat, sehingga Anda dapat menonton semuanya. Sistem modern mungkin memiliki lusinan layanan, antrean, dan API pihak ketiga, ditambah container yang datang dan pergi. Kegagalan menjadi kombinasi yang tidak dapat diprediksi oleh siapa pun: satu wilayah, satu jenis pelanggan, versi aplikasi tertentu, dan satu ketergantungan lambat.

Anda tidak dapat menulis dasbor terlebih dahulu untuk pertanyaan yang belum terpikirkan. Anda memerlukan data yang memungkinkan Anda menanyakannya setelahnya.

Log, metrik, dan jejak

Ketiga jenis telemetri ini sering disebut sebagai pilar observabilitas. Masing-masing menjawab pertanyaan berbeda:

Sinyal Apa itu Jawaban Kelemahan
Metrik Angka seiring berjalannya waktu Berapa banyak? Apakah ini semakin buruk? Sedikit detail tentang peristiwa tunggal
Log Catatan peristiwa individu Apa yang sebenarnya terjadi? Bisa jadi mahal dan berisik
Jejak Jalur permintaan melalui layanan Kemana perginya waktu? Memerlukan instrumentasi dan sering dijadikan sampel

Metrik

http_requests_total{service="checkout", status="500"} 1832
http_request_duration_seconds{service="checkout", quantile="0.95"} 2.4

Metrik murah untuk disimpan dan cepat untuk dikueri, sehingga ideal untuk dasbor dan peringatan. Berhati-hatilah terhadap label berkardinalitas tinggi, seperti ID pengguna, di banyak sistem metrik, karena label tersebut dapat meningkatkan biaya secara drastis.

Jejak

Pelacakan mengikuti satu permintaan di seluruh layanan. Setiap langkah adalah span dengan waktu mulai dan durasi:

POST /checkout                      2410 ms
├─ auth-service: verify token         18 ms
├─ cart-service: load cart            42 ms
├─ pricing-service: calculate       2290 ms   <-- slow
│  └─ SELECT coupons ...            2265 ms
└─ payment-service: not reached

Jejak membuat langkah lambat menjadi jelas, yang sangat sulit dilihat di log terpisah dari layanan terpisah.

Log

Log memberikan detail tentang apa yang terjadi pada suatu saat. Kami melihat bagaimana menjadikannya berguna dalam sekejap.

Panduan insiden

Berikut adalah bagaimana potongan-potongan itu disatukan, dalam contoh fiksi.

Langkah Sinyal Apa yang kita pelajari
1. Waspadai kebakaran Metrik Latensi Checkout p95 melampaui target 1 detiknya
2. Hancurkan Metrik Hanya aplikasi seluler yang terpengaruh, bukan web
3. Periksa permintaan Jejak Waktunya dalam layanan penetapan harga, pada permintaan kupon
4. Baca detailnya Log Semua permintaan lambat menggunakan kupon dari kampanye hari ini
5. Konfirmasikan penyebabnya Rencana kueri Pencarian kupon tidak memiliki indeks yang sesuai
6. Perbaiki Penempatan Tambahkan indeks, dan lihat latensi pulih

Pemantauan ditangani pada langkah 1. Segala sesuatu setelah itu adalah observasi. Perhatikan bagaimana setiap pertanyaan muncul dari jawaban sebelumnya. Tidak ada yang bisa membuat dasbor sebelumnya untuk “permintaan kupon aplikasi seluler dari kampanye hari ini”. Untuk perbaikannya sendiri, panduan kami untuk optimasi kueri SQL menunjukkan cara membaca rencana semacam itu.

Log yang lebih baik

Log teks biasa dibuat untuk dilihat manusia, dan sulit untuk ditanyakan. Log terstruktur menggunakan kolom yang dapat difilter oleh mesin:

# Hard to search
ERROR Payment failed for user 42 after 3 tries

# Easy to search
{"level":"error","event":"payment_failed","user_id":"42",
 "attempts":3,"provider":"acme","trace_id":"a1b2c3","duration_ms":2410}

Dengan formulir kedua, Anda bisa langsung bertanya “berapa kegagalan per penyedia dalam satu jam terakhir?” Bidang trace_id sangat berharga karena menghubungkan baris log ke seluruh permintaan, di setiap layanan yang disentuhnya.

Jangan pernah mencatat kata sandi, token, atau nomor kartu, dan berhati-hatilah dengan data pribadi. Seperti yang dijelaskan oleh panduan kami, JWT dapat digunakan kembali oleh siapa saja yang membacanya dari log.

Tips: Tambahkan konteks yang Anda inginkan saat terjadi insiden, seperti versi, wilayah, tingkat pelanggan, dan status tanda fitur. Mampu mengatakan “hanya versi 2.14 di satu wilayah” sering kali menyelesaikan masalah dengan sendirinya.

Sinyal emas

Tidak yakin apa yang harus dipantau? Buku Site Reliability Engineering Google menyarankan empat sinyal untuk sistem yang dihadapi pengguna:

Sinyal Pertanyaan Contoh
Latensi Berapa lama waktu yang dibutuhkan untuk mengajukan permintaan? waktu respons p95 dan p99
Lalu lintas Berapa banyak permintaan yang ada? Permintaan per detik
Kesalahan Berapa banyak permintaan yang gagal? Rasio 5xx tanggapan
Saturasi Seberapa lengkap sistemnya? CPU, memori, penggunaan kumpulan koneksi

Gunakan persentil untuk latensi, karena rata-rata menyembunyikan permintaan yang lambat, seperti yang kami tunjukkan di pengujian beban vs pengujian stres.

Memperingatkan kepercayaan orang

Jika peringatan menyala sepanjang waktu, orang akan berhenti membacanya. Yang bagus mengikuti beberapa aturan:

  • Peringatan tentang gejala yang dirasakan pengguna. “Kesalahan pembayaran di atas 2%” mengalahkan “CPU pada 85%”. CPU tinggi yang tidak merugikan siapa pun seharusnya tidak membangunkan siapa pun.
  • Jadikan setiap peringatan dapat ditindaklanjuti. Jika tidak ada yang perlu melakukan apa pun, jadikan itu sebagai item dasbor atau hapus.
  • Tautan ke runbook. Beri tahu responden di mana mencarinya dan apa yang harus dicoba.
  • Tinjau secara berkala. Hapus atau perbaiki peringatan apa pun yang diabaikan bulan lalu.

Tujuan tingkat layanan

SLO mengubah “situs harus cepat dan andal” menjadi target yang terukur, seperti “99,9% permintaan pembayaran berhasil dalam 30 hari”. Hal ini memungkinkan terjadinya sekitar 0,1% kegagalan, yang dikenal sebagai anggaran kesalahan. Jika masih banyak, Anda dapat mengirim lebih cepat, dan jika hampir habis, Anda dapat memprioritaskan keandalan. Ini adalah cara yang berguna untuk menyelesaikan perselisihan antara kecepatan pengiriman dan stabilitas.

OpenTelemetri dan alat

OpenTelemetry adalah standar sumber terbuka dan netral vendor untuk menghasilkan dan mengekspor telemetri. Ini adalah proyek dari Cloud Native Computing Foundation. Menginstrumentasikannya berarti Anda dapat mengubah backend Anda nanti tanpa menulis ulang kode Anda. Ini bukan produk penyimpanan atau dasbor itu sendiri, jadi Anda memasangkannya dengan salah satu produk berikut:

Tujuan Contoh sumber terbuka Contoh komersial
Metrik Prometheus Datadog, Peninggalan Baru
Dasbor Grafana Datadog, Dynatrace
Log Loki, Pencarian Terbuka Splunk, elastis
Jejak Jaeger, Tempo Sarang Lebah, Datadog

Periksa sendiri fitur dan harga terkini, karena produk ini sering berubah. Biaya dapat bertambah dengan cepat seiring dengan volume data, jadi gunakan pengambilan sampel dan tetapkan batas retensi.

Bagaimana memulainya

  1. Mulailah dengan sinyal emas untuk layanan terpenting Anda.
  2. Tambahkan satu atau dua peringatan tentang gejala yang diperhatikan pengguna.
  3. Beralih ke log terstruktur, dengan ID permintaan di setiap baris.
  4. Tambahkan penelusuran ke perjalanan pengguna utama Anda dengan OpenTelemetry, karena instrumentasi otomatis dapat mencakup banyak kerangka kerja umum.
  5. Tautkan penerapan ke grafik Anda, sehingga Anda dapat melihat apakah rilis dari pipa CI/CD Anda menyebabkan perubahan.
  6. Belajarlah dari setiap kejadian. Setelah setiap kejadian, tanyakan data apa yang dapat mempercepat penyelesaian masalah, dan tambahkan data tersebut.

Sebuah tim kecil dengan satu layanan tidak memerlukan platform yang besar. Metrik dasar, log yang bagus, dan beberapa peringatan mungkin sudah cukup. Penelusuran semakin bermanfaat seiring dengan bertambahnya jumlah layanan.

Kesalahan umum

  • Membeli alat dan menyebutnya sebagai kemampuan observasi. Nilainya berasal dari instrumentasi yang baik dan cara Anda menggunakan data.
  • Memperlakukan tiga pilar sebagai daftar periksa. Data yang terpisah tanpa cara untuk menghubungkannya membuat Anda harus menelusuri tab. ID bersama itu penting.
  • Mengumpulkan semuanya. Telemetri tanpa filter menjadi mahal dan menambah kebisingan.
  • Terlalu banyak dasbor. Beberapa tampilan tepercaya mengalahkan seratus tampilan yang tidak dibuka oleh siapa pun.
  • Menganggapnya menggantikan pengujian. Anda masih memerlukan pengujian sebelum rilis. Rilis Canary berpasangan dengan baik dengan sinyal-sinyal ini.

Penutup

Pemantauan memberi tahu Anda bahwa ada sesuatu yang tidak beres, dan kemampuan observasi memberi Anda sarana untuk mencari tahu alasannya. Tes praktisnya sederhana: ketika masalah asing muncul, dapatkah Anda menemukan penyebabnya tanpa mengirimkan kode baru? Lain kali Anda mengalami suatu insiden, tuliskan setiap pertanyaan yang tidak dapat Anda jawab. Daftar itu adalah peta jalan Anda.

Pertanyaan yang sering diajukan

Apa perbedaan antara pemantauan dan observasi?

Pemantauan melacak metrik dan peringatan yang telah ditentukan sebelumnya tentang masalah yang diketahui. Observabilitas adalah kemampuan untuk memahami keadaan suatu sistem dari keluarannya, termasuk untuk masalah yang tidak terduga.

Apa tiga pilar observabilitas?

Itu adalah log, metrik, dan jejak. Log mencatat peristiwa, metrik mengukur nilai dari waktu ke waktu, dan jejak mengikuti satu permintaan di seluruh layanan.

Apakah saya memerlukan kemampuan observasi jika saya memiliki pemantauan?

Untuk sistem yang kecil dan sederhana, pemantauan dan pencatatan yang baik mungkin sudah cukup. Ketika sistem menjadi terdistribusi dan kegagalan menjadi lebih sulit diprediksi, kemampuan observasi menjadi lebih berharga.

Apa itu OpenTelemetri?

Ini adalah standar sumber terbuka dan seperangkat alat untuk memproduksi dan mengekspor log, metrik, dan jejak, sehingga Anda tidak terikat pada agen vendor tunggal.

Apa saja empat sinyal emas itu?

Itu adalah latensi, lalu lintas, kesalahan, dan saturasi. Panduan SRE Google merekomendasikan hal ini sebagai titik awal untuk memantau sistem yang dihadapi pengguna.

Teruslah belajar

Bekerja dengan Stack Quora

Butuh bantuan dengan pengujian, WordPress atau SEO?

Kami membantu tim mengirimkan perangkat lunak yang lebih baik dan mengembangkan situs mereka. Beritahu kami apa yang sedang Anda kerjakan dan kami akan menyarankan langkah selanjutnya yang jelas.

Teruslah membaca

Panduan lebih lanjut tentang pengujian, AI & pengembangan modern

Menikmati artikel ini? Pilih topik dan langsung masuk ke tutorial terbaru kami.

Kecerdasan buatan

Penjelasan Halusinasi AI: Mengapa Model Bahasa Memperbaiki Masalah dan Cara Menguranginya

Halusinasi AI menjelaskan: apa itu, mengapa model bahasa memproduksinya, tipe umum, cara menguranginya dengan landasan dan petunjuk, dan pemeriksaan…

Baca artikel →
DevOps

Penjelasan Variabel Lingkungan: File .env, Rahasia, dan Konfigurasi Dilakukan dengan Benar

Variabel lingkungan dijelaskan dengan contoh Python yang kami jalankan: membaca dan mengaturnya, mengapa setiap nilai berupa string, file .env, pewa…

Baca artikel →
Pengembangan perangkat lunak

Penjelasan Pembatasan Kecepatan API: Algoritma, Header, dan Penanganan 429 Kesalahan

Pembatasan laju API dijelaskan dengan simulasi yang kami jalankan: keranjang token, jendela tetap, jendela geser, respons 429, header batas laju, pe…

Baca artikel →
Otomatisasi pengujian

Mengejek dengan Python: unittest.mock, patch dan Kesalahan yang Membuat Tes Berbohong

Mengejek dengan Python dengan unittest.mock, menguji: Mock dan return_value, side_effect, menambal di mana nama digunakan, spesifikasi dan autospec,…

Baca artikel →
Pengujian perangkat lunak

Penjelasan Cakupan Kode: Cakupan Jalur vs Cabang dan Apa Arti 100% Sebenarnya

Cakupan kode dijelaskan dengan coverage.py yang sebenarnya dijalankan: cakupan garis, cabang dan kondisi, membaca laporan, mengapa cakupan 100% masi…

Baca artikel →
Basis data & SQL

DELETE vs TRUNCATE vs DROP dalam SQL: Perbedaan, Rollback dan Kapan Menggunakan Masing-Masing

DELETE vs TRUNCATE vs DROP dijelaskan dengan SQL yang diuji: apa yang dihapus, rollback, pemicu, reset identitas, kecepatan, dan perbedaan PostgreSQ…

Baca artikel →
Basis data & SQL

Penjelasan Tampilan SQL: Membuat, Menggunakan, dan Menghindari Kesalahan, Dengan Contoh

Tampilan SQL dijelaskan dengan kueri yang kami jalankan: membuat tampilan, hasil langsung, menyembunyikan kolom, kinerja, tampilan yang dapat diperb…

Baca artikel →
Pengembangan perangkat lunak

Antarmuka TypeScript vs Tipe: Perbedaan Nyata, Diuji Dengan Kompiler

Antarmuka TypeScript vs tipe, diperiksa dengan kompiler sebenarnya: apa yang bisa dilakukan keduanya, apa yang hanya bisa dilakukan satu orang, peng…

Baca artikel →
Pengembangan perangkat lunak

Penjelasan Python *args dan **kwargs: Fungsi Fleksibel Dengan Contoh Jelas

Python *args dan **kwargs dijelaskan dengan kode yang kami jalankan: pengepakan dan pembongkaran, urutan parameter, argumen hanya kata kunci dan pos…

Baca artikel →
Pengembangan perangkat lunak

Fungsi Python Lambda: Sintaks, Kegunaan Sebenarnya, dan Kapan Tidak Digunakan

Fungsi python lambda dijelaskan dengan kode yang kami jalankan: sintaksis, pengurutan dengan kunci, peta dan filter, penutupan, jebakan pengikatan a…

Baca artikel →
Kecerdasan buatan

Apa Itu Agen AI? Cara Kerjanya, Dengan Agent Loop Sederhana yang Dapat Anda Jalankan

Apa itu agen AI? Panduan sederhana tentang loop agen, alat, memori, dan pagar pembatas, dengan loop Python kecil yang kami jalankan, risiko nyata da…

Baca artikel →
DevOps

Pemantauan vs Observabilitas: Perbedaan Nyata, Dengan Log, Metrik, dan Jejak

Penjelasan pemantauan vs observabilitas: kegagalan yang diketahui dan tidak diketahui, log, metrik dan jejak, penelusuran insiden checkout, sinyal e…

Baca artikel →
DevOps

Volume Docker vs Bind Mounts: Pertahankan Data Kontainer dengan Cara yang Benar

Volume Docker vs pengikatan pengikat dijelaskan: mengapa data kontainer menghilang, volume yang diberi nama, pengikatan pengikatan, tmpfs, contoh Tu…

Baca artikel →
Otomatisasi pengujian

TDD vs BDD: Perbedaan Utama, Satu Fitur Dibangun dengan Dua Cara dan Kapan Menggunakan Masing-masing

TDD vs BDD dijelaskan dengan satu fitur diskon yang dibuat dengan dua cara: refactor merah-hijau dengan kode yang kami jalankan, skenario Mengingat-…

Baca artikel →
Pengembangan perangkat lunak

Git merge vs rebase: perbedaan, contoh, dan kapan memakai masing-masing

Git merge vs rebase dijelaskan dengan keluaran log nyata, tabel perbandingan, aturan emas rebase, dan alur kerja tim yang aman.

Baca artikel →
Pengembangan perangkat lunak

List Comprehension Python: Sintaks, Contoh, dan Kapan Harus Dihindari

List comprehension Python dijelaskan: sintaks, filter, if-else, perulangan bersarang, waktu yang diukur, dan kapan perulangan for biasa lebih baik.

Baca artikel →
Basis data & SQL

Penjelasan SQL JOIN dengan Contoh (Inner, Left, Right, Full)

Pahami SQL JOIN langkah demi langkah dengan tabel dan query contoh: INNER, LEFT, RIGHT, FULL, CROSS, dan SELF, plus kesalahan umum dan tips performa.

Baca artikel →