Log berguna saat Anda ingin melacak penggunaan atau memecahkan masalah aplikasi. Namun, karena lebih banyak informasi yang dicatat, file log menggunakan lebih banyak ruang disk. Lembur file log dapat tumbuh menjadi ukuran berat. Kehabisan ruang disk karena file log yang besar merupakan masalah, tetapi file log yang besar juga dapat memperlambat proses pengubahan ukuran atau pencadangan server virtual Anda. Selain itu, sulit untuk mencari peristiwa tertentu jika Anda memiliki sejuta entri log untuk ditelusuri. Jadi, ada baiknya untuk menyimpan file log ke ukuran yang dapat dikelola, dan memangkasnya saat sudah terlalu tua untuk tidak banyak digunakan.
Untungnya, utilitas logrotate membuat rotasi log menjadi mudah. “Rotasi log” mengacu pada praktik pengarsipan log aplikasi saat ini, memulai log baru, dan menghapus log lama. Sistem biasanya menjalankan logrotate sekali sehari, dan ketika dijalankan, sistem akan memeriksa aturan yang dapat disesuaikan berdasarkan per-direktori atau per-log.
Cara kerja logrotate
Sistem menjalankan logrotate sesuai jadwal, biasanya setiap hari. Pada sebagian besar distribusi, skrip yang menjalankan logrotate setiap hari terletak di/etc/cron.daily/logrotate
.
Beberapa distribusi menggunakan variasi. Sebagai contoh, di Gentoo, skrip logrotate terletak di /etc/cron.daily/logrotate.cron
.
Jika Anda ingin logrotate berjalan lebih sering (untuk rotasi log per jam, misalnya), Anda perlu menggunakan cron untuk menjalankan logrotate melalui skrip di/etc/cron.hourly
.
Saat logrotate berjalan, ia membaca file konfigurasinya untuk menentukan di mana menemukan file log yang perlu dirotasi, seberapa sering file harus diputar ulang, dan berapa banyak log yang diarsipkan untuk disimpan.
logrotate.conf
File konfigurasi logrotate utama terletak di /etc/logrotate.conf
.
File berisi parameter default yang digunakan logrotate saat memutar log. File dikomentari, sehingga Anda dapat membaca sekilas untuk melihat bagaimana konfigurasi diatur. Beberapa perintah khusus dalam file tersebut akan dijelaskan nanti dalam artikel ini.
Perhatikan bahwa satu baris dalam file berbunyi:
include /etc/logrotate.d
Direktori itu berisi sebagian besar file konfigurasi khusus aplikasi.
logrotate.d
Gunakan perintah berikut untuk membuat daftar isi direktori yang menyimpan pengaturan log khusus aplikasi:
ls /etc/logrotate.d
Tergantung pada seberapa banyak yang diinstal pada server Anda, direktori ini mungkin tidak berisi file atau beberapa. Secara umum, aplikasi yang diinstal melalui yourpackage manager juga akan membuat file konfigurasi di /etc/logrotate.d
.
Biasanya direktori berisi file konfigurasi untuk layanan syslog Anda, yang dibaca logrotate ketika memutar log sistem. File ini berisi entri untuk berbagai log sistem, bersama dengan beberapa perintah yang mirip dengan yang ada di logrotate.conf
.
CATATAN: Pada versi sistem operasi Ubuntu sebelum Karmic Koala (9.10) tidak ada entri untuk layanan syslog. Sebelum rilis itu, log sistem diputar oleh savelog
perintah dijalankan dari /etc/cron.daily/sysklogd
naskah.
Di dalam file aplikasi
Sebagai contoh, perhatikan konten file konfigurasi logrotate yang mungkin ada saat Anda menginstal Apache pada sistem Fedora:
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}
Saat logrotate berjalan, ia memeriksa file apa pun di /var/log/httpd
yang diakhiri denganlog
dan memutarnya, jika tidak kosong. Jika memeriksa direktori httpd dan tidak menemukan file log apa pun, itu tidak menghasilkan kesalahan. Kemudian menjalankan perintah di postrotate/endscript
block (dalam hal ini, perintah yang memberitahu Apache untuk memulai ulang), tetapi hanya setelah ia memproses semua log yang ditentukan.
File contoh ini tidak berisi beberapa pengaturan yang termasuk dalam logrotate.conf
mengajukan. Perintah di logrotate.conf
bertindak sebagai default untuk rotasi log. Anda dapat menentukan pengaturan yang berbeda untuk aplikasi apa pun saat Anda ingin mengganti default. Misalnya, jika Anda menggunakan server web yang sibuk, Anda mungkin ingin menyertakan daily
perintah di blok konfigurasi Apache sehingga log Apache akan dirotasi setiap hari, bukan rotasi mingguan default.
Bagian selanjutnya menjelaskan beberapa perintah yang lebih umum digunakan yang sebenarnya dilakukan dalam file konfigurasi logrotate.
Perintah konfigurasi
Anda bisa mendapatkan daftar lengkap perintah yang digunakan dalam file konfigurasi logrotate dengan memeriksa halaman manual:
man logrotate
Bagian ini menjelaskan perintah yang lebih umum digunakan.
Ingat, file konfigurasi untuk aplikasi di /etc/logrotate.d
mewarisi default mereka dari /etc/logrotate.conf
utama berkas.
Log file
File log dan perilaku rotasinya ditentukan dengan mendaftar file log (atau file) diikuti oleh serangkaian perintah yang diapit dalam tanda kurung kurawal. Sebagian besar file konfigurasi aplikasi hanya akan berisi satu blok ini, tetapi dimungkinkan untuk menempatkan lebih dari satu dalam satu file, atau menambahkan blok file log ke logrotate.conf
utama berkas.
Anda dapat membuat daftar lebih dari satu file log untuk satu blok dengan menggunakan wildcard dalam nama atau dengan memisahkan file log dalam daftar dengan spasi. Misalnya, untuk menentukan semua file di direktori /var/foo yang diakhiri dengan .log
, dan file/var/bar/log.txt
, Anda akan mengatur blok sebagai berikut:
/var/foo/*.log /var/bar/log.txt {
rotate 14
daily
compress
delaycompress
sharedscripts
postrotate
/usr/sbin/apachectl graceful > /dev/null
Endscript
}
Memutar hitungan
rotate
perintah menentukan berapa banyak log yang diarsipkan dikembalikan sebelum logrotate mulai menghapus yang lama. Misalnya:
rotate 4
Perintah ini memberi tahu logrotate untuk menyimpan empat log yang diarsipkan sekaligus. Jika ada empat log yang diarsipkan saat log diputar lagi, yang terlama akan dihapus untuk memberi ruang bagi arsip baru.
Interval rotasi
Anda dapat menentukan perintah yang memberi tahu logrotate seberapa sering memutar log tertentu. Perintah yang mungkin termasuk:
daily
weekly
monthly
yearly
Jika interval rotasi tidak ditentukan, log akan diputar setiap kalilogrotate berjalan (kecuali kondisi lain seperti size
telah disetel).
Jika Anda ingin menggunakan interval waktu selain yang ditentukan, Anda perlu menggunakan cron untuk membuat file konfigurasi terpisah. Misalnya, jika Anda ingin memutar file log tertentu setiap jam, Anda dapat membuat file di/etc/cron.hourly
(Anda mungkin perlu membuat direktori itu juga) yang akan berisi baris seperti berikut:
/usr/sbin/logrotate /etc/logrotate.hourly.conf
Kemudian Anda akan meletakkan konfigurasi untuk logrotate yang dijalankan setiap jam (lokasi file log, apakah akan mengompresi file lama atau tidak, dan seterusnya) ke dalam/etc/logrotate.hourly.conf
.
Ukuran
Anda dapat menggunakan size
perintah untuk menentukan ukuran file untuk logrotate untuk diperiksa saat menentukan apakah akan melakukan rotasi. Format perintah memberitahulogrotate unit apa yang Anda gunakan untuk menentukan ukurannya:
size 100k
size 100M
size 100G
Contoh pertama akan memutar log jika lebih besar dari 100 kilobyte, dan yang kedua jika lebih besar dari 100 megabyte, dan yang ketiga jika lebih dari 100 gigabyte. Saya tidak merekomendasikan menggunakan batas 100G, ingatlah, contohnya hanya sedikit di luar kendali di sana.
Perintah ukuran lebih diprioritaskan dan menggantikan interval rotasi jika keduanya disetel.
Kompresi
Jika Anda ingin file log yang diarsipkan dikompresi (dalam format gzip), Anda dapat memasukkan perintah berikut, biasanya di /etc/logrotate.conf
:
compress
Kompresi biasanya merupakan ide yang bagus, karena file log biasanya semua teks dan teks terkompresi dengan baik. Namun, jika Anda memiliki beberapa log yang diarsipkan yang tidak ingin Anda kompres, tetapi Anda tetap ingin kompresi diaktifkan secara default, Anda dapat menyertakan perintah berikut dalam konfigurasi khusus aplikasi:
nocompress
Perintah lain yang perlu diperhatikan sehubungan dengan kompresi adalah sebagai berikut:
delaycompress
Perintah ini berguna jika Anda ingin mengompresi log yang diarsipkan, tetapi ingin menunda kompresi. Saat delaycompress
aktif, sebuah archivedlog dikompresi saat log diputar lagi. Ini bisa menjadi penting ketika Anda memiliki program yang mungkin masih menulis ke file log lama untuk beberapa saat setelah yang baru diputar. Perhatikan bahwa delaycompress
hanya berfungsi jika Anda memiliki compress
dalam konfigurasi Anda.
Contoh waktu yang baik untuk menggunakan delaycompress
akan terjadi ketika logrotatediminta untuk me-restart Apache dengan direktif "anggun" atau "reload". Karena proses Apache lama tidak berakhir sampai koneksi mereka selesai, mereka berpotensi mencoba memasukkan lebih banyak item ke file lama untuk beberapa waktu setelah restart. Menunda kompresi memastikan bahwa Anda tidak akan kehilangan entri log tambahan tersebut saat log diputar.
Postrotate
Logrotate menjalankan postrotate
skrip setiap kali memutar log yang ditentukan dalam blok konfigurasi. Anda biasanya ingin menggunakan skrip ini untuk memulai ulang aplikasi setelah rotasi log sehingga aplikasi dapat beralih ke log baru.
postrotate
/usr/sbin/apachectl restart > /dev/null
endscript
>/dev/null
memberitahu logrotate untuk menyalurkan output perintah ke mana-mana. Dalam hal ini, Anda tidak perlu melihat output jika aplikasi dimulai ulang dengan benar.
postrotate
perintah memberitahu logrotate bahwa skrip yang akan dijalankan, dimulai pada baris berikutnya, dan endscript
perintah mengatakan bahwa skrip sudah selesai.
Skrip Bersama
Biasanya logrotate menjalankan postrotate
skrip setiap kali memutar log. Hal ini juga berlaku untuk beberapa log yang menggunakan blok konfigurasi yang sama. Misalnya, blok konfigurasi server web yang mengacu pada log akses dan log kesalahan akan, jika memutar keduanya, menjalankan postrotate
skrip dua kali (sekali untuk setiap file yang diputar). Jika kedua file diputar, server web akan dimulai ulang dua kali.
Agar logrotate tidak menjalankan skrip itu untuk setiap log, Anda dapat memasukkan perintah berikut:
sharedscripts
Perintah ini memberitahu logrotate untuk memeriksa semua log untuk blok konfigurasi tersebut sebelum menjalankan postrotate
naskah. Jika salah satu atau kedua log diputar, postrotate
skrip hanya berjalan sekali. Jika tidak ada logsis yang diputar, postrotate
skrip tidak berjalan.
Ke mana harus pergi selanjutnya
Artikel ini memberikan gambaran umum tentang apa yang dilakukan logrotate dan jenis opsi konfigurasi yang tersedia untuk Anda. Anda sekarang harus dapat menjelajahi konfigurasi yang ada dan menyesuaikannya dengan kebutuhan Anda. Untuk mempelajari cara membuat contoh konfigurasi (untuk merotasi log untuk host virtual khusus), lihat Contoh konfigurasi dan pemecahan masalah rotasi log.