Panduan Lengkap untuk Mengelola Berkas Log dengan Logrotate di server Linux | UNIX LINUX EXPLORE
Edit

Panduan Lengkap untuk Mengelola Berkas Log dengan Logrotate di server Linux

2024/08/27
Dalam lingkungan server produksi apa pun, mengelola berkas log merupakan aspek penting dari administrasi sistem. Berkas log berisi informasi berharga tentang peristiwa sistem, perilaku aplikasi, dan potensi masalah, yang membuatnya sangat diperlukan untuk tujuan pemecahan masalah dan pemantauan. Namun, jika tidak dicentang, berkas log dapat bertambah dengan cepat, menghabiskan ruang disk yang signifikan, dan berpotensi menyebabkan penurunan kinerja atau bahkan sistem mogok.

Mengontrol ukuran file log pada server Linux sangat penting karena pertumbuhannya yang terus-menerus. Saat file log terakumulasi, file tersebut dapat menghabiskan ruang penyimpanan yang berharga, membebani sumber daya server, dan menyebabkan masalah kinerja dan memori. Untuk mengatasi masalah ini, rotasi log biasanya digunakan. Rotasi log dilakukan dengan mengganti nama atau mengompresi file log sebelum menjadi terlalu besar, sekaligus menghapus atau mengarsipkan log lama untuk mengosongkan ruang penyimpanan. Pada sebagian besar distribusi Linux, alat yang disukai untuk rotasi log adalah program logrotate, yang akan menjadi fokus kami dalam tutorial ini.

Dalam panduan komprehensif ini, kita akan menjelajahi fungsionalitas Logrotate, konfigurasi default-nya di Ubuntu, dan menelusuri proses pengaturan aturan rotasi log khusus untuk tiap aplikasi yang berjalan di Ubuntu.





1. Apa itu logrotate?

Logrotate adalah utilitas canggih yang dirancang untuk mengatasi masalah ini dengan memutar, mengompresi, dan memangkas berkas log secara otomatis berdasarkan aturan dan jadwal yang telah ditetapkan sebelumnya. Dengan mengompresi dan mengarsipkan berkas log lama secara berkala, dan menghapus berkas yang usang, Logrotate memastikan bahwa ruang disk digunakan secara efisien dan berkas log tetap dapat dikelola.

Pada sebagian besar distribusi Linux, Logrotate adalah perangkat lunak yang sudah terpasang yang memungkinkan Anda mengelola penyimpanan dan pengaturan file log dalam jangka panjang. Aplikasi dalam sistem sering kali merekam log operasi atau masalah disk. Jika tidak dihapus secara berkala, file-file ini dapat bertambah besar, memenuhi disk, dan menyebabkan malfungsi.

Logrotate adalah solusi paling umum untuk memeriksa file log secara berkala dan secara otomatis mengelola rotasi, kompresi, dan penghapusannya saat ukuran dan/atau usia tertentu terlampaui.


2. Mengapa Menggunakan logrotate?

logrotate adalah alat penting untuk mengelola berkas log di lingkungan Linux. Alat ini menawarkan beberapa manfaat utama:
  • Mencegah Kehabisan Ruang Disk: Dengan merotasi dan mengompresi log, logrotate membantu mencegah log menghabiskan semua ruang disk yang tersedia.
  • Menjaga Organisasi Berkas Log: Rotasi yang teratur memastikan log diarsipkan secara sistematis, sehingga lebih mudah dikelola dan dicari.
  • Meningkatkan Kinerja Sistem: Rotasi log yang tepat mengurangi risiko perlambatan sistem yang disebabkan oleh berkas log yang terlalu besar.

Siap menjaga sistem Linux Anda tetap sehat dan efisien? Pelajari cara menginstal dan mengonfigurasi logrotate di sistem Anda untuk memastikan manajemen log yang optimal.


3. Cara Install logrotate

Menginstal logrotate pada sistem Linux Anda mudah. ​​Berikut adalah petunjuk langkah demi langkah untuk berbagai distribusi Linux, termasuk Ubuntu/Debian, CentOS/Red Hat, dan Arch Linux.

Ubuntu/Debian
Untuk sistem berbasis Ubuntu dan Debian, logrotate biasanya disertakan dalam repositori default, sehingga memudahkan penginstalan dengan apt.

Sebelum menginstal paket baru, sebaiknya perbarui daftar paket Anda untuk memastikan Anda mendapatkan versi terbaru. Daemon logrotate sudah terinstal dan aktif secara default di Ubuntu dan sebagian besar distribusi Linux utama. Jika Logrotate belum terinstal di komputer Anda, pastikan untuk menginstalnya terlebih dahulu melalui pengelola paket distribusi Anda.

