GNU/Linux >> Belajar Linux >  >> Linux

Putar dan arsipkan log dengan perintah Linux logrotate

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 dengan rotate 7 , ini berarti bahwa log akan disimpan selama tujuh hari terakhir. Opsi lainnya adalah weeklymonthlyyearly . Ada juga size parameter yang akan merotasi file log jika ukurannya melebihi batas yang ditentukan—misalnya, size 10ksize 10Msize 10G , dll. Jika tidak ada yang ditentukan, log akan diputar setiap kali logrotate berjalan. Anda bahkan dapat menjalankan logrotate dalam cron 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. Gunakan nocompress untuk mematikannya.
  • postrotate/endscript :Jalankan skrip dalam bagian ini setelah rotasi. Membantu dalam melakukan pembersihan. Ada juga prerotate/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.


Linux
  1. Menjadwalkan tugas dengan perintah cron Linux

  2. Diagnosis masalah konektivitas dengan perintah ping Linux

  3. Tonton perintah dan tugas dengan perintah jam tangan Linux

  1. Ganti kutipan pintar dengan perintah sed Linux

  2. Temukan file dan direktori di Linux dengan perintah find

  3. Salin dan tempel di baris perintah Linux dengan xclip

  1. Periksa status file di Linux dengan perintah stat

  2. Jadwalkan tugas dengan Linux pada perintah

  3. Cara menangkap sesi terminal dan output dengan perintah skrip Linux