TUTORIAL

Cara Mengelola File Log dengan Logrotate di Ubuntu 20.04

Logrotate
Teknomid

Table of Contents

Logrotate adalah utilitas sistem yang mengelola rotasi otomatis dan kompresi file log. Jika file log tidak rotate, dikompresi, dan dipangkas secara berkala, mereka akhirnya dapat menghabiskan semua ruang disk yang tersedia pada sistem.

Logrotate sudah terinstall secara default di Ubuntu 20.04, dan diatur untuk menangani kebutuhan rotasi log dari semua paket yang diinstal, termasuk rsyslog, prosesor log sistem default.

Pada artikel ini, kita akan menjelajahi konfigurasi Logrotate default, lalu mengonfigurasi rotasi log untuk aplikasi yang ada di system kita.

Persyaratan

Tutorial ini mengasumsikan Anda memiliki server Ubuntu 20.04, dengan pengguna non-root sudo-enabled, seperti yang dijelaskan dalam Pengaturan Server Awal dengan Ubuntu 20.04 .
 
Logrotate juga tersedia di banyak distribusi Linux lainnya, tetapi konfigurasi defaultnya mungkin sangat berbeda. Bagian lain dari tutorial ini akan tetap berlaku selama versi Logrotate Anda mirip dengan Ubuntu 20.04. Ikuti Langkah 1 untuk menentukan versi Logrotate Anda.
 
Masuk ke server Anda sebagai user sudoer untuk memulai.

Langkah 1 - Mengonfirmasi Versi Logrotate Anda

Logrotate diinstal secara default di Ubuntu. Namun, jika Anda perlu menginstalnya, jalankan perintah berikut untuk memperbarui daftar paket dan mengambil paket:
sudo apt update
sudo apt install logrotate
Jika Anda menggunakan server non-Ubuntu, pastikan terlebih dahulu Logrotate diinstal dan cek versinya:
logrotate --version
Output
logrotate 3.14.0
Default mail command:       /usr/bin/mail
Default compress command:   /bin/gzip
Default uncompress command: /bin/gunzip
Default compress extension: .gz
Default state file path:    /var/lib/logrotate/status
ACL support:                yes
SELinux support:            yes
 

Jika Logrotate diinstal tetapi versinya sangat berbeda, Anda mungkin mengalami masalah dengan beberapa opsi konfigurasi yang dieksplorasi dalam tutorial ini. Lihat dokumentasi untuk versi spesifik Logrotate Anda dengan membaca manualnya (man):
man logrotate
 
Anda juga dapat melihat versi online dari dokumentasi Logrotate. Selanjutnya kita akan melihat struktur konfigurasi default Logrotate di Ubuntu.

Langkah 2 - Explore Konfigurasi Logrotate

Informasi konfigurasi Logrotate umumnya dapat ditemukan di dua tempat di Ubuntu:
/etc/logrotate.conf :  file ini berisi beberapa pengaturan default dan mengatur rotasi untuk beberapa log yang tidak dimiliki oleh paket sistem mana pun. Itu juga menggunakan includepernyataan untuk menarik konfigurasi dari file apa pun di direktori /etc/logrotate.d .
 
/etc/logrotate.d/ : di sinilah paket apa pun yang Anda instal yang memerlukan bantuan dengan rotasi log akan menempatkan konfigurasi Logrotate-nya. Pada instalasi standar, Anda seharusnya sudah memiliki file di sini untuk alat sistem inti seperti apt, dpkg, rsyslogdan seterusnya.
 
Secara default, logrotate.conf akan mengonfigurasi rotasi log mingguan, dengan file log yang dimiliki oleh pengguna root dan grup syslog , dengan empat file log disimpan pada satu waktu ( rotate 4), dan file log kosong baru dibuat setelah yang sekarang diputar ( create).
 