Install logrotate
[root@ns1 ~]# sudo apt update
[root@ns1 ~]# sudo apt install logrotate
Setelah anda menginstall logrotate, bila anda ingin melihat versi logrotate yang terinstal, jalankan perintah berikut.

Lihat versi logrotate
[root@ns1 ~]# logrotate --version
Daemon Logrotate menggunakan berkas konfigurasi untuk menentukan semua detail rotasi log untuk suatu aplikasi. Pengaturan default terdiri dari aspek-aspek berikut:
  • /etc/logrotate.conf: ini adalah berkas konfigurasi utama untuk utilitas Logrotate. Berkas ini mendefinisikan pengaturan global dan default untuk rotasi log yang diterapkan ke semua berkas log kecuali ditimpa oleh berkas konfigurasi Logrotate individual di direktori /etc/logrotate.d/.
  • /etc/logrotate.d: direktori ini mencakup berkas yang mengonfigurasi kebijakan rotasi log khusus untuk berkas log yang dihasilkan oleh aplikasi atau layanan individual.
Kami akan memeriksa kedua kemungkinan konfigurasi di bawah ini.


4. Konfigurasi Logrotate

Pertama, mari kita lihat berkas konfigurasi Logrotate utama di /etc/logrotate.conf. Lanjutkan dan lihat isi file-nya dengan utilitas cat.

Lihat isi script file  logrotate.conf
[root@ns1 ~]# cat /etc/logrotate.conf
Perintah di atas mencetak seluruh isi file logrotate.conf.

isi script file  logrotate.conf
# see "man logrotate" for details

# global options do not affect preceding include directives

# rotate log files weekly
weekly

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

# keep 4 weeks worth of backlogs
rotate 4

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

# use date as a suffix of the rotated file
#dateext

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

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

# system-specific logs may also be configured here.
Berikut ini adalah deskripsi tentang arti dari masing-masing arahan konfigurasi di atas (baris yang dimulai dengan # menunjukkan komentar):

weekly: menunjukkan frekuensi rotasi log. Atau, Anda dapat menentukan interval waktu lain (per jam, per hari, per bulan, atau per tahun). Karena utilitas logrotate biasanya dijalankan sekali sehari, Anda mungkin perlu mengubah konfigurasi ini jika menginginkan frekuensi rotasi yang lebih pendek daripada harian (lihat di bawah).

su root adm: rotasi log dilakukan dengan pengguna root dan grup admin. Dengan menggunakan arahan ini, Anda dapat memastikan bahwa file log yang dirotasi dimiliki oleh pengguna dan grup tertentu, yang dapat berguna untuk kontrol akses dan manajemen izin. Ini khususnya relevan ketika file log perlu diakses atau dikelola oleh pengguna atau grup tertentu dengan hak istimewa yang sesuai.

rotate 4: file log dirotasi empat kali sebelum yang lama dihapus. Jika rotate diatur ke nol, maka versi lama segera dihapus dan tidak dirotasi. Jika diatur ke -1, log yang lebih lama tidak akan dihapus sama sekali kecuali jika dipengaruhi oleh maxage. 

create: segera setelah rotasi, buat file log baru dengan nama yang sama dengan yang baru saja dirotasi.

dateext: jika opsi ini diaktifkan, file log yang dirotasi akan diganti namanya dengan menambahkan tanggal ke nama filenya, yang memungkinkan pengorganisasian dan pembedaan file log yang lebih baik berdasarkan tanggal rotasi (terutama jika frekuensi rotasi harian atau lebih besar). Skema default untuk file yang dirotasi adalah logname.1, logname.2, dan seterusnya, tetapi mengaktifkan opsi ini mengubahnya menjadi logname.YYYYMMDD. Anda dapat mengubah format tanggal melalui perintah dateformat dan dateyesterday.

compress: aturan ini menentukan apakah file log lama harus dikompresi (menggunakan gzip secara default) atau tidak. Kompresi log dinonaktifkan secara default tetapi Anda dapat mengaktifkannya untuk menghemat ruang disk.

include: perintah ini digunakan untuk menyertakan file konfigurasi atau cuplikan tambahan. Perintah ini memungkinkan Anda untuk memodulasi dan mengatur konfigurasi Logrotate Anda dengan membaginya menjadi beberapa file. Dalam hal ini, file dalam direktori /etc/logrotate.d telah disertakan dalam konfigurasi.

Seperti yang telah disebutkan sebelumnya, file /etc/logrotate.conf berfungsi sebagai file konfigurasi global untuk Logrotate, yang menyediakan pengaturan dan opsi default untuk rotasi log di seluruh sistem. File ini mengatur tahapan untuk rotasi log, tetapi dapat diperluas atau diganti oleh file konfigurasi di direktori /etc/logrotate.d/ yang biasanya mengonfigurasi kebijakan rotasi untuk log aplikasi tertentu.


5. Konfigurasi khusus aplikasi

Selanjutnya, mari kita lihat isi direktori /etc/logrotate.d. Direktori ini biasanya berisi berkas konfigurasi Logrotate tambahan untuk berbagai aplikasi atau layanan yang terinstal di komputer Anda.


[root@ns1 ~]# ls /etc/logrotate.d/
Anda akan mengamati bahwa beberapa program memiliki konfigurasi rotasi log di direktori ini. Setiap berkas konfigurasi dalam /etc/logrotate.d/ berfokus pada aplikasi atau kumpulan berkas log tertentu, yang menentukan jalur berkas log, frekuensi rotasi, pengaturan kompresi, dan arahan tambahan apa pun yang diperlukan untuk mengelola log aplikasi atau layanan tertentu tersebut.

Dengan memiliki berkas konfigurasi terpisah di direktori ini, kustomisasi dan pemeliharaan pengaturan rotasi log untuk aplikasi atau layanan individual dapat dilakukan dengan mudah tanpa memengaruhi berkas log lainnya. Misalnya, mari kita lihat berkas konfigurasi untuk utilitas Rsyslog melalui perintah cat.


[root@ns1 ~]# cat /etc/logrotate.d/rsyslog
Anda akan melihat keluaran program muncul di layar:


/var/log/syslog
/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
                /usr/lib/rsyslog/rsyslog-rotate
        endscript
}
Konfigurasi di atas menetapkan aturan rotasi untuk beberapa berkas log yang terletak di direktori /var/log/. Konfigurasi ini juga menyertakan arahan berikut sebagai tambahan dari arahan yang telah kita periksa di bagian sebelumnya:

