Log

Apa Itu Log?

Log adalah catatan aktivitas atau kejadian dalam sistem komputer yang direkam dalam bentuk teks atau data terstruktur. Log membantu tim pengembang dan operator untuk memahami apa yang terjadi dalam aplikasi atau infrastruktur. Log mendukung berbagai kasus penggunaan, seperti:

  • Pemantauan Performa dan Kapasitas: Melihat seberapa baik sistem berjalan, misalnya, waktu respons server.

  • Deteksi Bug: Mengidentifikasi kesalahan dalam kode, seperti error 500 pada server web.

  • Analisis Akar Masalah: Menelusuri penyebab masalah, misalnya, kegagalan login pengguna.

  • Pelacakan Perilaku Pengguna: Memahami bagaimana pengguna berinteraksi dengan aplikasi.

Tidak ada resep sempurna untuk log, tetapi mengikuti pedoman tertentu akan mempermudah analisis di masa depan. Format log menentukan bagaimana data dicatat dan diinterpretasikan, termasuk apakah log bersifat terstruktur, semi-terstruktur, atau tidak terstruktur, jenis data yang digunakan, dan apakah ada pengkodean atau pemisahan (delimitation) khusus.

Jenis-Jenis Log

Log dapat diklasifikasikan menjadi tiga jenis berdasarkan strukturnya: terstruktur, semi-terstruktur, dan tidak terstruktur. Pemahaman tentang jenis log ini penting saat merancang solusi observability untuk memastikan data dapat diambil (ingest), diuraikan (parse), dan disimpan dengan efektif.

1. Log Terstruktur (Structured Logging)

Log terstruktur memiliki format pesan yang telah ditentukan sebelumnya, memungkinkan data diperlakukan sebagai dataset daripada teks biasa. Log ini dirancang untuk mudah dipahami oleh manusia dan efisien diproses oleh mesin.

Karakteristik:

  • Mengikuti pola yang jelas, sering menggunakan pemisah seperti koma, spasi, atau tanda hubung.

  • Data sering disusun dalam pasangan kunci-nilai (key-value pairs), misalnya, name=Diego atau city=Berlin.

  • Dapat divalidasi dengan skema, seperti JSON Schema, untuk memastikan konsistensi data.

  • Cocok untuk otomatisasi analisis karena formatnya konsisten.

Contoh: { "timestamp": "2023-04-25T12:15:03.006Z", "message": "User Diego.Developer has logged in", "log": { "level": "info", "file": "auth.py", "line": 77 }, "user": { "name": "diego.developer", "id": 123 }, "event": { "success": true } }

Manfaat:

  • Mudah diproses oleh alat seperti Elasticsearch atau Prometheus untuk analisis otomatis.

  • Mendukung versioning melalui skema, memungkinkan integrasi dengan teknologi event bus.

  • Ideal untuk sistem yang membutuhkan query kompleks, seperti mencari semua log dengan level=error.

Kekurangan:

  • Membutuhkan perencanaan awal untuk mendefinisikan format.

  • Mungkin lebih sulit untuk dibaca secara langsung oleh manusia tanpa alat bantu.

2. Log Semi-Terstruktur (Semi-Structured Logging)

Log semi-terstruktur menggabungkan elemen terstruktur dan tidak terstruktur, dirancang agar mudah dibaca oleh manusia sekaligus dapat diproses oleh mesin. Log ini sering memiliki pola tertentu, tetapi tidak seketat log terstruktur.

Karakteristik:

  • Menggunakan pemisah kompleks untuk field dan event (misalnya, spasi, koma, atau tanda khusus).

  • Membutuhkan parsing dengan regular expression atau kode khusus untuk memisahkan data.

  • Contohnya adalah log dengan format campuran teks dan pasangan kunci-nilai.

Contoh: level=info method=GET path=/ host=myserver.me fwd="10.51.113.149" service=4ms status=200

Manfaat:

  • Fleksibel, memungkinkan penambahan field baru tanpa merusak parsing.

  • Lebih mudah dibaca oleh manusia dibandingkan log terstruktur.

  • Cocok untuk sistem yang membutuhkan keseimbangan antara keterbacaan dan pemrosesan otomatis.

Kekurangan:

  • Parsing bisa rumit karena formatnya tidak sepenuhnya konsisten.

  • Membutuhkan pengetahuan tentang pola log untuk analisis yang akurat.

3. Log Tidak Terstruktur (Unstructured Logging)

Log tidak terstruktur adalah log dalam format teks bebas yang mudah dibaca oleh manusia, tetapi sulit diproses oleh mesin. Log ini sering menggunakan spasi, warna, atau format visual untuk meningkatkan keterbacaan.