Mari kita lihat file konfigurasi Logrotate paket di /etc/logrotate.d. cat file untuk apt utilitas package:
cat /etc/logrotate.d/apt
Output
/var/log/apt/term.log {
  rotate 12
  monthly
  compress
  missingok
  notifempty
}
/var/log/apt/history.log {
  rotate 12
  monthly
  compress
  missingok
  notifempty
}
 
File ini berisi blok konfigurasi untuk dua file log yang berbeda dalam /var/log/apt/direktori : term.log dan history.log. Mereka berdua memiliki pilihan yang sama. Opsi apa pun yang tidak disetel dalam blok konfigurasi ini akan mewarisi nilai default atau yang disetel dalam /etc/logrotate.conf.

Pengaturan apa pun dalam file logrotate akan menggantikan nilai default logrotate, yang dikonfigurasi dalam /etc/logrotate.conf. Opsi yang disetel untuk aptlog adalah:
rotate 12: menyimpan dua belas file log lama. Ini menimpa rotate 4default.
monthly: putar sebulan sekali. Ini menimpa weekly default.

compress: kompres file yang diputar. ini menggunakan gzipsecara default dan menghasilkan file yang diakhiri dengan .gz. Perintah kompresi dapat diubah menggunakan compress cmd opsi.
 
missingok: jangan menulis pesan kesalahan jika file log hilang.
notifempty: jangan putar file log jika kosong.
 
File konfigurasi ini juga mewarisi createperilaku default , yang menginstruksikan Logrotate untuk membuat log baru setelah rotasi. Ini dapat diganti dengan nocreate, meskipun itu akan secara efektif menonaktifkan sebagian besar fungsi lainnya.
 
Ada lebih banyak opsi konfigurasi yang tersedia. Anda dapat membaca tentang semuanya dengan mengetik man logrotatedi baris perintah untuk membuka halaman manual Logrotate.
 
Selanjutnya, kita akan menyiapkan file konfigurasi untuk menangani log untuk layanan fiksi yang disebut your-app.

Langkah 3 - Setting Contoh Konfigurasi

Untuk mengelola file log menggunakan logrotate untuk aplikasi  pre-packaged dan pre-configured di system service, kami memiliki dua opsi:
1.  Buat file konfigurasi Logrotate baru dan letakkan di /etc/logrotate.d/.
Ini akan dijalankan setiap hari sebagai pengguna root bersama dengan semua pekerjaan Logrotate standar lainnya.
2.  Buat file konfigurasi baru dan jalankan di luar pengaturan Logrotate default Ubuntu.

 

Ini hanya benar-benar diperlukan jika Anda perlu menjalankan Logrotate sebagai pengguna non- root , atau jika Anda ingin merotasi log lebih sering daripada setiap hari ( hourly konfigurasi di /etc/logrotate.d/ tidak akan efektif, karena pengaturan Logrotate sistem hanya berjalan sekali sehari).
 
Mari kita telusuri dua opsi ini dengan beberapa contoh penyiapan.
Menambahkan Konfigurasi ke /etc/logrotate.d/
Kami ingin mengonfigurasi rotasi log untuk server web app yang menempatkan access.log dan error.log ke /var/log/your-app/. Ini berjalan sebagai www-data pengguna dan grup.
 
Untuk menambahkan konfigurasi your-appfile log ke /etc/logrotate.d/, pertama buka file baru di /etc/logrotate.d direktori menggunakan nanoatau editor pilihan Anda:

sudo nano /etc/logrotate.d/your-app