missingok: melanjutkan rotasi log tanpa melaporkan kesalahan apa pun jika ada berkas log yang ditentukan yang hilang.

notifempty: memastikan bahwa berkas log tidak dirotasi jika kosong. Jika berkas log kosong, rotasi tidak akan dipicu.

delaycompress: menunda kompresi berkas log yang dirotasi hingga siklus rotasi berikutnya. Ini memungkinkan berkas log sebelumnya tersedia untuk analisis sebelum kompresi.

sharedscripts: memastikan bahwa perintah atau skrip yang ditentukan dalam arahan prerotate atau postrotate dieksekusi hanya sekali, terlepas dari jumlah berkas log yang dirotasi. Secara default, logrotate mengeksekusi perintah/skrip secara terpisah untuk setiap berkas log yang dirotasi.

postrotate dan endscript: melampirkan perintah atau skrip yang akan dieksekusi setelah rotasi log. Dalam kasus ini, skrip /usr/lib/rsyslog/rsyslog-rotate dijalankan setelah rotasi berhasil. Skrip ini mengirimkan sinyal SIGHUP ke layanan Rsyslog sehingga dapat menutup dan membuka kembali berkas log untuk ditulis.

Secara keseluruhan, konfigurasi ini memastikan bahwa berkas log yang ditentukan dirotasi setiap minggu, dikompresi, dan dibatasi hingga maksimum 4 berkas log yang dirotasi. Konfigurasi ini juga mencakup arahan tambahan untuk menangani berkas log yang hilang atau kosong dan menjalankan skrip pasca-rotasi khusus untuk Rsyslog.

Arahan lain yang berguna untuk diperhatikan meliputi:

size: menentukan ukuran maksimum dalam byte, kilobyte, megabyte, atau gigabyte yang dapat dicapai berkas log sebelum rotasi dimulai. Hal ini menyebabkan jadwal default diabaikan jika selama size ditentukan setelah arahan time (per jam, per hari, dst.).

/etc/logrotate.d/myapp
/var/log/myapp.log {
    daily
    size 10M
    . . .
}
Dalam contoh ini, Logrotate akan memicu rotasi saat myapp.log mencapai ukuran 10 megabita. Setelah ambang batas ukuran terlampaui, rotasi akan dimulai tanpa mempedulikan jadwal waktu (dalam kasus ini, rotasi dilakukan setiap hari).

minsize: file log dirotasi sesuai dengan jadwal waktu yang ditentukan, tetapi tidak sebelum ukuran yang ditentukan tercapai. Oleh karena itu, saat minsize digunakan, baik ukuran file maupun stempel waktu dipertimbangkan untuk menentukan apakah file harus dirotasi.