Karakteristik:

  • Tidak mengikuti pola tetap, sehingga parsing memerlukan pengetahuan mendalam tentang data.

  • Sering berisi teks naratif, seperti pesan error atau deskripsi proses.

  • Dapat mencakup log multiline, yang memerlukan enkapsulasi untuk mencegah pemisahan yang salah.

Contoh: 2023-04-25 12:15:03,006 INFO [SVR042] UserMembershipsIterable Found 4 children for 4 groups in 3 ms Begin Transaction update record. Process started. Process completed.

Manfaat:

  • Sangat mudah dibaca oleh manusia, cocok untuk debugging cepat.

  • Fleksibel untuk mencatat informasi apa pun tanpa batasan format.

Kekurangan:

  • Sulit diproses oleh mesin, memerlukan parsing kustom yang kompleks.

  • Rentan terhadap perubahan format, yang dapat memutus parsing otomatis.

  • Log multiline bisa terpecah menjadi beberapa event jika tidak dienkapsulasi dengan benar.

Enkapsulasi: Untuk log multiline, enkapsulasi berdasarkan timestamp (misalnya, mengelompokkan semua baris dengan timestamp yang sama) memastikan data disimpan sebagai satu event, mempermudah pencarian.

Format Log Umum

Berikut adalah beberapa format log umum yang digunakan dalam sistem modern, dengan contoh dan penjelasan:

1. Common Event Format (CEF)

Deskripsi: Format log terstruktur yang dikembangkan oleh ArcSight untuk kebutuhan Security Information and Event Management (SIEM). Menggunakan encoding UTF-8 dengan struktur prefix, header, dan body berisi pasangan kunci-nilai.

Struktur:

  • Prefix: Kombinasi timestamp dan hostname sumber.

  • Header: Berisi metadata seperti versi perangkat lunak, nama vendor, nama produk, kode event, dan severitas.

  • Body: Pasangan kunci-nilai untuk data tambahan.

Contoh: CEF:0|Security Provider|Security Product|Version|123|User Authenticated|3|src=10.51.113.149 suser=diego target=diego msg=User authenticated from 1001:db7::5

Kapan Digunakan: Untuk keamanan dan audit, seperti mencatat login atau aktivitas mencurigakan.

2. NCSA Common Log Format (CLF)

Deskripsi: Format log klasik yang digunakan oleh server web untuk mencatat permintaan HTTP. Bersifat terstruktur dengan format tetap, tidak dapat disesuaikan.

Field:

  • Alamat host jarak jauh, nama pengguna, timestamp, permintaan, status HTTP, jumlah byte yang dikirim.

  • Menggunakan tanda hubung (-) sebagai placeholder untuk data yang hilang.

Contoh: 127.0.0.1 user-identifier diego [25/Apr/2023:12:15:03 -0000] "GET /apache_pb.gif HTTP/1.1" 200 2326

Kapan Digunakan: Untuk analisis lalu lintas web sederhana, seperti jumlah permintaan atau status respons.

3. W3C Extended Log File Format

Deskripsi: Format log terstruktur yang digunakan oleh Microsoft Internet Information Services (IIS). Konfigurasi field dapat disesuaikan, dengan prefiks seperti c- (client) atau s- (server) untuk menunjukkan arah data.

Field:

  • Timestamp, IP klien, IP server, URI, status HTTP, byte dikirim/diterima, waktu pemrosesan, versi protokol.

Contoh: #Software: Internet Information Services 10.0 #Version: 1.0 #Date: 2023-04-25 12:15:03 #Fields: time c-ip cs-method cs-uri-stem sc-status cs-version 12:15:03 10.51.113.149 GET /home.htm 200 HTTP/1.0

Kapan Digunakan: Untuk server web berbasis Windows yang membutuhkan fleksibilitas field.

4. Windows Event Log

Deskripsi: Format log terstruktur bawaan sistem operasi Windows, mencatat event seperti sistem, aplikasi, keamanan, pengaturan, dan event yang diteruskan. Log ini sangat verbose dan mencakup detail seperti event ID, username, dan kategori.

Contoh: An account was successfully logged on. Subject: Security ID: SYSTEM Account Name: DESKTOP-TMC369$ Account Domain: WORKGROUP Logon ID: 0xE37 Logon Information: New Logon: Security ID: AD\DiegoDeveloper Account Name: diego.developer@themelt.cafe Account Domain: AD Logon ID: 0xEC4093F Network Information: Workstation Name: DESKTOP-TMC369

Kapan Digunakan: Untuk debugging masalah sistem operasi Windows atau analisis keamanan.

5. JSON

Deskripsi: Format log terstruktur modern yang menggunakan pasangan kunci-nilai dan mendukung data bertingkat (nested). JSON sangat populer karena mudah diuraikan oleh mesin dan mendukung berbagai tipe data (string, number, boolean, dll.).

