Pendahuluan
Administrasi server tidak hanya tentang konfigurasi awal layanan. Ini juga melibatkan mengawasi layanan tersebut dan memastikannya berjalan semulus mungkin. Salah satu sumber pengetahuan yang paling penting bagi administrator adalah file log, yang berisi informasi tentang kejadian sistem.
Dalam kasus server web, seperti Nginx, log berisi informasi berharga tentang setiap upaya untuk mengakses sumber daya melalui server web. Setiap pengunjung situs web dan gambar yang dilihat atau file yang didownload dengan cermat terdaftar di log. Saat terjadi kesalahan, mereka akan diselamatkan di log juga. Jauh lebih mudah bekerja dengan file log yang terstruktur dengan baik.
Dalam panduan ini, kita akan melihat bagaimana memanfaatkan modul logging Nginx. Kami akan menyiapkan file log terpisah untuk blok server yang berbeda dan kemudian menyesuaikan keluaran logging. Kami juga akan menambahkan informasi tambahan tentang permintaan (dalam contoh tutorial ini, waktu yang dibutuhkan untuk melayani permintaan) ke log akses melebihi apa yang dijelaskan oleh Nginx secara default.
Apa yang saya butuhkan ?
Untuk mengikuti panduan ini, ada beberapa hal yang harus anda penuhi, diantaranya :
- Satu server Debian 8 yang disiapkan dengan tutorial pengaturan server awal ini, termasuk pengguna sudo non-root (user biasa).
- Nginx yang sudah terinstal di server Anda.
Langkah 1. Membuat File Test
Pada langkah ini, kita akan membuat beberapa file uji di direktori website Nginx default. Kami akan menggunakannya untuk menguji konfigurasi logging kami.
Saat Nginx (atau server web lainnya) menerima permintaan HTTP untuk sebuah file, saat membuka file tersebut dan melayaninya kepada pengguna dengan mentransfer isinya melalui jaringan. Semakin kecil file, semakin cepat bisa ditransfer. Saat file ditransfer secara penuh, permintaan dianggap selesai, dan baru kemudian ditransfer login.
Mari buat file 1 megabyte bernama 1mb.test di direktori Nginx default menggunakan truncate.
$ sudo truncate -s 1M /var/www/html/1mb.test
Demikian pula mari kita membuat dua file dengan ukuran berbeda, 10 dan 100 megabyte pertama, menamai mereka sesuai dengan itu.
$ sudo truncate -s 10M /var/www/html/10mb.test $ sudo truncate -s 100M /var/www/html/100mb.test
Selanjutnya, mari kita membuat file kosong juga:
$ sudo touch /var/www/html/empty.test
Kami akan menggunakan file-file ini pada langkah selanjutnya untuk mengisi file log dengan konfigurasi default, dan kemudian di tutorial untuk menunjukkan konfigurasi yang disesuaikan.
Langkah 2 – Memahami Konfigurasi Default
Modul log adalah modul inti Nginx, yang berarti tidak perlu dipasang secara terpisah untuk digunakan. Konfigurasi default, bagaimanapun, adalah minimal. Pada langkah ini, kita akan melihat bagaimana konfigurasi default bekerja.
Pada instalasi baru, Nginx mencatat semua permintaan ke dua file terpisah: log akses dan log kesalahan. Log kesalahan, terletak di /var/log/nginx/error.log, menyimpan informasi tentang kesalahan server yang tidak biasa, atau kesalahan dalam memproses permintaan.
Log akses, terletak di /var/log/nginx/access.log, digunakan lebih sering. Di situlah informasi tentang semua permintaan ke Nginx disimpan. Dalam log ini Anda dapat melihat, antara lain, file mana yang pengguna akses, browser web yang mereka gunakan, alamat IP yang mereka miliki, dan kode status HTTP yang diberikan Nginx kepada setiap permintaan.
Mari kita lihat seperti contoh baris dari file log akses. Pertama, minta file kosong yang kita buat di Langkah 1 dari Nginx sehingga file log tidak akan kosong.
$ curl -i http://localhost/empty.test
Sebagai tanggapan, Anda harus melihat beberapa header respons HTTP:
Response headers Nginx
HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Fri, 09 Dec 2016 23:05:18 GMT
Content-Type: application/octet-stream
Content-Length: 0
Last-Modified: Fri, 09 Dec 2016 23:05:13 GMT
Connection: keep-alive
ETag: "584b38a9-0"
Accept-Ranges: bytes
Mari kita lihat apakah ini sesuai dengan apa yang disimpan Nginx di log aksesnya. File log hanya dapat dibaca oleh pengguna administratif, jadi sudo harus digunakan untuk mengaksesnya.
$ sudo tail /var/log/nginx/access.log
Log akan berisi baris seperti ini, sesuai dengan permintaan uji yang telah kami keluarkan sebelumnya.
127.0.0.1 - - [09/Dec/2016:23:07:02 +0000] "GET /empty.test HTTP/1.1" 200 0 "-" "curl/7.38.0"
Nginx menggunakan Combined Log Format, yang merupakan format standar log akses yang umum digunakan oleh server web untuk interoperabilitas. Dalam format ini, setiap bagian informasi dibatasi oleh satu ruang; tanda hubung mewakili potongan informasi yang hilang.
Langkah 3 – Mengkonfigurasi Akses Log Terpisah
Selanjutnya, kita akan mengganti konfigurasi pembalakan default (di mana Nginx menyimpan satu file log akses untuk semua permintaan) dan membuat Nginx malah menyimpan file log terpisah untuk blok server default yang disertakan dengan instalasi Nginx yang bersih. Anda bisa berkenalan dengan Nginx Server Blocks pada tutorial Debian 7.
Ini adalah praktik yang baik untuk menyimpan file log terpisah untuk setiap blok server, yang secara efektif memisahkan log dari situs web yang berbeda satu sama lain. Hal ini tidak hanya membuat file log menjadi lebih mudah, namun mudah dibaca untuk menganalisis kesalahan dan aktivitas yang mencurigakan.
Untuk mengubah konfigurasi blok server Nginx default, buka file konfigurasi server Nginx di nano atau editor teks favorit Anda.
$ sudo nano /etc/nginx/sites-available/default
Temukan konfigurasi block server, yang terlihat seperti dibawah ini.
. . . # Default server configuration # server { listen 80 default_server; listen [::]:80 default_server; . . .
dan tambahkan dua baris yang ditandai merah ke konfigurasi:
. . . # Default server configuration # server { listen 80 default_server; listen [::]:80 default_server; access_log /var/log/nginx/default-access.log; error_log /var/log/nginx/default-error.log; . . .
Perintah access_log menetapkan path ke file dimana log akses akan disimpan, dan error_log melakukan hal yang sama untuk log kesalahan. Kami menggunakan direktori yang sama dengan log Nginx default (/ var / log / nginx), namun dengan nama file yang berbeda. Jika Anda memiliki beberapa blok server, ada baiknya Anda memberi nama file log dengan cara yang konsisten dan berarti, seperti menggunakan nama domain di nama file.
Simpan dan tutup file yang akan keluar.
Untuk mengaktifkan konfigurasi baru, restart Nginx.
$ sudo systemctl restart nginx.service
Untuk menguji konfigurasi baru, jalankan permintaan yang sama untuk file uji kosong kami seperti sebelumnya.
$ curl -i http://localhost/empty.test
Periksa apakah baris log identik dengan yang kita lihat sebelumnya ditulis ke file terpisah yang baru saja kita konfigurasikan.
$ sudo tail /var/log/nginx/default-access.log
Pada langkah selanjutnya, kami akan menyesuaikan format log dalam file baru ini dan menyertakan informasi tambahan.
Langkah 4 – Mengkonfigurasi Format Log Kustom
Di sini, kami akan menyiapkan format log kustom untuk membuat Nginx mencatat informasi tambahan (berapa lama permintaan tersebut diproses), dan mengkonfigurasi blok server default untuk menggunakan format baru ini.
Kita perlu mendefinisikan format log yang baru sebelum bisa digunakan. Di Nginx, setiap format log memiliki nama unik, yaitu global untuk keseluruhan server. Blok server individu dapat dikonfigurasi untuk menggunakan format tersebut nanti hanya dengan mengacu pada nama mereka.
Untuk menentukan format logging yang baru, buat file konfigurasi baru yang disebut timed-log-format.conf di direktori konfigurasi tambahan Nginx.
$ sudo nano /etc/nginx/conf.d/timed-log-format.conf
Tambahkan isi berikut:
log_format timed '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" $request_time';
Simpan dan tutup file yang akan keluar.
Petunjuk pengaturan log_format mendefinisikan format log yang baru. Unsur berikutnya adalah pengenal unik dari format ini; Di sini kita menggunakan waktunya, tapi Anda bisa memilih nama apapun.
Selanjutnya adalah format log itu sendiri, terbagi menjadi tiga baris untuk keterbacaan. Nginx memaparkan informasi tentang semua permintaan dalam variabel sistem yang dinamai yang didahului dengan tanda dolar. Ini akan diganti dengan informasi aktual tentang permintaan saat menulis rincian permintaan ke dalam log akses (mis., $ Request_addr akan diganti dengan alamat IP pengunjung).
Format di atas identik dengan Common Log Format yang telah dibahas sebelumnya dengan satu perbedaan: penambahan variabel sistem request_time $ di akhir. Nginx menggunakan variabel ini untuk menyimpan berapa lama permintaan tersebut dalam milidetik, dan dengan menggunakan variabel ini dalam format log kami, kami memberi tahu Nginx untuk menulis informasi tersebut ke file log.
Sekarang kita memiliki format log kustom yang diberi nama ditentukan dalam konfigurasi Nginx, namun blok server default tidak menggunakan format ini. Selanjutnya, buka server blok file konfigurasi Nginx.
$ sudo nano /etc/nginx/sites-available/default
Temukan blok konfigurasi server yang telah kita modifikasi sebelumnya dan tambahkan nama format log berjangka waktu ke pengaturan access_log seperti yang disorot di bawah ini dengan warna merah:
. . . # Default server configuration # server { listen 80 default_server; listen [::]:80 default_server; access_log /var/log/nginx/default-access.log timed; error_log /var/log/nginx/default-error.log; . . .
Simpan dan tutup file untuk keluar.
Untuk mengaktifkan konfigurasi baru, restart Nginx.
$ sudo systemctl restart nginx.service
Sekarang semuanya sudah siap, mari kita periksa apakah semuanya berhasil.
Langkah 5 – Memverifikasi Konfigurasi Baru
Kita bisa menguji konfigurasi baru dengan memohon beberapa permintaan ke Nginx dengan curl, seperti yang kita lakukan di langkah 2. Kali ini kita akan menggunakan contoh file yang dibuat pada langkah 1:
$ curl -i http://localhost/empty.test $ curl -i http://localhost/1mb.test $ curl -i http://localhost/10mb.test $ curl -i http://localhost/100mb.test
Anda akan melihat bahwa setiap perintah berikutnya akan memakan waktu lebih lama untuk dijalankan, karena file menjadi lebih besar dan membutuhkan lebih banyak waktu untuk mentransfernya.
Mari tampilkan log akses setelah menjalankan permintaan tersebut.
$ sudo tail /var/log/nginx/default-access.log
Log sekarang akan berisi lebih banyak baris, namun empat yang terakhir akan sesuai dengan permintaan pengujian yang baru Anda jalankan.
127.0.0.1 - - [09/Dec/2016:23:07:02 +0000] "GET /empty.test HTTP/1.1" 200 0 "-" "curl/7.38.0" 127.0.0.1 - - [09/Dec/2016:23:08:28 +0000] "GET /empty.test HTTP/1.1" 200 0 "-" "curl/7.38.0" 0.000 127.0.0.1 - - [09/Dec/2016:23:08:28 +0000] "GET /1mb.test HTTP/1.1" 200 1048576 "-" "curl/7.38.0" 0.000 127.0.0.1 - - [09/Dec/2016:23:08:28 +0000] "GET /10mb.test HTTP/1.1" 200 10485760 "-" "curl/7.38.0" 0.302 127.0.0.1 - - [09/Dec/2016:23:08:39 +0000] "GET /100mb.test HTTP/1.1" 200 68516844 "-" "curl/7.38.0" 7.938
Anda akan melihat bahwa jalur berbeda setiap kali, menunjukkan nama file yang benar, dan ukuran permintaan meningkat setiap saat. Bagian yang penting adalah nomor yang disorot terakhir, yaitu waktu pemrosesan permintaan dalam milidetik yang baru saja kita konfigurasikan dalam format log khusus kami. Seperti yang Anda harapkan, semakin besar file yang didapat, semakin lama waktu yang dibutuhkan untuk mentransfer.
Kesimpulan
Meskipun tidak terlalu berguna untuk melihat file yang lebih besar membutuhkan waktu lebih lama untuk ditransfer, waktu pemrosesan permintaan bisa sangat berguna saat Nginx digunakan untuk menyajikan situs web dinamis. Hal ini dapat digunakan untuk melacak kemacetan di situs web dan dengan mudah menemukan permintaan yang memakan waktu lebih lama dari yang seharusnya.
$ request_time hanyalah satu dari sekian banyak variabel sistem yang ditunjukkan Nginx yang dapat digunakan dalam konfigurasi logging custom. Yang lainnya termasuk, misalnya, nilai header respon dikirim dengan tanggapan terhadap klien. Menambahkan variabel lain ke format log semudah memasukkannya ke dalam format log seperti yang kita lakukan dengan $ request_time. Ini adalah alat yang hebat yang dapat Anda gunakan untuk keuntungan Anda saat mengkonfigurasi penebangan untuk situs web Anda.
Daftar variabel yang dapat digunakan dengan format log Nginx dijelaskan dalam dokumentasi modul log Nginx.