/etc/logrotate.d/myapp
/var/log/myapp.log {
    daily
    minsize 10M
    . . .
}
Saat menggunakan minsize, rotasi tidak akan terjadi hingga file mencapai minimal 10 megabita, bahkan jika jadwal harian terpenuhi.

maxsize: menentukan bahwa file log akan dirotasi setelah melebihi ukuran file yang ditetapkan, bahkan saat interval waktu belum tercapai.

/etc/logrotate.d/myapp
/var/log/myapp.log {
    weekly
    maxsize 10M
    . . .
}
Dalam cuplikan ini, rotasi akan terjadi saat ukuran 10 megabita tercapai. Jika tidak, rotasi akan dilakukan setiap minggu.


6. Memilih strategi rotasi log yang tepat

Logrotate menawarkan dua perintah yang menentukan bagaimana rotasi log harus ditangani: create dan copytruncate. Perintah pertama adalah perintah default, dan perintah ini bekerja dengan mengganti nama file log (misalkan myapp.log) menjadi myapp.log.1, sebelum membuat file myapp.log baru untuk melanjutkan pencatatan log.



/etc/logrotate.d/myapp
/var/log/myapp.log {
    rotate 7
    create
    . . .
}
Dalam mode copytruncate, file myapp.log disalin ke file myapp.log.1 yang baru, kemudian file asli dikosongkan (dipotong), yang memungkinkan aplikasi untuk terus menulis ke dalamnya seolah-olah itu adalah file baru. Mode ini berguna jika aplikasi atau proses Anda tidak menangani rotasi file log dengan baik dengan secara otomatis beralih ke file log baru setelah rotasi.



/etc/logrotate.d/myapp
/var/log/myapp.log {
    rotate 7
    copytruncate
    . . .
}
Perlu dicatat bahwa meskipun copytruncate menghindari gangguan pada proses pencatatan, hal itu dapat menyebabkan hilangnya log untuk sementara waktu selama proses rotasi karena file asli terpotong. Namun, hal ini biasanya dapat diterima untuk aplikasi yang tidak bergantung pada analisis log berkelanjutan dan dapat menoleransi celah sesekali dalam log.


7. Mengonfigurasi rotasi log untuk aplikasi kustom

Sejauh ini, kita telah melihat bagaimana Logrotate dapat digunakan untuk mengelola berkas log untuk layanan sistem dan utilitas pra-instal di server Linux Anda. Sekarang, mari kita lihat cara melakukan hal yang sama untuk aplikasi atau layanan kustom yang telah Anda terapkan ke server.

Untuk mensimulasikan aplikasi yang menulis log secara terus-menerus ke berkas, buat skrip bash berikut di suatu tempat di sistem berkas Anda. Skrip ini menulis catatan log fiktif tetapi tampak realistis ke berkas setiap detik:

logify.sh
#!/bin/bash

logfile="/var/log/logify/log_records.log"

