Dalam sistem Linux dan hampir semua sistem – file log sangat penting dalam hal pemeriksaan dan pemecahan masalah kesalahan. Mereka memberikan petunjuk penting tentang apa yang bisa salah dengan berbagai layanan sistem sebelum kegagalan.
Layanan apa pun yang diinstal pada sistem Linux Anda seperti server web Apache atau server database MySQL menghasilkan file log yang biasanya disimpan di /var/log direktori. Jika Anda memeriksa isi direktori ini, Anda akan melihat konten yang mirip dengan yang kami miliki di bawah ini:
Seiring waktu, saat informasi tambahan dicatat, file log bertambah besar dan menghabiskan lebih banyak ruang di hard drive Anda. Bahkan sebelum Anda menyadarinya, file log akan membengkak dalam ukuran, memakan banyak ruang hard drive Anda, dan jika Anda tidak hati-hati, Anda dapat dengan mudah kehabisan ruang disk.
Dengan mengingat hal itu, menjadi bijaksana untuk menyimpan file log ke ukuran yang dapat dikelola dan menghapus entri log lama yang memonopoli ruang disk yang berharga. Dan di sinilah rotasi log masuk.
Apa itu rotasi log?
Rotasi log adalah proses yang membuat file log baru dan arsip &menghapus yang lama untuk menghemat ruang disk. Proses mengganti nama file log saat ini. Misalnya, apport.log menjadi apport.log.1 dan apport.log new baru file log dibuat untuk mencatat entri log baru. File log lama biasanya dikompresi dan muncul sebagai apport.log.2.gz , apport.log.3.gz , apport.log.4.gz , dan seterusnya.
Proses rotasi log difasilitasi menggunakan utilitas yang disebut logrotate . Ini adalah alat yang memfasilitasi rotasi file log dan pengarsipan &penghapusan yang lama untuk mengosongkan ruang disk. Singkatnya, logrotate menyelesaikan hal berikut:
- Pembuatan file log baru setelah merotasi yang lama.
- Arsip file log lama.
- Membersihkan file log lama yang telah dirotasi untuk menghemat ruang.
Rotasi log biasanya diaktifkan ketika ukuran file log bertambah dan melebihi batas tertentu.
Cara kerja utilitas logrotate
Sebelum kita memeriksa cara kerja dari utilitas logrotate, pastikan logrotate telah terinstal di sistem Anda. Untuk melakukannya, jalankan perintah:
Untuk Sistem Debian / Ubuntu:
$ sudo apt-get install logrotate -y
Untuk Sistem CentOS / RHEL / Fedora:
$ sudo yum install logrotate -yor $ sudo dnf install logrotate -y
Jalankan perintah di bawah ini untuk memeriksa versi logrotate,
linuxtech[email protected]:~$ logrotate --versionlogrotate 3.14.0 Perintah mail default: /usr/bin/mail Perintah kompres default: /bin/gzip Perintah uncompress default:/bin/gunzip Ekstensi kompres default:.gz Jalur file status default: /var/lib/logrotate/status Dukungan ACL: yes Dukungan SELinux: yes[email protected]:~$
Dari output, kita dapat dengan jelas melihat bahwa kita memiliki logrotate versi 3.14.0. Secara default, logrotate sudah diinstal sebelumnya di distribusi Linux modern dan karenanya tidak perlu menginstalnya.
Logrot file konfigurasi
Logrotate berjalan setiap hari sebagai tugas cron, melalui berbagai file log, memutarnya, dan membersihkan file log lama seperti yang didefinisikan dalam file konfigurasi. Ada dua sumber konfigurasi utama yang perlu Anda perhatikan:
/etc/logrotate.conf – Ini adalah file konfigurasi utama untuk alat logrotate. Ini berisi pengaturan default dan memfasilitasi rotasi log untuk log paket non-sistem. Lebih khusus lagi, ini menggunakan 'sertakan ' direktif untuk menarik konfigurasi yang terletak di '/etc/logrotate.d ' direktori. Mari kita lihat file konfigurasinya.
$ cat /etc/logrotate.conf
Dari konfigurasi yang ditampilkan, file /etc/logrotate.conf merotasi file log pada mingguan dasar seperti yang ditunjukkan pada baris 3 .
- Baris 7 menunjukkan bahwa pengguna root dan grup adm memiliki file log.
- Baris 10 menunjukkan bahwa hanya 4 minggu file log yang dicadangkan, setelah itu file log yang lebih lama akan dihapus atau dihapus untuk membuat lebih banyak ruang disk.
- Baris 13 menginstruksikan pembuatan file log baru setelah rotasi file log saat ini.
- Pernyataan sertakan pada baris 22 menarik konfigurasi file aplikasi yang terdaftar di direktori /etc/logrotate.d.
/etc/logrotate.d – Ini adalah direktori yang berisi konfigurasi logrotate dari paket yang diinstal yang file lognya memerlukan rotasi log. Biasanya, Anda juga cenderung menemukan file konfigurasi alat sistem seperti apt &dpkg (Untuk sistem Debian), rsyslog, ufw, dan cups-daemon. Inilah yang akan Anda temukan:
[email protected]:~$ ls -l /etc/logrotate.d/total 60-rw-r--r-- 1 root root 120 Sep 5 2019 alternatif-rw-r--r-- 1 root root 126 Des 4 20:25 apport-rw-r--r-- 1 root root 173 Apr 9 11:21 apt-rw-r--r-- 1 root root 91 Apr 1 10:49 bootlog-rw-r --r-- 1 root root 130 Jan 21 2019 btmp-rw-r--r-- 1 root root 181 Feb 17 08:19 cups-daemon-rw-r--r-- 1 root root 112 Sep 5 2019 dpkg-rw-r--r-- 1 root root 329 Feb 4 2019 nginx-rw-r--r-- 1 root root 94 Feb 8 2019 ppp-rw-r--r-- 1 root root 501 Mar 7 2019 rsyslog-rw-r--r-- 1 root root 677 Nov 29 02:08 speech-dispatcher-rw-r--r-- 1 root root 119 30 Mar 21:49 ubuntu-advantage-tools-rw-r --r-- 1 root root 178 21 Jan 22:16 ufw-rw-r--r-- 1 root root 235 Apr 13 23:37 unattended-upgrades-rw-r--r-- 1 root root 145 Feb 19 2018 wtmp[email protected]:~$
Mari kita lihat file konfigurasi alat pengelola paket dpkg.
$ cat -n /etc/logrotate.d/dpkg
- bulanan :Ini menginstruksikan rotasi file log sebulan sekali
- putar 12 :12 file log lama dicadangkan.
- kompres :Ini menyiratkan bahwa file yang diputar harus dikompresi menggunakan kompresi gzip default dengan file log yang memiliki ekstensi file .gz.
- Buat 644 root root :Membuat file log baru segera setelah rotasi log selesai dengan izin file oktal 644 dengan kepemilikan root oleh pengguna dan grup.
- missingok :Perintah tersebut menekan pesan kesalahan jika ada file log yang hilang.
- pemberitahuan kosong :Ini mengabaikan rotasi file jika file log kosong.
Buat contoh file konfigurasi logrotate
Mari kita asumsikan bahwa kita memiliki aplikasi yang berjalan sebagai pengguna linuxtechi dan menghasilkan file log yang disimpan di /home/linuxtechi/logs direktori. Kita perlu mengatur file log untuk dirotasi setiap minggu.
Tapi pertama-tama, kita akan membuat file konfigurasi logrotate di direktori home seperti yang ditunjukkan:
$ vim /home/linuxtechi/logrotate.conf
Selanjutnya, kita akan menempelkan konfigurasi yang ditunjukkan:
/home/linuxtechi/logs/*.log { mingguan missingok rotate 14 kompres create}
Mari kita masukkan ini ke dalam konteks:
File log akan dirotasi setiap minggu, dengan penekanan pesan kesalahan jika ada file log yang hilang. 14 file log akan dicadangkan dalam waktu sebulan dengan pembuatan file log baru setelah rotasi file log saat ini.
Sekarang kita akan membuat direktori log yang akan berisi file log aplikasi dan kemudian membuat file log bernama app.log.
[email protected]:~$ mkdir logs &&cd logs[email protected]:~/logs$ touch app.log[email protected]:~/logs$ lsapp.log[email protected]:~/logs$Sekarang, kita akan menjalankan perintah logrotate untuk membuat file status logrotate di direktori home untuk memverifikasi apakah entri log telah dibuat atau belum.
$ logrotate /home/linuxtechi/logrotate.conf --state /home/linuxtechi/logrotate-state --verboseAnda akan mendapatkan output seperti ini:
Dari output, file log tidak diputar karena alasan sederhana yaitu rotasi terjadi setiap minggu dan file log berumur hampir satu jam.
Periksa file logrotate untuk memverifikasi apakah ada informasi yang direkam tentang rotasi log yang dijalankan.
[email protected]:~$ cat logrotate-statelogrotate state -- versi 2"/home/linuxtechi/logs/app.log" 2020-5-24-17:0:0[email protected]:~$Dari output, kita dapat melihat bahwa utilitas logrotate diakui ketika terakhir dianggap sebagai file log untuk rotasi, dan stempel waktu dicetak.
Sekarang kita akan memaksa logrotate untuk memutar file log – yang tidak akan dilakukan untuk saat ini karena interval waktu yang ditentukan belum terlampaui – menggunakan –force bendera seperti yang ditunjukkan.
$ logrotate /home/linuxtechi/logrotate.conf --state /home/linuxtechi/logrotate-state --verbose --force
Jika Anda kembali ke direktori log, Anda akan melihat file log tambahan yang telah diputar dan dikompresi seperti yang ditunjukkan.
[email protected]:~$ cd logs/[email protected]:~/logs$ lsapp.log app.log.1.gz[email protected]:~/logs$Kompres dan putar file log berdasarkan ukurannya
Terkadang, file log dapat bertambah besar dan menghabiskan ruang bahkan sebelum interval waktu yang ditentukan untuk rotasi, baik harian, mingguan, atau bulanan.
Salah satu cara untuk mengatasi masalah ini adalah dengan menentukan ukuran maksimum file yang bila terlampaui, rotasi file log akan dipicu. Untuk mencapai ini, tentukan maxsize pilihan dalam file logrotate.
Misalnya, untuk memicu rotasi saat ukuran file bertambah lebih dari 40 Megabita, sertakan opsi:
ukuran maksimal 40M
Mari kita asumsikan kita membuat file rotasi log khusus untuk aplikasi kita di bawah folder /etc/logrotate.d,
[email protected]:~$ cd /etc/logrotate.d/[email protected]:/etc/logrotate.d$ sudo vi custom-app/home/linuxtechi/logs/app-access.log{ daily missingok ukuran 40M putar 4 kompres buat}Simpan dan Tutup file,
Akhiran M menunjukkan Megabyte , Untuk kilobyte gunakan k sementara G menunjukkan ukuran dalam Gigabytes .
Pernyataan tersebut menyiratkan bahwa file log yang lebih besar dari 40 Megabyte akan diputar tanpa memperhatikan interval waktu rotasi. Ini menyiratkan bahwa untuk file log yang akan diputar setelah 1 jam, akan diputar sebelum interval yang ditentukan jika melebihi ambang 40MB.
Mari kita buang beberapa data ke dalam file log dari aplikasi kustom kita dan kemudian lihat bagaimana logrotate akan memutar file log,
[email protected]:~$ dd if=/dev/zero of=/home/linuxtechi/logs/app-access.log bs=1M count=2525+0 record in25+0 record out26214400 byte (26 MB, 25 MiB) disalin, 0,0422015 d, 621 MB/s[email protected]:~$ du -sh /home/linuxtechi/logs/app-access.log25M /home/linuxtechi/logs/app-access.log[email protected] :~$Gunakan ‘-d ’ pada perintah logrotate untuk menjalankan dry run logrotate pada file log, jalankan perintah berikut,
$ logrotate -d /etc/logrotate.d/custom-app
Seperti yang bisa kita lihat di output, logrotate tidak akan memutar file log karena ukurannya tidak lebih dari 40MB.
Sekarang Mari kita buat ukuran file log lebih dari 40MB,
[email protected]:~$ cd logs/[email protected]:~/logs$ dd if=/dev/zero of=app-access.log bs=1M count=4545+0 record in45+0 record out47185920 byte (47 MB, 45 MiB) disalin, 0,136979 d, 344 MB/dt[email protected]:~/logs$ du -sh app-access.log46M app-access.log[email protected]:~/logs$Sekarang, coba jalankan perintah logrotate dengan opsi '-d' lagi,
Output di atas mengonfirmasi bahwa logroate akan memutar file log karena ukurannya lebih dari 40MB.
Selain meningkatkan rotasi file log berdasarkan ukuran, sebaiknya pastikan bahwa file konfigurasi logrotate dipanggil pada frekuensi reguler menggunakan cron job. Ini sangat penting untuk file log yang ukurannya membengkak begitu cepat dan berisiko mengisi ruang disk Anda.
Ada dua cara untuk melakukannya:
Anda dapat menyalin skrip logrotate dari direktori /etc/cron.daily ke lokasi /etc/cron.hourly. Ini akan mengubah rotasi log menjadi per jam, bukan harian.
Cara lain adalah dengan menentukan cron job di file /etc/crontab seperti yang ditunjukkan
*/10 * * * * /etc/cron.daily/logrotateIni akan memicu rotasi setelah setiap 10 menit.
Menggunakan crontab untuk memanggil skrip logrotate selain menentukan ukuran maksimum menggunakan direktif maxsize, membuat kombinasi sempurna dalam memastikan bahwa file log Anda diputar pada waktu yang tepat untuk menghindari pengisian hard drive Anda.
Untuk opsi tambahan dengan alat logrotate, kunjungi halaman manual seperti yang ditunjukkan:
Kesimpulan
Dalam panduan ini, kami telah menjelaskan pentingnya file log, ancaman yang dapat ditimbulkannya jika ukurannya dibiarkan bertambah, dan bagaimana alat logrotate dapat membantu mengelola ukuran file log di sistem Anda. Kami juga melihat beberapa opsi yang tersedia untuk digunakan dalam konfigurasi logrotate.
5 Alat Caching Linux Sumber Terbuka Teratas yang Direkomendasikan oleh Geeks Cara Menggunakan Loop di Ansible PlaybookLinux