Log sangat bagus untuk mencari tahu apa yang sedang dilakukan aplikasi atau memecahkan masalah yang mungkin terjadi. Hampir setiap aplikasi yang kami tangani menghasilkan log, dan kami ingin aplikasi yang kami kembangkan sendiri untuk membuatnya juga. Semakin banyak log yang bertele-tele, semakin banyak informasi yang kita miliki. Tetapi jika dibiarkan sendiri, kayu gelondongan dapat tumbuh hingga ukuran yang tidak dapat diatur, dan pada gilirannya, dapat menjadi masalah mereka sendiri. Jadi, ada baiknya untuk tetap memangkasnya, menyimpan yang akan kita perlukan, dan mengarsipkan sisanya.
Lebih banyak sumber daya Linux
- Lembar contekan perintah Linux
- Lembar contekan perintah Linux tingkat lanjut
- Kursus online gratis:Ikhtisar Teknis RHEL
- Lembar contekan jaringan Linux
- Lembar contekan SELinux
- Lembar contekan perintah umum Linux
- Apa itu container Linux?
- Artikel Linux terbaru kami
Dasar
logrotate
utilitas sangat baik dalam mengelola log. Itu dapat memutarnya, mengompresnya, mengirim email, menghapusnya, mengarsipkannya, dan memulai yang baru saat Anda membutuhkannya.
Menjalankan logrotate
cukup sederhana—jalankan logrotate -vs state-file config-file
. Pada perintah di atas, v
opsi mengaktifkan mode verbose, s
menentukan file status, dan config-file
terakhir menyebutkan file konfigurasi, di mana Anda menentukan apa yang perlu Anda lakukan.
Hands-on
Mari kita lihat logrotate
konfigurasi yang berjalan tanpa suara di sistem kami, mengelola banyak log yang kami temukan di /var/log
direktori. Periksa file saat ini di direktori itu. Apakah Anda melihat banyak *.[number].gz
file? Itulah yang logrotate
sedang melakukan. Anda dapat menemukan file konfigurasi untuk ini di bawah /etc/logrotate.d/rsyslog
. Milik saya terlihat seperti ini:
/var/log/syslog
{
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
}
/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{
rotate 4
weekly
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
}
File dimulai dengan menentukan petunjuk untuk memutar /var/log/syslog
file dan instruksi yang terkandung dalam kurung kurawal yang mengikuti. Inilah artinya:
rotate 7
:Menyimpan log dari tujuh rotasi terakhir. Kemudian mulailah menghapusnya.daily
:Putar log setiap hari. Bersamaan denganrotate 7
, ini berarti bahwa log akan disimpan selama tujuh hari terakhir. Opsi lainnya adalahweekly
,monthly
,yearly
. Ada jugasize
parameter yang akan merotasi file log jika ukurannya melebihi batas yang ditentukan—misalnya,size 10k
,size 10M
,size 10G
, dll. Jika tidak ada yang ditentukan, log akan diputar setiap kalilogrotate
berjalan. Anda bahkan dapat menjalankanlogrotate
dalamcron
untuk menggunakannya pada interval waktu yang lebih spesifik.missingok
:Tidak apa-apa jika file log hilang. Jangan Panik.notifempty
:Jangan dirotasi jika file log kosong.delaycompress
:Jika kompresi aktif, tunda kompresi hingga putaran berikutnya. Ini memungkinkan setidaknya satu file yang diputar tetapi tidak terkompresi untuk hadir. Berguna jika Anda ingin log kemarin tetap tidak terkompresi untuk pemecahan masalah. Hal ini juga membantu jika beberapa program mungkin masih menulis ke file lama sampai dimulai ulang/dimuat ulang, seperti Apache.compress
:Kompresi aktif. Gunakannocompress
untuk mematikannya.postrotate/endscript
:Jalankan skrip dalam bagian ini setelah rotasi. Membantu dalam melakukan pembersihan. Ada jugaprerotate/endscript
untuk melakukan sesuatu sebelum rotasi dimulai.
Bisakah Anda mengetahui apa yang dilakukan bagian selanjutnya untuk semua file yang disebutkan dalam konfigurasi di atas? Satu-satunya parameter tambahan di bagian kedua adalah sharedscripts
, yang memberi tahu logrotate
untuk tidak menjalankan bagian dalam postrotate/endscript
sampai semua rotasi log selesai. Ini mencegah skrip dieksekusi untuk setiap log yang diputar dan dijalankan sekali di akhir.
Sesuatu yang Baru
Saya menggunakan konfigurasi berikut untuk menangani akses Nginx dan log kesalahan di sistem saya.
/var/log/nginx/access.log
/var/log/nginx/error.log {
size 1
missingok
notifempty
create 544 www-data adm
rotate 30
compress
delaycompress
dateext
dateformat -%Y-%m-%d-%s
sharedscripts
extension .log
postrotate
service nginx reload
endscript
}
Script di atas dapat dijalankan dengan menggunakan:
logrotate -vs state-file /tmp/logrotate
Menjalankan perintah untuk pertama kalinya memberikan output ini:
reading config file /tmp/logrotate
extension is now .log
Handling 1 logs
rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log 1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
log needs rotating
considering log /var/log/nginx/error.log
log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508250'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding logs to compress failed
glob finding old rotated logs failed
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508250.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx
Dan menjalankannya untuk kedua kalinya:
reading config file /tmp/logrotate
extension is now .log
Handling 1 logs
rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log 1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
log needs rotating
considering log /var/log/nginx/error.log
log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508280'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
compressing log with: /bin/gzip
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508280.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx
Dan menjalankannya untuk ketiga kalinya:
reading config file /tmp/logrotate
extension is now .log
Handling 1 logs
rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log 1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
log needs rotating
considering log /var/log/nginx/error.log
log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508316'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
compressing log with: /bin/gzip
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508316.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx
Isi dari file negara terlihat seperti ini:
logrotate state -- version 2
"/var/log/nginx/error.log" 2021-08-27-9:0:0
"/var/log/nginx/access.log" 2021-08-27-9:11:56
Unduh lembar contekan logrotate Linux.
Artikel ini awalnya diterbitkan di blog pribadi penulis dan telah diadaptasi dengan izin.