Contoh: { "timestamp": "2023-04-25T12:15:03.006Z", "message": "User Diego.Developer has logged in", "log": { "level": "info", "file": "auth.py", "line": 77 }, "user": { "name": "diego.developer", "id": 123 }, "event": { "success": true } }

Kapan Digunakan: Untuk aplikasi modern yang membutuhkan parsing otomatis dan integrasi dengan alat seperti ELK Stack.

6. Syslog

Deskripsi: Standar log yang digunakan di banyak perangkat (jaringan, komputasi, penyimpanan) dan kernel Linux. Syslog mendefinisikan protokol transportasi (port 514 atau 6514 untuk enkripsi) dan format pesan.

Contoh: Apr 25 12:15:03 server1 sshd[41458]: Failed password for diego from 10.51.113.149 port 22 ssh2

Kapan Digunakan: Untuk logging perangkat jaringan atau sistem Linux.

7. Logfmt

Deskripsi: Format log semi-terstruktur yang mudah dibaca oleh manusia dan mesin. Tidak memiliki standar resmi, tetapi menggunakan pasangan kunci-nilai yang fleksibel.

Contoh: level=info method=GET path=/ host=myserver.me fwd="10.51.113.149" service=4ms status=200

Kapan Digunakan: Untuk aplikasi yang membutuhkan log yang mudah diperluas tanpa standar ketat.

Ilustrasi Penggunaan Log

Misalkan Diego (pengembang) dan Ophelia (operator) bekerja pada aplikasi web. Mereka menggunakan log untuk memantau performa dan mendiagnosis masalah.

Skenario:

  • Aplikasi mencatat setiap permintaan HTTP ke endpoint /api/users.

  • Log menggunakan format JSON (terstruktur) untuk memudahkan analisis.

Contoh Log: { "timestamp": "2025-10-20T10:23:03.006Z", "message": "HTTP request processed", "log": { "level": "info", "method": "GET", "path": "/api/users", "status": 200, "duration_ms": 45 }, "user": { "ip": "10.51.113.149", "id": 123 } }

Analisis:

  • Diego menggunakan log untuk mendeteksi bug, misalnya, mencari semua log dengan status=500 untuk menemukan error.

  • Ophelia menggunakan log untuk memantau performa, misalnya, menghitung rata-rata duration_ms untuk mengevaluasi latensi.

  • Dengan format JSON, mereka dapat menggunakan alat seperti Elasticsearch untuk query seperti:

    {"query": {"match": {"log.level": "error"}}}

Visualisasi: Berikut adalah grafik sederhana yang menunjukkan jumlah log berdasarkan status HTTP selama 10 menit.

Penjelasan Grafik:

  • Menunjukkan distribusi log berdasarkan status HTTP, membantu Ophelia mengidentifikasi apakah ada lonjakan error (status 500).

Kapan Menggunakan Jenis Log

  • Terstruktur: Gunakan untuk sistem yang membutuhkan analisis otomatis, integrasi dengan alat seperti ELK Stack, atau validasi skema (contoh: JSON, CEF).

  • Semi-Terstruktur: Gunakan untuk keseimbangan antara keterbacaan manusia dan pemrosesan mesin (contoh: Logfmt).

  • Tidak Terstruktur: Gunakan untuk debugging cepat oleh manusia, tetapi hindari untuk analisis skala besar karena sulit diproses (contoh: log multiline tanpa enkapsulasi).

Praktik Terbaik untuk Logging

  1. Gunakan Format Terstruktur untuk Observability Modern: JSON atau Logfmt lebih mudah diuraikan dan diintegrasikan dengan alat observability.

  2. Sertakan Metadata Penting: Tambahkan timestamp, level log (info, error), dan konteks seperti ID pengguna atau IP.

  3. Enkapsulasi Log Multiline: Pastikan log multiline (misalnya, stack trace) disimpan sebagai satu event.

  4. Validasi Data: Gunakan skema (misalnya, JSON Schema) untuk memastikan konsistensi log terstruktur.

  5. Hindari Perubahan Format yang Tidak Perlu: Perubahan pada log tidak terstruktur dapat memutus parsing otomatis, menambah beban kerja operator seperti Ophelia.

Kesimpulan

Log adalah alat penting dalam observability untuk memantau sistem, mendeteksi masalah, dan memahami perilaku pengguna. Dengan memahami jenis log (terstruktur, semi-terstruktur, tidak terstruktur) dan format log umum (CEF, CLF, W3C, Windows Event Log, JSON, Syslog, Logfmt), Anda dapat merancang sistem logging yang efektif. Log terstruktur seperti JSON sangat direkomendasikan untuk aplikasi modern karena kemudahan parsing dan analisis. Dengan mengikuti praktik terbaik, Anda dapat memastikan log Anda bermanfaat bagi pengembang dan operator, mempermudah analisis, dan mendukung observability yang andal.

Last updated