GNU/Linux >> Belajar Linux >  >> Ubuntu

Cara Mengatur Rotasi Log dengan Logrotate di Ubuntu 18.04/20.04

File log dimaksudkan untuk menyimpan informasi tentang aktivitas sistem untuk jangka waktu yang wajar, tetapi daemon pencatatan sistem tidak menyediakan sarana untuk mengontrol ukuran file log. Oleh karena itu, jika tidak dicentang, file log dapat tumbuh menggunakan semua ruang partisi yang tersedia di mana mereka berada. Untuk mencegah file log memenuhi sistem Anda sepenuhnya, pesan log dapat diputar, artinya ketika ambang tertentu telah tercapai, file log lama ditutup dan file log baru dibuka.

Di sini saya akan menunjukkan cara merotasi file log dengan logrotate di Ubuntu 18.04/20.04.

Apa itu rotasi log?

Rotasi log adalah proses yang memecahkan masalah ini dengan mengarsipkan file log saat ini secara berkala dan memulai yang baru. Ini mengganti nama dan secara opsional mengompresi file log saat ini, menghapus file log lama, dan memaksa sistem logging untuk mulai menggunakan file log baru. Biasanya berjalan secara otomatis melalui cron kegunaan. Dengan rotasi log, Anda dapat

  • mulai file log baru sesuai jadwal, seperti harian, mingguan, atau bulanan
  • kompres file log lama untuk menghemat ruang disk
  • pangkas arsip lama sehingga Anda hanya menyimpan sejumlah log lama.
  • ganti nama file log lama dengan cap tanggal sehingga Anda tahu di mana mencari log lama.
  • jalankan perintah sebelum atau setelah serangkaian log diputar.

Anda dapat melihat rotasi log sebagai proses yang mengganti nama file log saat ini dan menyiapkan file log baru untuk entri log baru. Saat file log diputar, file log lama biasanya disalin ke file yang memiliki tanggal rotasi di dalamnya.

1) File konfigurasi logrotate

Di Ubuntu 18.04, file konfigurasi logrotate adalah /etc/logrotate.conf , bersama dengan file apa pun di /etc/logrotate.d logrotate.conf utama file menentukan pengaturan default dan file sistem yang akan diputar. File berisi beberapa opsi yang dijelaskan dengan baik oleh komentar.

cat /etc/logrotate.conf 
# see "man logrotate" for details
# rotate log files weekly
weekly

# use the syslog group by default, since this is the owning group
# of /var/log/syslog.
su root syslog

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0660 root utmp
    rotate 1
}

# system-specific logs may be configured here

Opsi utama logrotate adalah:

  • mingguan: memutar file log seminggu sekali
  • su root syslog: akan mengarsipkan log menggunakan pengguna tertentu (root) dan grup (syslog) untuk mencegah masalah dengan izin
  • putar 4: memastikan bahwa empat versi lama file disimpan. Memutar log yang diberikan empat kali sebelum menghapusnya, sehingga log selama empat minggu tetap online.
  • buat: File lama disimpan dengan nama baru dan file baru dibuat
  • kompresi: kompres menyebabkan logrotate mengompresi file log untuk menghemat ruang. Ini dilakukan menggunakan gzip secara default, tetapi Anda dapat menentukan program lain
  • termasuk: Opsi penting ini memastikan bahwa isi direktori /etc/logrotate.d disertakan. Di direktori ini, terdapat file yang menentukan cara menangani beberapa file log individual.

Setiap file di /etc/logrotate.d digunakan untuk menambahkan pengaturan tambahan atau menimpa pengaturan default untuk file tertentu. Folder tersebut juga berisi konfigurasi logrotate dari semua paket yang Anda instal yang memerlukan rotasi log

