Sistem Operasi Linux dan aplikasi yang berjalan sering menghasilkan log ke file. File-file ini sering disimpan di /var/log
direktori atau file lain yang ditentukan oleh aplikasi. Jika file log ini tidak diputar, dikompresi, dan dipangkas secara berkala, mereka pada akhirnya akan menghabiskan semua ruang disk yang tersedia yang menyebabkan server membeku.
Dalam panduan ini, kita akan melihat cara kerja logrotate kemudian melihat contoh tentang cara mengonfigurasi logrotasi untuk aplikasi kustom kita.
Prasyarat
Untuk mengikuti panduan ini, Anda perlu:
- Distro Linux modern seperti Ubuntu, Debian, Centos, Rhel, Rocky Linux
- Akses root ke server atau pengguna dengan hak sudo
Periksa versi logrotate Anda dengan perintah ini:
logrotate --version
Keluaran dari sistem saya:
# logrotate --version
logrotate 3.8.6
Jika Logrotate tidak diinstal, Anda akan mendapatkan kesalahan. Silakan instal perangkat lunak menggunakan manajer paket distribusi Linux Anda.
Logrotate Konfigurasi
Konfigurasi logrotate dapat ditemukan di file ini /etc/logrotate.conf
. Di sinilah pengaturan default berada. Anda juga akan menemukan beberapa konfigurasi rotasi untuk log yang tidak dimiliki oleh paket sistem mana pun.
Baris terpenting dalam file konfigurasi ini adalah include /etc/logrotate.d
. Ini menginstruksikan logrotate untuk juga memeriksa konfigurasi yang ditambahkan di direktori itu. Ini berarti bahwa untuk aplikasi kita, kita tidak perlu menambahkan semua yang ada di file utama itu, kita dapat membuat file konfigurasi individual dan menambahkannya ke /etc/logrotate.d
direktori. Sebagian besar paket yang Anda instal yang memerlukan bantuan rotasi log akan menempatkan file konfigurasi logrotatenya di direktori tersebut juga.
Ini adalah beberapa konten dari /etc/logrotate.conf
utama berkas:
weekly
rotate 4
create
dateext
compress
weekly
konfigurasikan rotasi log mingguan dengan file log yang dimiliki oleh root pengguna dan syslog gruprotate 4
empat file log disimpan (simpan simpanan selama 4 minggu)create
file log kosong baru dibuat setelah yang sekarang diputardateex
gunakan tanggal sebagai akhiran dari file yang diputarcompress
kompres file yang diputar
Untuk file individual di /etc/logrotate.d
direktori, mari kita lihat satu sebagai contoh:
cat /etc/logrotate.d/yum
Keluaran:
/var/log/yum.log {
missingok
notifempty
maxsize 30k
yearly
create 0600 root root
}
Masing-masing konfigurasi tersebut akan mewarisi konfigurasi default di /etc/logrotate.conf
direktori.
Penjelasan:
/var/log/yum.log
baris pertama ini menyatakan file mana yang menjadi target konfigurasimissingok
jika file tidak ada, itu masih ok dan logrotate tidak boleh error atau mencatat kesalahan apa punnotifempty
jangan putar file log jika kosongmaxsize
jika ukurannya melebihi 30k, putaryearly
berjalan setahun sekalicreate 0600 root root
buat file baru yang diputar sebagairoot
:root
dengan izin0600
Beberapa opsi lain yang tidak tercantum di atas:
rotate 30
simpan tiga puluh file, pangkas yang terlama jika melebihimonthly
rotasi sebulan sekalicompress
kompres file yang diputar. ini menggunakangzip
secara default dan menghasilkan file yang diakhiri dengan.gz
. Perintah kompresi dapat diubah menggunakancompresscmd
pilihan.
Mencatat file log aplikasi khusus
Ketika kami memiliki aplikasi khusus kami yang menghasilkan dan menulis log ke file, tugas kami adalah mengonfigurasi bagaimana rotasi dilakukan untuk file itu.
- Jika kita memiliki akses root, idealnya kita menempatkan file konfigurasi di
/etc/logrotate.d/
direktori dan itu akan berfungsi seperti yang dijelaskan di atas - Jika kita tidak memiliki akses root, kita harus mengonfigurasi cron untuk menjalankan
logrotate
perintah melewati konfigurasi yang kita definisikan - Jika Anda ingin merotasi log lebih sering daripada harian – seperti setiap jam karena penyiapan Logrotate sistem hanya berjalan sekali sehari
Konfigurasi di /etc/logrotate.d/
Katakanlah kita memiliki log penghasil aplikasi ke /var/log/our-app/app.log
dan itu berjalan sebagai centos
. Mari kita buat file konfigurasi logrotate /etc/logrotate/ourapp.conf
dengan beberapa contoh konfigurasi:
sudo vim /etc/logrotate.d/ourapp.conf
Konfigurasi:
/var/log/our-app/*.log {
daily
missingok
rotate 30
compress
notifempty
create 0640 centos centos
sharedscripts
postrotate
systemctl reload our-app
endscript
}
Beberapa arahan baru:
create 0640 centos centos
membuat file log kosong setelah rotasi dengan izin yang ditentukan0640
dan pengguna dan grup tertentucentos
sharedscripts
berarti skrip apa pun yang ditambahkan ke konfigurasi hanya dijalankan sekali per proses, bukan untuk setiap file yang diputar. Jika direktif/var/log/our-app/*.log
cocok dengan lebih dari satu file log, skrip yang ditentukan dalampostrotate
akan berjalan dua kali tanpa opsi inipostrotate
keendscript
blok berisi skrip untuk dijalankan setelah file log diputar. Dalam kasus kami, memuat ulang aplikasi. Ini terkadang diperlukan agar aplikasi Anda beralih ke file log yang baru dibuat. Perhatikan bahwapostrotate
berjalan sebelum log dikompresi. Kompresi bisa memakan waktu lama, dan perangkat lunak Anda harus segera beralih ke file log baru. Untuk tugas yang perlu dijalankan setelah log dikompresi, gunakanlastaction
blokir saja.
Untuk menguji konfigurasi di atas, gunakan perintah ini:
sudo logrotate /etc/logrotate.conf --debug
Outputnya adalah tentang file log mana yang ditangani Logrotate dan apa yang akan dilakukan terhadapnya. Pekerjaan Logrotate standar akan berjalan sekali sehari dan menyertakan konfigurasi baru Anda.
Contoh data di output
...
rotating pattern: /var/log/our-app/*.log after 1 days (30 rotations)
empty log files are not rotated, old logs are removed
No logs found. Rotation not needed.
...
Menggunakan logrotate
perintah untuk konfigurasi khusus
Jika Anda tidak memiliki akses root ke sistem dan Anda ingin membuat logrotate file kustom Anda sendiri, bagian ini memberi Anda cara untuk melakukannya.
Katakanlah sebuah aplikasi our-app
menghasilkan file log dan menyimpan di jalur khusus di dalam direktori home kami mis. ~/apps/our-app/logs/
. Jika log sering dibuat, kami ingin merotasinya hourly
. Tapi logrotate tidak bekerja setiap jam?
Pertama mari kita buat file konfigurasi logrotate. Saya akan menempatkan file di dalam direktori app conf di jalur ini ~/apps/our-app/conf/lorotate.conf
dengan konfigurasi berikut:
Edit filenya:
vim ~/apps/our-app/conf/lorotate.conf
Dengan konfigurasi berikut:
/home/centos/apps/our-app/logs/*.log {
rotate 30
hourly
compress
sharedscripts
delaycompress
missingok
notifempty
dateext
dateformat -%Y-%m-%d-%s
copytruncate
}
Konfigurasi di atas merotasi file di direktori /home/centos/apps/our-app/logs/*.log
setiap jam, mengompresi dan hanya menyimpan 30 log lama.
copytruncate
menyalin konten file log ke file baru kemudian memotong file log.dateformat
menentukan format file yang diputardateext
menginstruksikan logrotate untuk menyertakan ekstensi tanggal untuk file yang dirotasi.
Untuk menguji:
mkdir -p ~/apps/our-app/{logs,conf}
touch ~/apps/our-app/logs/app.log
Sekarang kita memiliki file di tempat kita sekarang dapat menggunakan logrotate
untuk memutarnya. Satu-satunya hal yang perlu kita lakukan adalah menentukan state
mengajukan. Sebuah state
file merekam apa yang logrotate
melihat terakhir kali dijalankan sehingga tahu apa yang harus dilakukan. Untuk pengaturan pemasangan sistem, sudah ditangani di /var/lib/logrotate/status
tetapi dalam kasus kami, kami perlu menentukan.
Kita dapat menggunakan direktori home untuk ini:
logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose
--verbose
akan mencetak informasi terperinci tentang apa yang dilakukan Logrotate.
Anda akan melihat output seperti ini:
$ logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose
reading config file /home/centos/apps/our-app/config/logrotate.conf
Allocating hash table for state file, size 15360 B
Handling 1 logs
rotating pattern: /home/centos/apps/our-app/logs/*.log hourly (30 rotations)
empty log files are not rotated, old logs are removed
considering log /home/centos/apps/our-app/logs/app.log
log does not need rotating (log has been already rotated)set default create context
Beberapa informasi dicatat dalam file status logrotate:
$ cat ~/logrotate-status
logrotate state -- version 2
"/home/centos/apps/our-app/logs/app.log" 2021-9-4-6:0:0
Logrotate mencatat log yang dilihatnya dan kapan terakhir mempertimbangkannya untuk rotasi. Jika kita menjalankan perintah yang sama satu jam kemudian, log akan diputar seperti yang diharapkan.
Jika Anda ingin memaksa Logrotate untuk memutar file log padahal seharusnya tidak, gunakan --force
bendera:
logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose --force
Ini berguna saat menguji postrotate
dan skrip lainnya.
Hal berikutnya adalah menjalankan perintah di atas secara otomatis. Ini dapat dicapai dengan menggunakan crons. crontab
perintah sangat berguna.
Untuk mengedit crons kita bisa menggunakan perintah ini:
crontab -e
Ini akan membuka sebuah file teks. Mungkin sudah ada beberapa komentar dalam file yang menjelaskan sintaks dasar yang diharapkan. Pindahkan kursor ke bawah ke baris kosong baru di akhir file dan tambahkan berikut ini:
3 * * * * /usr/sbin/logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status
Di atas akan menjalankan perintah logrotate setiap menit ke-3 setiap jam. Kami menggunakan jalur lengkap /usr/sbin/logrotate
jadi kita tidak mendapatkan kesalahan Command not found.
Simpan file dan keluar. Ini akan menginstal crontab dan tugas kita akan berjalan pada jadwal yang ditentukan.
Kesimpulan
Kami melihat logrotate dalam panduan ini. Kami dapat memverifikasi versinya, memeriksa konfigurasi default dan mengatur pengaturan kustom kami sendiri. Untuk mempelajari lebih lanjut tentang baris perintah dan opsi konfigurasi yang tersedia untuk Logrotate, Anda dapat membaca halaman manualnya dengan menjalankan man logrotate
di terminal Anda:
man logrotate