Apache adalah HTTP server open-source dan lintas-platform. Apache memiliki banyak fitur canggih yang dapat diperluas dengan berbagai modul. Saat mengelola web server Apache, salah satu tugas yang paling sering Anda lakukan adalah memeriksa file log.
Mengetahui cara mengkonfigurasi dan membaca log sangat berguna ketika memecahkan masalah server atau aplikasi karena mereka memberikan informasi debugging yang terperinci.
Apache menulis catatan kejadiannya dalam dua jenis log: access logs dan error logs. Access logs mencakup informasi tentang permintaan klien, dan error logs mencakup informasi tentang masalah server dan aplikasi.
Artikel ini menjelaskan cara mengkonfigurasi dan membaca access dan error logs di Apache.
Konfigurasi Access logs di Apache
Server web Apache menghasilkan event baru di access log untuk semua permintaan yang diproses. Setiap catatan event berisi timestamp dan mencakup berbagai informasi tentang klien dan sumber daya yang diminta. Access logs menunjukkan lokasi pengunjung, halaman yang mereka kunjungi, berapa banyak waktu yang mereka habiskan di halaman, dan banyak lagi.
Directive CustomLog
menentukan lokasi file log dan format pesan yang dicatat. Sintaks paling mendasar dari direktif CustomLog
adalah sebagai berikut:
CustomLog log_file format [condition];
log_file
dapat berupa relatif ke ServerRoot
atau path lengkap ke file log. Pesan log juga dapat disalurkan ke program lain menggunakan simbol pipe |
.
Argumen kedua, format
ini menentukan format dari pesan log. Ini bisa berupa definisi format eksplisit atau nama panggilan yang ditentukan oleh arahan LogFormat
.
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined CustomLog logs/access.log combined
CustomLog logs/access.log "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\""
Untuk menghindari pengulangan kode yang sama beberapa kali, lebih baik mendefinisikan directive LogFormat
dan menggunakannya sebagai nama panggilan dalam directive CustomLog
.
Untuk daftar lengkap semua string format dan modifiers, periksa dokumentasi modul “mod_log_config
”.
Argumen ketiga [condition]
adalah opsional dan memungkinkan Anda untuk menulis pesan log hanya ketika kondisi tertentu terpenuhi. Biasanya, ini dilakukan dengan menggunakan environment variable. Kondisi bisa dibuat negatif dengan simbol !
.
Misalnya, jika Anda ingin mengecualikan permintaan untuk file css untuk ditulis ke file log, Anda akan menggunakan yang berikut ini:
SetEnvIf Request_URI \.css$ css-file CustomLog logs/access.log custom env=!css-file
Untuk mengubah format log, Anda bisa menentukan direktif LogFormat
baru atau mengganti format default. Biasanya lebih baik untuk menentukan format baru.
Walaupun Access log memberikan informasi yang sangat berguna, namun penggunaan ruang disk cukup besar dan dapat memengaruhi kinerja server. Jika server Anda kekurangan sumber daya dan Anda memiliki situs web yang sibuk, Anda mungkin ingin menonaktifkan Access log.
Untuk melakukan itu, cukup berikan comment atau hapus directive CustomLog
dari konfigurasi server utama dan bagian server virtual.
Jika Anda ingin mematikan Access log hanya untuk satu host virtual, setel argumen pertama dari arahan CustomLog
ke /dev/null
CustomLog /dev/null combined
Konfigurasi Error Log
Apache menulis pesan tentang kesalahan umum dan kesalahan aplikasi server dalam file error log. Jika Anda mengalami kesalahan dalam aplikasi web Anda, error log adalah tempat pertama untuk memulai untuk mengatasi masalah.
Directive ErrorLog
menentukan lokasi nama error log. Dibutuhkan bentuk berikut:
ErrorLog log_file
Jika path ke log_file
tidak absolut, maka akan ditetapkan sebagai relatif ke ServerRoot
. Pesan error juga dapat disalurkan ke program lain menggunakan simbol pipe |
.
Parameter LogLevel
menetapkan tingkat logging. Berikut adalah level-level yang terdaftar berdasarkan tingkat keparahannya (dari rendah ke tinggi):
trace1
–trace8
– Pesan terkait Trace.debug
– Pesan terkait Debugging.info
– Pesan informasional saja.notice
– Pesan terkait pemberitahuan pada Apache.warn
– Pesan terkait Warning (peringatan) pada aplikasi web.error
– Errors ketika melakukan request.crit
– Critical. perlu analisa lebih pada pengaturan apache.alert
– Alerts. Perhatikan pesan yang muncul.emerg
– Emergency. Apache down dan perlu analisa .
Setiap level log termasuk level yang lebih tinggi. Sebagai contoh, jika Anda mengatur level log pada tingkatan warn
, Apache juga tetap menulis pesan error
, crit
, alert
, dan emerg
.
Ketika parameter LogLevel
tidak ditentukan, default adalahwarn
. Namun dianjurkan untuk mengatur level ke setidaknya crit
.
Directive ErrorLogFormat
menentukan format error log. Pada sebagian besar distribusi Linux, Apache server menggunakan format default, yang cukup untuk sebagian besar kasus.
Virtual Host dan Global Logging
Perilaku logging dan lokasi file dapat diatur secara global atau per virtual host.
Kemudian directives CustomLog
atau ErrorLog
diatur dalam konteks server utama, server menulis semua pesan log ke akses yang sama dan file log kesalahan. Jika tidak, jika arahan ditempatkan di dalam blok <VirtualHost>
, hanya pesan log untuk virtual host yang ditulis ke file yang ditentukan.
Directive log yang diatur dalam blok <VirtualHost>
akan menimpa set pengaturan yang ada dalam konteks server utama. Virtual Host tanpa directive CustomLog
atau ErrorLog
akan membuat pesan log mereka ditulis ke log server global.
Untuk lebih mudah menganalisa, disarankan untuk mengatur access dan error log terpisah untuk setiap virtual host. Berikut ini sebuah contoh:
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com ServerAdmin [email protected] DocumentRoot /var/www/example.com/public LogLevel warn ErrorLog /var/www/example.com/logs/error.log CustomLog /var/www/example.com/logs/access.log combined </VirtualHost>
Setiap kali Anda memodifikasi file konfigurasi, Anda harus me-restart layanan Apache agar perubahan diterapkan.
Location Log Files Apache di Debian, Ubuntu dan CentOS
Secara default pada distribusi berbasis Debian seperti Ubuntu, akses dan log kesalahan terletak di direktori /var/log/apache2
. Pada CentOS file log ditempatkan di direktori /var/log/httpd
.
Cara Membaca dan Memahami File Log Apache
File log dapat dibuka dan diuraikan menggunakan perintah standar seperti cat
, less
, grep
, cut
, awk
, dan sebagainya.
Berikut adalah contoh record dari file log akses yang menggunakan format log combine
di Debian:
192.168.30.1 - - [08/Jan/2020:21:39:03 +0000] "GET / HTTP/1.1" 200 6169 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
Mari kita uraikan apa arti setiap field record:
%h
–192.168.30.1
– Hostname atau alamat IP klien yang mengajukan permintaan.%l
–-
– Remote logname. Ketika nama pengguna tidak disetel, bidang ini menunjukkan-
.%u
–-
– Jika permintaan dikonfirmasi, nama pengguna jarak jauh ditampilkan..%t
–[08/Jan/2020:21:39:03 +0000]
– Waktu server lokal.\"%r\"
–"GET / HTTP/1.1"
– Baris permintaan pertamaJenis permintaan, jalur, dan protokol.%>s
–200
– Kode respons server akhir. Jika simbol>
tidak digunakan dan permintaan telah dialihkan secara internal, itu akan menunjukkan status permintaan asli.%O
–396
– Ukuran respons server dalam byte.\"%{Referer}i\"
–"-"
– URL dari referral.\"%{User-Agent}i\"
–Mozilla/5.0 ...
– user agent klien (browser web).
Gunakan perintah tail
untuk melihat file log secara real-time:
tail -f access.log
Kesimpulan
File log memberi Anda informasi yang berguna tentang masalah server dan bagaimana pengunjung berinteraksi dengan situs web Anda.
Apache memiliki sistem pencatatan yang sangat dapat dikonfigurasi yang memungkinkan Anda untuk menyesuaikan akses dan kesalahan log sesuai dengan kebutuhan Anda.