# Function to generate a random log record
generate_log_record() {
    local loglevel=("INFO" "WARNING" "ERROR")
    local services=("web" "database" "app" "network")
    local timestamps=$(date +"%Y-%m-%d %H:%M:%S")
    local random_level=${loglevel[$RANDOM % ${#loglevel[@]}]}
    local random_service=${services[$RANDOM % ${#services[@]}]}
    local message="This is a sample log record for ${random_service} service."

    echo "${timestamps} [${random_level}] ${message}"
}

# Main loop to write log records every second
while true; do
    log_record=$(generate_log_record)
    echo "${log_record}" >> "${logfile}"
    sleep 1
done
Simpan berkas, lalu buat agar dapat dieksekusi:


[root@ns1 ~]# sudo chmod +x logify.sh
Setelah itu, buat direktori /var/log/logify menggunakan hak istimewa yang lebih tinggi, lalu ubah kepemilikan direktori ke pengguna Anda sehingga skrip dapat menulis file ke direktori.


[root@ns1 ~]# sudo mkdir /var/log/logify
[root@ns1 ~]# sudo chown -R $USER:$USER /var/log/logify/
Anda sekarang dapat menjalankan skrip dan skrip tersebut akan mulai menulis log ke file setiap detik.


[root@ns1 ~]# ./logify.sh

[root@ns1 ~]# cat /var/log/logify/log_records.log
Pada tahap ini, Anda harus menyiapkan kebijakan rotasi log untuk mencegah file log_records.log tumbuh terlalu besar dan menghabiskan ruang disk yang berharga di server. Ada dua opsi utama untuk melakukan ini:
  • Buat file konfigurasi Logrotate baru dan letakkan di direktori /etc/logrotate.d/ untuk melakukan rotasi log sesuai dengan jadwal default sistem (berjalan sekali sehari secara default tetapi Anda dapat mengubahnya.
  • Buat file konfigurasi yang independen dari jadwal Logrotate sistem dan jalankan Logrotate sesuai kecepatan yang Anda inginkan menggunakan cronjob.

8. Membuat konfigurasi Logrotate standar

Di bagian ini, Anda akan membuat berkas konfigurasi standar untuk log aplikasi Anda dan meletakkannya di direktori /etc/logrotate.d/. Lanjutkan dan buat berkas logify baru di direktori /etc/logrotate.d/ dengan penyunting teks Anda.


[root@ns1 ~]# sudo nano /etc/logrotate.d/logify
Tambahkan teks berikut ke berkas tersebut.

/var/log/logify/*.log
{
    daily
    missingok
    rotate 7
    compress
    notifempty
}
Konfigurasi di atas berlaku untuk semua file yang diakhiri dengan .log di direktori /var/log/logify/. Kami telah membahas apa yang dilakukan setiap perintah di sini sebelumnya, jadi kami tidak akan membahasnya lagi di sini.

Simpan file dan uji konfigurasi baru dengan menjalankan perintah di bawah ini. Opsi --debug memerintahkan logrotate untuk beroperasi dalam mode uji di mana hanya pesan debug yang dicetak.


[root@ns1 ~]# sudo logrotate /etc/logrotate.conf --debug
Anda harus melihat entri untuk konfigurasi logify yang tampak mirip dengan yang ditampilkan di bawah ini.


. . .

rotating pattern: /var/log/logify/*.log
 after 1 days (7 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/logify/log_records.log
Creating new state
  Now: 2023-04-29 10:35
  Last rotated at 2023-04-29 10:00
  log does not need rotating (log has already been rotated)

. . .
Output di atas menunjukkan bahwa file konfigurasi di /etc/logrotate.d/logify telah ditemukan oleh program logrotate. Oleh karena itu, file log yang ditentukan di dalamnya sekarang akan dirotasi sesuai dengan kebijakan yang ditetapkan bersama dengan log sistem dan aplikasi lainnya.

Jika Anda ingin menguji bahwa rotasi log berfungsi tanpa menunggu jadwal yang ditentukan, Anda dapat menggunakan opsi -f/--force seperti ini.


[root@ns1 ~]# sudo logrotate -f /etc/logrotate.d/logify
Anda akan mengamati bahwa berkas log lama telah diubah namanya dan dikompresi, lalu berkas log baru telah dibuat.


[root@ns1 ~]# ls /var/log/logify/
Output
log_records.log  log_records.log.1.gz
Cara lain untuk memverifikasi apakah berkas log tertentu berotasi atau tidak, dan untuk memeriksa tanggal dan waktu terakhir rotasinya, periksa berkas /var/lib/logrotate/status (atau /var/lib/logrotate/logrotate.status pada sistem Red Hat) seperti ini.


[root@ns1 ~]# sudo cat /var/lib/logrotate/status | grep 'logify'
Output
 "/var/log/logify/log_records.log" 2023-4-29-10:39:50

9. Membuat konfigurasi Logrotate yang independen dari sistem

Seperti yang disebutkan sebelumnya, konfigurasi Logrotate yang tidak bergantung pada sistem adalah konfigurasi yang tidak dijalankan pada jadwal sistem default. Konfigurasi seperti itu tidak akan disertakan dalam direktori /etc/logrotate.d/. Sebagai gantinya, Anda meletakkan berkas tersebut di direktori lain dan membuat tugas cron yang akan menjalankan Logrotate dengan berkas konfigurasi pada interval waktu khusus.

Masuk ke direktori home Anda, dan buat direktori logify di dalamnya.


[root@ns1 ~]# cd ~
[root@ns1 ~]# mkdir logify
Berikutnya, edit skrip logify.sh Anda dan ubah variabel logfile menjadi berikut:


logfile="$HOME/logify/log_records.log"
Setelah itu, jalankan kembali skrip tersebut sehingga log sekarang ditulis ke direktori ~/logify:


[root@ns1 ~]# ./logify
Untuk membuat konfigurasi Logrotate yang independen terhadap sistem untuk log ini, Anda harus membuat berkas konfigurasi di luar /etc/logrotate.d/. Oleh karena itu, lanjutkan dan buat berkas logrotate.conf dalam direktori ~/logify.


[root@ns1 ~]# sudo nano ~/logify/logrotate.conf
Isi berkas dengan konten berikut:

logify/logrotate.conf
/home/<user>/logify/*.log
{
    hourly
    missingok
    rotate 7
    compress
    notifempty
}
Konfigurasi ini sama seperti pada bagian sebelumnya, kecuali bahwa daily telah diubah menjadi hourly sehingga file log diputar setiap jam, bukan sekali sehari.

Anda juga perlu membuat file status Logrotate yang menyimpan informasi seperti tanggal dan waktu rotasi terakhir, jumlah rotasi yang dilakukan, dan detail relevan lainnya. Ini memungkinkan Logrotate untuk melakukan rotasi secara akurat dan mencegah rotasi yang tidak perlu saat tidak diperlukan.

Dalam pengaturan Logrotate default, file status terletak di direktori /var/lib/logrotate/. Namun, kita akan membuat file khusus melalui perintah di bawah ini.


[root@ns1 ~]# logrotate ~/logify/logrotate.conf --state ~/logify/logrotate.state
Opsi --state memberi tahu logrotate untuk menggunakan berkas status alternatif yang terletak di ~/logify/logrotate.state. Perintah logrotate akan membuat berkas ini jika belum ada, dan Anda dapat melihat isinya dengan cat.


[root@ns1 ~]# cat /home/<user>/logify/logrotate.state
Anda akan melihat keluaran program muncul di layar.

Output
 logrotate state -- version 2
"/home/<user>/logify/log_records.log" 2023-4-29-20:0:0
Output menunjukkan bahwa Logrotate mengidentifikasi berkas log yang relevan dan kapan terakhir kali mempertimbangkannya untuk rotasi. Langkah berikutnya di sini adalah menyiapkan tugas cron untuk menjalankan berkas logrotate pada frekuensi yang Anda inginkan (setiap jam dalam kasus ini).

Lanjutkan dan buka berkas konfigurasi tugas cron dengan menjalankan crontab -e di terminal Anda.


[root@ns1 ~]# crontab -e
Opsi -e digunakan untuk mengedit pekerjaan cron pengguna saat ini menggunakan editor yang ditentukan oleh variabel lingkungan $VISUAL atau $EDITOR. Perintah di atas akan membuka berkas konfigurasi di editor teks pilihan Anda yang ditentukan oleh salah satu variabel ini.

Di bagian bawah berkas, tambahkan baris berikut.


0 * * * * /usr/sbin/logrotate /home/<user>/logify/logrotate.conf --state /home/<user>/logify/logrotate.state
Baris baru ini menetapkan bahwa pekerjaan cron akan dijalankan setiap jam (pada menit ke-0), dan perintah logrotate akan dijalankan dengan konfigurasi kustom dan berkas status Anda. Jalur lengkap biner logrotate digunakan di sini hanya untuk keamanan.

Simpan dan tutup berkas yang dimodifikasi. Anda akan melihat keluaran berikut.


crontab: installing new crontab
Sekarang setelah kebijakan rotasi log Anda sudah siap, Anda dapat melihat direktori ~/logify setelah satu jam untuk memastikan bahwa berkas log di dalamnya telah dirotasi sesuai dengan kebijakan yang ditetapkan. Untuk detail lebih lanjut tentang pekerjaan cron, lihat tutorial berikut atau ketik man cron di terminal Anda.


10. Mengubah jadwal Logrotate sistem

Seperti yang disebutkan sebelumnya, saat menggunakan konfigurasi sistem default, Logrotate hanya berjalan sekali sehari yang berarti menggunakan opsi per jam dalam konfigurasi tidak akan efektif. Namun, Anda dapat mengubah perilaku ini dengan mengubah lokasi skrip yang menjalankan Logrotate. Di Ubuntu, skrip tersebut terletak di /etc/cron.daily/logrotate yang menunjukkan bahwa skrip tersebut dijalankan sekali sehari oleh cronjob harian sistem.

Jika Anda ingin mengubah jadwal menjadi per jam, pindahkan skrip ke direktori /etc/cron.hourly/ menggunakan perintah di bawah ini.


[root@ns1 ~]# sudo mv /etc/cron.daily/logrotate /etc/cron.hourly
Setelah itu, skrip tersebut harus dieksekusi oleh cronjob per jam sistem sehingga opsi per jam berfungsi normal selanjutnya.


11. Menjalankan perintah atau skrip sebelum atau setelah rotasi log

Logrotate menyediakan kemampuan untuk menjalankan perintah atau skrip acak sebelum dan sesudah rotasi log melalui perintah prerotate dan postrotate. Sesuai namanya, perintah prerotate mengeksekusi perintah atau skrip sebelum rotasi log, sedangkan perintah postrotate melakukan hal yang sama setelah rotasi log. Kedua perintah tersebut ditutup menggunakan perintah endscript.

Anda dapat menggunakan prerotate untuk melakukan persiapan atau tindakan yang diperlukan sebelum rotasi, sedangkan postrotate harus digunakan untuk melakukan tugas seperti memulai ulang layanan, memberi tahu pemangku kepentingan, atau memproses lebih lanjut file log yang dirotasi.

Misalnya, Anda dapat memantau konfigurasi rotasi log dengan melakukan ping ke layanan pemantauan seperti Better Uptime sehingga jika rotasi tidak berjalan sesuai jadwal, Anda akan mendapatkan peringatan untuk menyelidiki masalah tersebut lebih lanjut.

~/logify/logrotate.conf
/home/<user>/logify/*.log
{
    hourly
    missingok
    rotate 7
    compress
    notifempty
    sharedscripts
    postrotate
      curl https://betteruptime.com/api/v1/heartbeat/<heartbeat_id>
    endscript
}
Dalam contoh ini, postrotate digunakan untuk melaporkan bahwa rotasi log berhasil sesuai dengan jadwal yang ditentukan. Jika laporan ini tidak diterima dalam periode yang diharapkan, sebuah insiden akan dibuat dan Anda akan menerima pemberitahuan di saluran yang dikonfigurasi (seperti Email, Slack, SMS, dll.). Sebaiknya Anda selalu menyiapkan pemantauan tersebut sehingga jika terjadi masalah dengan rotasi, Anda dapat segera mendeteksi dan memperbaikinya sebelum menyebabkan masalah yang lebih parah.

Perlu dicatat bahwa perintah atau skrip postrotate hanya dijalankan saat setidaknya satu file yang cocok dengan pola yang ditentukan diputar. Direktif sharedscripts di atas digunakan untuk menentukan bahwa perintah dalam blok prerotate dan postrotate harus dijalankan hanya sekali, tidak peduli berapa banyak file log yang diputar. Biasanya, perintah dijalankan sekali per file log yang diputar, yang tidak ideal dalam skenario ini.

Jika perintah atau skrip prerotate atau postrotate tidak berjalan sesuai harapan, pastikan perintah atau skrip tersebut memiliki izin yang benar dan dapat dijalankan. Anda dapat menggunakan perintah chmod +x untuk membuat skrip atau biner dapat dijalankan jika berlaku. Selain itu, periksa kembali apakah jalur ke skrip tersebut akurat dan semua dependensi yang diperlukan oleh skrip telah diinstal.


12. Memodifikasi izin akses Logrotate

Seperti yang terlihat sebelumnya di /etc/logrotate.conf, Logrotate menjalankan tugasnya dengan hak istimewa pengguna root dan grup adm. Hal ini memungkinkan alat untuk menjalankan operasi rotasi log dengan izin yang lebih tinggi, yang biasanya diperlukan untuk mengakses dan mengelola log sistem.

Ini juga berarti bahwa file log yang baru dibuat oleh alat akan dimiliki oleh pengguna dan grup root, tetapi hal ini terkadang dapat mencegah aplikasi atau layanan yang menghasilkan log untuk dapat mengakses file tersebut. Dalam situasi seperti itu, Anda perlu mengubah pengaturan Anda untuk memastikan bahwa izin akses yang tepat telah ditetapkan pada file tersebut.

Oleh karena itu, perintah create menyediakan beberapa opsi tambahan.

/etc/logrotate.d/myapp
/var/log/myapp.log
{
    create 644 <user> <group>
}
Dalam contoh ini, saat Logrotate membuat berkas log baru (myapp.log) setelah rotasi, ia akan menyetel izin berkas ke 644 (baca-tulis untuk pemilik, dan baca-saja untuk grup dan yang lainnya). Berkas akan dimiliki oleh myuser dan ditetapkan ke mygroup.


13. Mendebug masalah Logrotate

Anda perlu memastikan bahwa utilitas Logrotate berjalan dengan benar setiap saat sehingga tugas rotasi log terjadwal Anda dijalankan seperti yang diharapkan. Jika file log tidak dirotasi seperti yang diharapkan, hal itu dapat disebabkan oleh konfigurasi yang salah atau masalah izin.

Untuk memperbaiki masalah tersebut, pertama-tama periksa file status Logrotate di /var/lib/logrotate/status untuk memastikan bahwa file log memang disertakan dalam jadwal rotasi dan untuk mengonfirmasi kapan terakhir kali file tersebut dirotasi.



[root@ns1 ~]# sudo cat /var/lib/logrotate/status
Jika pola yang cocok dengan berkas log tidak disertakan di sini, Anda mungkin perlu memverifikasi apakah berkas konfigurasi yang sesuai untuk aplikasi atau layanan tersebut ada di direktori /etc/logrotate.d/.

Perintah logrotate juga menyediakan opsi -d/--debug yang berguna untuk menguji dan men-debug masalah konfigurasi dengan mensimulasikan rotasi log tanpa benar-benar memutar log. Misalnya, jika Anda melihat bahwa log yang diputar tidak dikompresi dan Anda menjalankan logrotate dalam mode debug, Anda mungkin mengamati keluaran berikut yang menunjukkan bahwa perintah kompres salah eja.


[root@ns1 ~]# sudo sudo logrotate /etc/logrotate.d/logify --debug
Output
. . .
reading config file /etc/logrotate.d/logify
error: /etc/logrotate.d/logify:7 unknown option 'compresss' -- ignoring line
. . .
Opsi lain yang berguna adalah -v/--verbose yang menyediakan keluaran dan informasi terperinci tentang proses rotasi log. Saat diaktifkan, Logrotate menampilkan pesan tambahan, termasuk file yang sedang dirotasi, tindakan yang diambil, dan kesalahan atau peringatan apa pun yang ditemukan selama rotasi.

Jika Anda menjalankan logrotate melalui cronjob, Anda dapat menentukan opsi --verbose dan mengalihkan keluaran standar dan kesalahan standarnya ke file menggunakan sintaksis di bawah ini.


0 * * * * /usr/sbin/logrotate -v /home/<user>/logify/logrotate.conf --state /home/<user>/logify/logrotate.state >> </path/to/logrotate.log> 2>&1
Untuk cronjob sistem, Anda harus mengedit skrip logrotate yang terletak di /etc/cron.daily/ secara default. Perhatikan bahwa saat mengaktifkan mode verbose di sini, skrip tersebut akan menyertakan informasi tentang semua log yang sedang dirotasi pada sistem yang bisa jadi sangat besar dan sebagian besar tidak relevan. Kami sarankan untuk menggunakan metode cron yang ditunjukkan di atas jika Anda hanya peduli dengan log untuk layanan atau aplikasi tertentu.

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

# skip in favour of systemd timer
if [ -d /run/systemd/system ]; then
    exit 0
fi

# this cronjob persists removals (but not purges)
if [ ! -x /usr/sbin/logrotate ]; then
    exit 0
fi

/usr/sbin/logrotate -v /etc/logrotate.conf >> </path/to/logrotate.log> 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit $EXITVALUE
~
Saat Logrotate dijalankan berikutnya, file logrotate.log akan dibuat di direktori yang ditentukan dan Anda akan menemukan semua detail rotasi log. Berikut ini beberapa contoh keluaran dari upaya rotasi yang berhasil:

/path/to/logrotate.log
reading config file /home/betterstack/logify/logrotate.conf
acquired lock on state file /home/betterstack/logify/logrotate.stateReading state from file: /home/betterstack/logify/logrotate.state
Allocating hash table for state file, size 64 entries
Creating new state
Creating new state
Creating new state
Creating new state

Handling 1 logs

rotating pattern: /home/betterstack/logify/*.log
 forced from command line (7 rotations)
empty log files are not rotated, old logs are removed
considering log /home/betterstack/logify/log_records.log
  Now: 2023-04-30 09:19
  Last rotated at 2023-04-30 09:19
  log needs rotating
considering log /home/betterstack/logify/logrotate.log
  Now: 2023-04-30 09:19
  Last rotated at 2023-04-30 09:00
  log does not need rotating (log is empty)
rotating log /home/betterstack/logify/log_records.log, log->rotateCount is 7
dateext suffix '-2023043009'

. . .
Setelah Anda mengumpulkan log Logrotate seperti di atas, Anda dapat meneruskannya ke Logtail sehingga Anda dapat dengan mudah mencari kejadian penting dan menerima peringatan saat kesalahan ditemukan.

Dalam tutorial ini, kami menjelajahi rotasi log di Linux Ubuntu dan implementasinya menggunakan program Logrotate. Kami mulai dengan memeriksa berkas konfigurasi dan membahas arahan utama yang umum ditemui. Kami kemudian membuat konfigurasi Logrotate standar untuk aplikasi khusus dan kemudian beralih ke konfigurasi yang tidak bergantung pada sistem, sebelum membahas beberapa masalah umum dengan Logrotate dan cara memecahkan masalah tersebut secara efektif.

Untuk lebih memperluas pengetahuan Anda tentang Logrotate dan menjelajahi semua kemampuannya, saya sarankan Anda untuk membaca halaman manualnya. Cukup jalankan man logrotate di terminal Anda untuk mengakses dokumentasi yang lengkap.

Terima kasih telah membaca, dan selamat membuat log!..