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 CustomLogmenentukan 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 errorcritalert, 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.