/etc/logrotate.d/ your-app
/var/log/your-app/*.log {
    daily
    missingok
    rotate 14
    compress
    notifempty
    create 0640 www-data www-data
    sharedscripts
    postrotate
        systemctl reload your-app
    endscript
}
 
Beberapa arahan konfigurasi baru dalam file ini adalah:
create 0640 www-data www-data :  ini membuat file log kosong baru setelah rotasi, dengan izin tertentu ( 0640), user (www-data), dan grup (www-data).
 
shared scripts : tanda ini berarti bahwa script apa pun yang ditambahkan ke konfigurasi hanya dijalankan sekali per proses, bukan untuk setiap file yang diputar. Karena jalur menyertakan wildcard , konfigurasi ini akan cocok dengan sejumlah file log di direktori.
 
Tanpa opsi, skrip yang ditentukan dalam akan berjalan setiap kali logrotate memproses file log tanpa opsi ini .
/var/log/your-app/*.log*your-app shared scripts post rotate
postrotateto endscript : blok ini berisi skrip untuk dijalankan setelah file log diputar.
 
Dalam hal ini kami memuat ulang aplikasi contoh kami. Ini terkadang diperlukan agar aplikasi Anda beralih ke file log yang baru dibuat. Perhatikan bahwa postrotateberjalan 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, gunakan lastaction blok sebagai gantinya.
Untuk menyimpan dan keluar nano, tekan Ctrl+X, dan saat diminta, Ylalu Enter. Anda dapat menguji file konfigurasi dengan melakukan dry run:
sudo logrotate /etc/logrotate.conf --debug
 
Perintah ini memanggil logrotate, mengarahkannya ke file konfigurasi standar, dan mengaktifkan mode debug.
Informasi akan dicetak tentang file log mana yang ditangani Logrotate dan apa yang akan dilakukan terhadapnya. Jika semuanya terlihat baik, Anda selesai.
 
Pekerjaan Logrotate standar akan berjalan sekali sehari dan menyertakan konfigurasi baru Anda.
Selanjutnya, kita akan mencoba setup yang tidak menggunakan konfigurasi default Ubuntu sama sekali.

Langkah 4 - Membuat Konfigurasi Logrotate Independen

Dalam contoh ini kami memiliki aplikasi yang berjalan sebagai pengguna kami sammy, menghasilkan log yang disimpan di /home/sammy/logs/. Kami ingin memutar log ini setiap jam, jadi kami perlu mengaturnya di luar /etc/logrotate.dstruktur yang disediakan oleh Ubuntu.
Pertama, kita akan membuat file konfigurasi di direktori home kita. Buka di editor teks:
nano /home/sammy/logrotate.conf
/home/sammy/logrotate.conf
/home/sammy/logs/*.log {
    hourly
    missingok
    rotate 24
    compress
    create
}
 
Simpan dan tutup file. Kami telah menemukan semua opsi ini di langkah sebelumnya, tetapi mari kita rangkum: konfigurasi ini akan memutar file setiap jam, mengompresi dan menyimpan dua puluh empat log lama dan membuat file log baru untuk menggantikan yang diputar.
 
Anda harus menyesuaikan konfigurasi agar sesuai dengan aplikasi Anda, tetapi ini adalah awal yang baik.
Untuk menguji apakah konfigurasi berfungsi, mari buat file log. Pertama cdke direktori home pengguna Anda menggunakan perintah cd ~.

Kemudian buat direktori untuk log menggunakan mkdirperintah. Terakhir buat file kosong di logsdirektori menggunakan touchperintah. Jalankan perintah berikut untuk menyelesaikan langkah-langkah ini:
cd ~
mkdir logs
touch logs/access.log
 
Sekarang kita memiliki file log kosong di tempat yang tepat, mari jalankan perintah  logrotate.
Karena log kepemilikan user sammy kita tidak perlu menggunakan sudo. Namun, kita tidak perlu menentukan flag berkas.
 
File ini mencatat apa yang logrotate ditemukan dan tindakan apa pun yang dilakukan saat terakhir dijalankan, sehingga tahu apa yang harus dilakukan saat berikutnya dijalankan. Pelacakan status ini ditangani untuk kami saat menggunakan /etc/logrotate.conf konfigurasi default .
 
File status disimpan di /var/lib/logrotate/status. Karena kita tidak menggunakan konfigurasi default, kita perlu mengkonfigurasi lokasi file status secara manual.
Kami akan meminta Logrotate meletakkan file status tepat di direktori home kami untuk contoh ini. Itu bisa pergi ke mana saja yang dapat diakses dan nyaman.
 
Jalankan perintah berikut ini untuk menggunakan /home/sammy/logrotate.conf yang Anda buat dan untuk merekam status logrotate:
logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose
Output
reading config file /home/sammy/logrotate.conf
Handling 1 logs
rotating pattern: /home/sammy/logs/*.log  hourly (24 rotations)
empty log files are rotated, old logs are removed
considering log /home/sammy/logs/access.log
  log does not need rotating
 
flag --verbose akan menampilkan informasi detail tentang apa logrotate lakukan. Dalam hal ini tidak merotate apa pun. Ini adalah pertama kalinya Logrotate menemukan file log ini dan berumur nol jam jadi tidak boleh dirotasi.
 
Jika kami memeriksa file status menggunakan cat utilitas, kami akan mencatat bahwa Logrotate mencatat beberapa informasi tentang proses:
cat /home/sammy/logrotate-state
Output
logrotate state -- version 2
"/home/sammy/logs/access.log" 2021-12-3-19:0:0
 
Logrotate mencatat log yang dilihatnya dan kapan terakhir mempertimbangkannya untuk rotasi. Jika kita menjalankan perintah yang sama ini satu jam kemudian, log akan diputar seperti yang diharapkan.
 
Jika Anda ingin memaksa Logrotate untuk rotate file log padahal seharusnya tidak, gunakan --force tanda:
logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose --force
 
Ini berguna saat menguji post rotate dan script lainnya.
Terakhir, kita perlu menyiapkan tugas cron untuk menjalankan Logrotate setiap jam. Buka crontab pengguna Anda:
crontab -e
 
Ini akan membuka file teks. Jika ini adalah pertama kalinya Anda menggunakan cron, Anda mungkin diminta untuk memilih editor teks default. Jika Anda tidak memiliki preferensi, kami sarankan nanountuk pengguna baru.
 
Mungkin sudah ada beberapa komentar di file yang menjelaskan sintaks cron. Pindahkan kursor ke bawah ke baris kosong baru di akhir file dan tambahkan yang berikut ini:
14 * * * * /usr/sbin/logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state
 
Tugas ini akan berjalan pada menit ke-14 setiap jam, setiap hari. Ini menjalankan logrotate perintah yang hampir sama dengan yang kami jalankan sebelumnya, meskipun kami memperluas logrotateke jalur penuhnya /usr/sbin/logrotate agar aman. Ini adalah praktik yang baik untuk menggunakan jalur lengkap saat menulis tugas cron.
 
Untuk mempelajari lebih lanjut tentang cron, Anda dapat meninjau tutorial kami yang lain . Simpan file dan keluar. Ini akan menginstal crontab dan tugas kita akan berjalan pada jadwal yang ditentukan.
 
Jika kami mengunjungi kembali direktori log kami dalam waktu sekitar satu jam, kami akan menemukan file log yang diputar dan di compress access.log.1.gz(atau .2.gzjika Anda menjalankan Logrotate dengan --force flag).

Kesimpulan

Dalam tutorial ini kami memverifikasi versi Logrotate kami, menjelajahi konfigurasi default Ubuntu Logrotate, dan menyiapkan dua jenis konfigurasi custom yang berbeda. Untuk mempelajari lebih lanjut tentang baris perintah dan opsi konfigurasi yang tersedia untuk Logrotate, Anda dapat membaca manualnya dengan menjalankan man logrotate di terminal Anda atau dengan mengunjungi dokumentasi online .

 

Related posts

Cara Install Prometheus di Linux Ubuntu

Cara Install Prometheus di Linux Ubuntu

Pengantar Prometheus adalah sebuah sistem Monitoring opensource yang powerfull dimana tugasnya mengumpulkan metrik dari services dan menyimpannya dalam database time-series.