# ls -l /etc/logrotate.d
total 40
-rw-r--r-- 1 root root 120 Nov 2 2017 alternatives
-rw-r--r-- 1 root root 442 Oct 23 2017 apache2
-rw-r--r-- 1 root root 126 Nov 20 16:39 apport
-rw-r--r-- 1 root root 173 Apr 20 10:08 apt
-rw-r--r-- 1 root root 112 Nov 2 2017 dpkg
-rw-r--r-- 1 root root 146 Apr 17 17:35 lxd
-rw-r--r-- 1 root root 845 Jan 12 10:57 mysql-server
-rw-r--r-- 1 root root 501 Jan 14 16:19 rsyslog
-rw-r--r-- 1 root root 178 Aug 15 2017 ufw
-rw-r--r-- 1 root root 235 Apr 17 14:53 unattended-upgrades

Anda dapat melihat misalnya konfigurasi logrotate untuk server web apache

# cat /etc/logrotate.d/apache2 
/var/log/apache2/*.log {
	daily
	missingok
	rotate 14
	compress
	delaycompress
	notifempty
	create 640 root adm
	sharedscripts
	postrotate
                if invoke-rc.d apache2 status > /dev/null 2>&1; then \
                    invoke-rc.d apache2 reload > /dev/null 2>&1; \
                fi;
	endscript
	prerotate
		if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
			run-parts /etc/logrotate.d/httpd-prerotate; \
		fi; \
	endscript
}

Logrotate berisi beberapa opsi tambahan yang dapat Anda lihat di atas:

  • harian: memutar log berdasarkan hari
  • missingok: Jangan memunculkan kesalahan jika log hilang
  • delaycompress: Jangan kompres file sampai sudah diputar. Ini untuk mencegah kerusakan jika daemon tidak segera menutup file log.
  • pemberitahuan kosong: Jangan memutar file log saat kosong
  • buat 640 root adm: ini akan membuat file log baru dengan izin, pemilik, dan grup yang ditetapkan
  • skrip bersama: Jika karakter pengganti cocok dengan beberapa file, jalankan skrip apa pun sekali untuk semua file
  • postrotate/endscript: Menentukan beberapa perintah atau skrip yang harus dijalankan hingga endscript kata kunci, setelah log diputar.
  • prerotate/endscript: sebagai postrotate/endscript , ini menentukan perintah atau skrip yang harus dijalankan sebelum rotasi log dimulai.

Anda dapat memperoleh beberapa informasi tentang opsi tambahan dengan menggunakan manual

man logrotate

2) Konfigurasikan rotasi log dengan logrotate

Perintah logrotate biasanya mengganti nama (atau memutar) file log secara siklis; file log akan diganti namanya agar berisi ekstensi numerik atau tanggal, dan file log baru akan dibuat untuk menerima informasi sistem. Jika logrotate dikonfigurasi untuk menyimpan hanya dua salinan file log lama, maka setelah dua rotasi log, file log terlama akan dihapus secara otomatis.

Biasanya perintah logrotate diinstal secara default di Ubuntu 18.04 Anda dan Anda dapat memeriksa versinya seperti di bawah ini

# logrotate --version
logrotate 3.11.0

Secara default, logrotate berjalan setiap hari dengan mengeksekusi skrip shell /etc/cron.daily/logrotate Anda akan melihat bahwa file cron lainnya tidak berisi file logrotate

cat /etc/cron.daily/logrotate 
#!/bin/sh

# Clean non existent log file entries from status file
cd /var/lib/logrotate
test -e status || touch status
head -1 status > status.clean
sed 's/"//g' status | while read logfile date
do
    [ -e "$logfile" ] && echo "\"$logfile\" $date"
done >> status.clean
mv status.clean status

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

Anda dapat melihat apa yang akan dilakukan konfigurasi logrotate aplikasi jika dijalankan dengan -d parameter perintah

# logrotate -d /etc/logrotate.d/mysql-server 
reading config file /etc/logrotate.d/mysql-server
Reading state from file: /var/lib/logrotate/status
Allocating hash table for state file, size 64 entries

Handling 1 logs

rotating pattern: /var/log/mysql.log /var/log/mysql/*log  after 1 days (7 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/mysql.log
error: skipping "/var/log/mysql.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.
Creating new state
considering log /var/log/mysql/error.log
Creating new state
  Now: 2018-05-22 06:02
  Last rotated at 2018-05-22 06:00
  log does not need rotating (log has been already rotated)

Anda dapat mengonfigurasi rotasi log sebagai pengguna root dan sebagai pengguna non-root.

a) Siapkan logrotasi untuk paket server yang diinstal

Logrotate file konfigurasi sebagai pengguna root dibuat di /etc/logrotate.d folder setiap hari. Misalnya, kami akan mengonfigurasi rotasi log untuk pengawas alat pemantauan. Pertama, kita akan membuat file rotasi log di mana kita akan menunjukkan file konfigurasi yang akan menyimpan log

# vim /etc/logrotate.d/supervisor
/var/log/supervisor/superviz.log {
        daily
        create 0640 root root
        missingok
        dateext
        rotate 3
        size=1M
        notifempty
        sharedscripts
        mail [email protected]
}

Mari kita jelaskan beberapa opsi:

  • teks tanggal: menggunakan tanggal sebagai ekstensi untuk file log versi lama
  • ukuran: log file yang tumbuh lebih besar dari ukuran yang ditentukan di sini
  • email: untuk menginstruksikan logrotate untuk mengirim e-mail isinya ke alamat yang ditentukan sebelum menimpanya. Anda harus memiliki server email yang berfungsi

Sekarang kita dapat menguji konfigurasi dengan memanggil logrotate pada mode debug yang menunjuk ke konfigurasi utama yang berisi folder kita. Perintah akan menampilkan beberapa informasi tetapi kami hanya akan mengurutkannya tentang konfigurasi kami

# logrotate /etc/logrotate.conf --debug
reading config file /etc/logrotate.conf
including /etc/logrotate.d
reading config file alternatives
reading config file apache2
reading config file apport
reading config file apt
reading config file dpkg
reading config file lxd
reading config file mysql-server
reading config file rsyslog
reading config file supervisor
reading config file ufw
reading config file unattended-upgrades
Reading state from file: /var/lib/logrotate/status
...
...
rotating pattern: /var/log/supervisor/supervisord.log  1048576 bytes (3 rotations)
empty log files are not rotated, old logs mailed to [email protected]
switching euid to 0 and egid to 106
considering log /var/log/supervisor/supervisord.log
Creating new state
  Now: 2018-05-22 08:16
  Last rotated at 2018-05-22 08:00
  log does not need rotating (log size is below the 'size' threshold)
switching euid to 0 and egid to 0
....
....

Anda dapat melihat bahwa konfigurasi kami belum perlu diputar. Hal ini dikarenakan kondisi ukuran yang belum terverifikasi. Setelah perintah ini berjalan tanpa kesalahan, berarti konfigurasi terlihat bagus.

b) Atur rotasi log untuk aplikasi khusus

Anda dapat mengonfigurasi rotasi log untuk aplikasi khusus yang menghasilkan log dan dijalankan sebagai pengguna non-root. Secara default logrotate berjalan setiap hari jadi, jika kita perlu menjalankan aplikasi kita setiap jam, kita akan membuat konfigurasi logrotate di luar folder default.

Mari kita ambil contoh dengan mengonfigurasi rotasi log untuk discord. Kami akan membuat folder pribadi yang akan berisi file konfigurasi logrotate utama dan folder untuk file log. Aplikasi ini tidak memiliki pemahaman tentang rotasi log sehingga logrotate akan menangani ini dengan menggunakan implementasi copy dan truncate

$ vim apps/logrotate.conf
/home/alain/apps/logs/discord.log {
        hourly
        copytruncate
        missingok
        dateext
        rotate 10
        compress
}

Kami menggunakan opsi baru copytruncate yang memotong file log lama di tempatnya setelah membuat salinan, alih-alih memindahkan file lama dan membuat yang baru. Ini berguna untuk layanan yang tidak dapat diminta untuk menutup file lognya.

Kami dapat menguji konfigurasi kami tetapi kami perlu menentukan file status. File ini mencatat apa yang dilihat dan dilakukan logrotate terakhir kali dijalankan sehingga tahu apa yang harus dilakukan saat dijalankan berikutnya. Perhatikan bahwa kita menjalankan perintah sebagai pengguna non-root

$ logrotate /home/alain/apps/logrotate.conf --state /home/alain/apps/logrotate-state --verbose
reading config file /home/alain/apps/logrotate.conf
Reading state from file: /home/alain/apps/logrotate-state
Allocating hash table for state file, size 64 entries

Handling 1 logs

rotating pattern: /home/alain/apps/logs/discord.log  hourly (10 rotations)
empty log files are rotated, old logs are removed
considering log /home/alain/apps/logs/discord.log
Creating new state
  Now: 2018-05-22 10:09
  Last rotated at 2018-05-22 10:00
  log does not need rotating (log has been already rotated)

Jika Anda mencoba perintah yang sama setelah beberapa jam, Anda dapat melihat beberapa informasi tambahan di output seperti pemotongan dan info kompresi

logrotate /home/alain/apps/logrotate.conf --state /home/alain/apps/logrotate-state --verbose
reading config file /home/alain/apps/logrotate.conf
Reading state from file: /home/alain/apps/logrotate-state
Allocating hash table for state file, size 64 entries
Creating new state

Handling 1 logs

rotating pattern: /home/alain/apps/logs/discord.log  hourly (10 rotations)
empty log files are rotated, old logs mailed to [email protected]
considering log /home/alain/apps/logs/discord.log
  Now: 2018-05-22 22:52
  Last rotated at 2018-05-22 10:23
  log needs rotating
rotating log /home/alain/apps/logs/discord.log, log->rotateCount is 10
dateext suffix '-2018052222'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
copying /home/alain/apps/logs/discord.log to /home/alain/apps/logs/discord.log-2018052222
truncating /home/alain/apps/logs/discord.log
compressing log with: /bin/gzip

Anda harus mempertahankan bahwa konfigurasi logrotate ditentukan oleh glob file yang cocok dengan file log, diikuti oleh serangkaian instruksi yang terlampir di dalam kurung kurawal. Jika opsi tidak ditentukan dalam bait yang dilampirkan pada nama file log, opsi tingkat atas dari /etc/logrotate.conf mengambil prioritas. File log yang telah diputar tidak disimpan di mana pun; mereka baru saja pergi sehingga Anda harus berpikir untuk mengambil tindakan.

Baca juga:

  • Cara Memeriksa Log Cron di Ubuntu 18.04
  • lnav - Alat untuk Melihat dan Menganalisis File Log dari Terminal Linux
  • Bagaimana Menggunakan Perintah Systemd journalctl Untuk Mengelola Log

Ubuntu
  1. Cara Mengatur Server FTP dengan VSFTPD di Ubuntu 20.04

  2. Cara Mengatur Server FTP dengan VSFTPD di Ubuntu 18.04

  3. Cara Setup IP Failover dengan KeepAlived di Ubuntu &Debian

  1. Cara mengatur kluster Apache Tomcat dengan 3 Node di Ubuntu

  2. Cara Mengatur GlassFish 4.1 dengan JAVA 8 di Ubuntu 15.04

  3. Cara Menambang Ethereum di Ubuntu 16.04/20.04

  1. Cara Mengatur Rotasi Log dengan Logrotate di Ubuntu 18.04/20.04

  2. Cara Memasang Dropbox di Ubuntu 18.04/20.04 (Terminal/GUI)

  3. Cara Mengonfigurasi Blok Server Nginx di Ubuntu 18.04/20.04