GNU/Linux >> Belajar Linux >  >> Linux

Menggunakan Logrotate di linux Untuk Mengelola File Log (dengan contoh)

Sistem Operasi Linux dan aplikasi yang berjalan sering menghasilkan log ke file. File-file ini sering disimpan di /var/log direktori atau file lain yang ditentukan oleh aplikasi. Jika file log ini tidak diputar, dikompresi, dan dipangkas secara berkala, mereka pada akhirnya akan menghabiskan semua ruang disk yang tersedia yang menyebabkan server membeku.

Dalam panduan ini, kita akan melihat cara kerja logrotate kemudian melihat contoh tentang cara mengonfigurasi logrotasi untuk aplikasi kustom kita.

Prasyarat

Untuk mengikuti panduan ini, Anda perlu:

  • Distro Linux modern seperti Ubuntu, Debian, Centos, Rhel, Rocky Linux
  • Akses root ke server atau pengguna dengan hak sudo

Periksa versi logrotate Anda dengan perintah ini:

logrotate --version

Keluaran dari sistem saya:

# logrotate --version
logrotate 3.8.6

Jika Logrotate tidak diinstal, Anda akan mendapatkan kesalahan. Silakan instal perangkat lunak menggunakan manajer paket distribusi Linux Anda.

Logrotate Konfigurasi

Konfigurasi logrotate dapat ditemukan di file ini /etc/logrotate.conf . Di sinilah pengaturan default berada. Anda juga akan menemukan beberapa konfigurasi rotasi untuk log yang tidak dimiliki oleh paket sistem mana pun.

Baris terpenting dalam file konfigurasi ini adalah include /etc/logrotate.d . Ini menginstruksikan logrotate untuk juga memeriksa konfigurasi yang ditambahkan di direktori itu. Ini berarti bahwa untuk aplikasi kita, kita tidak perlu menambahkan semua yang ada di file utama itu, kita dapat membuat file konfigurasi individual dan menambahkannya ke /etc/logrotate.d direktori. Sebagian besar paket yang Anda instal yang memerlukan bantuan rotasi log akan menempatkan file konfigurasi logrotatenya di direktori tersebut juga.

Ini adalah beberapa konten dari /etc/logrotate.conf utama berkas:

weekly
rotate 4
create
dateext
compress
  • weekly konfigurasikan rotasi log mingguan dengan file log yang dimiliki oleh root pengguna dan syslog grup
  • rotate 4 empat file log disimpan (simpan simpanan selama 4 minggu)
  • create file log kosong baru dibuat setelah yang sekarang diputar
  • dateex gunakan tanggal sebagai akhiran dari file yang diputar
  • compress kompres file yang diputar

Untuk file individual di /etc/logrotate.d direktori, mari kita lihat satu sebagai contoh:

cat /etc/logrotate.d/yum

Keluaran:

/var/log/yum.log {
    missingok
    notifempty
    maxsize 30k
    yearly
    create 0600 root root
}

Masing-masing konfigurasi tersebut akan mewarisi konfigurasi default di /etc/logrotate.conf direktori.

Penjelasan:

  • /var/log/yum.log baris pertama ini menyatakan file mana yang menjadi target konfigurasi
  • missingok jika file tidak ada, itu masih ok dan logrotate tidak boleh error atau mencatat kesalahan apa pun
  • notifempty jangan putar file log jika kosong
  • maxsize jika ukurannya melebihi 30k, putar
  • yearly berjalan setahun sekali
  • create 0600 root root buat file baru yang diputar sebagai root :root dengan izin 0600

Beberapa opsi lain yang tidak tercantum di atas:

  • rotate 30 simpan tiga puluh file, pangkas yang terlama jika melebihi
  • monthly rotasi sebulan sekali
  • compress kompres file yang diputar. ini menggunakan gzip secara default dan menghasilkan file yang diakhiri dengan .gz . Perintah kompresi dapat diubah menggunakan compresscmd pilihan.

Mencatat file log aplikasi khusus

Ketika kami memiliki aplikasi khusus kami yang menghasilkan dan menulis log ke file, tugas kami adalah mengonfigurasi bagaimana rotasi dilakukan untuk file itu.

  • Jika kita memiliki akses root, idealnya kita menempatkan file konfigurasi di /etc/logrotate.d/ direktori dan itu akan berfungsi seperti yang dijelaskan di atas
  • Jika kita tidak memiliki akses root, kita harus mengonfigurasi cron untuk menjalankan logrotate perintah melewati konfigurasi yang kita definisikan
  • Jika Anda ingin merotasi log lebih sering daripada harian – seperti setiap jam karena penyiapan Logrotate sistem hanya berjalan sekali sehari

Konfigurasi di /etc/logrotate.d/

Katakanlah kita memiliki log penghasil aplikasi ke /var/log/our-app/app.log dan itu berjalan sebagai centos . Mari kita buat file konfigurasi logrotate /etc/logrotate/ourapp.conf dengan beberapa contoh konfigurasi:

sudo vim /etc/logrotate.d/ourapp.conf

Konfigurasi:

/var/log/our-app/*.log {
    daily
    missingok
    rotate 30
    compress
    notifempty
    create 0640 centos centos
    sharedscripts
    postrotate
        systemctl reload our-app
    endscript
}

Beberapa arahan baru:

  • create 0640 centos centos membuat file log kosong setelah rotasi dengan izin yang ditentukan 0640 dan pengguna dan grup tertentu centos
  • sharedscripts berarti skrip apa pun yang ditambahkan ke konfigurasi hanya dijalankan sekali per proses, bukan untuk setiap file yang diputar. Jika direktif /var/log/our-app/*.log cocok dengan lebih dari satu file log, skrip yang ditentukan dalam postrotate akan berjalan dua kali tanpa opsi ini
  • postrotate ke endscript blok berisi skrip untuk dijalankan setelah file log diputar. Dalam kasus kami, memuat ulang aplikasi. Ini terkadang diperlukan agar aplikasi Anda beralih ke file log yang baru dibuat. Perhatikan bahwa postrotate berjalan 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 blokir saja.

Untuk menguji konfigurasi di atas, gunakan perintah ini:

sudo logrotate /etc/logrotate.conf --debug

Outputnya adalah tentang file log mana yang ditangani Logrotate dan apa yang akan dilakukan terhadapnya. Pekerjaan Logrotate standar akan berjalan sekali sehari dan menyertakan konfigurasi baru Anda.

Contoh data di output

...
rotating pattern: /var/log/our-app/*.log  after 1 days (30 rotations)
empty log files are not rotated, old logs are removed
No logs found. Rotation not needed.
...

Menggunakan logrotate perintah untuk konfigurasi khusus

Jika Anda tidak memiliki akses root ke sistem dan Anda ingin membuat logrotate file kustom Anda sendiri, bagian ini memberi Anda cara untuk melakukannya.

Katakanlah sebuah aplikasi our-app menghasilkan file log dan menyimpan di jalur khusus di dalam direktori home kami mis. ~/apps/our-app/logs/ . Jika log sering dibuat, kami ingin merotasinya hourly . Tapi logrotate tidak bekerja setiap jam?

Pertama mari kita buat file konfigurasi logrotate. Saya akan menempatkan file di dalam direktori app conf di jalur ini ~/apps/our-app/conf/lorotate.conf dengan konfigurasi berikut:

Edit filenya:

vim ~/apps/our-app/conf/lorotate.conf

Dengan konfigurasi berikut:

/home/centos/apps/our-app/logs/*.log {
    rotate 30
    hourly
    compress
    sharedscripts
    delaycompress
    missingok
    notifempty
    dateext
    dateformat -%Y-%m-%d-%s
    copytruncate
}

Konfigurasi di atas merotasi file di direktori /home/centos/apps/our-app/logs/*.log setiap jam, mengompresi dan hanya menyimpan 30 log lama.

  • copytruncate menyalin konten file log ke file baru kemudian memotong file log.
  • dateformat menentukan format file yang diputar
  • dateext menginstruksikan logrotate untuk menyertakan ekstensi tanggal untuk file yang dirotasi.

Untuk menguji:

mkdir -p ~/apps/our-app/{logs,conf}
touch ~/apps/our-app/logs/app.log

Sekarang kita memiliki file di tempat kita sekarang dapat menggunakan logrotate untuk memutarnya. Satu-satunya hal yang perlu kita lakukan adalah menentukan state mengajukan. Sebuah state file merekam apa yang logrotate melihat terakhir kali dijalankan sehingga tahu apa yang harus dilakukan. Untuk pengaturan pemasangan sistem, sudah ditangani di /var/lib/logrotate/status tetapi dalam kasus kami, kami perlu menentukan.

Kita dapat menggunakan direktori home untuk ini:

logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose
  • --verbose akan mencetak informasi terperinci tentang apa yang dilakukan Logrotate.

Anda akan melihat output seperti ini:

 $ logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose
reading config file /home/centos/apps/our-app/config/logrotate.conf
Allocating hash table for state file, size 15360 B

Handling 1 logs

rotating pattern: /home/centos/apps/our-app/logs/*.log  hourly (30 rotations)
empty log files are not rotated, old logs are removed
considering log /home/centos/apps/our-app/logs/app.log
  log does not need rotating (log has been already rotated)set default create context

Beberapa informasi dicatat dalam file status logrotate:

$ cat ~/logrotate-status
logrotate state -- version 2
"/home/centos/apps/our-app/logs/app.log" 2021-9-4-6:0:0

Logrotate mencatat log yang dilihatnya dan kapan terakhir mempertimbangkannya untuk rotasi. Jika kita menjalankan perintah yang sama satu jam kemudian, log akan diputar seperti yang diharapkan.

Jika Anda ingin memaksa Logrotate untuk memutar file log padahal seharusnya tidak, gunakan --force bendera:

logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose --force

Ini berguna saat menguji postrotate dan skrip lainnya.

Hal berikutnya adalah menjalankan perintah di atas secara otomatis. Ini dapat dicapai dengan menggunakan crons. crontab perintah sangat berguna.

Untuk mengedit crons kita bisa menggunakan perintah ini:

crontab -e

Ini akan membuka sebuah file teks. Mungkin sudah ada beberapa komentar dalam file yang menjelaskan sintaks dasar yang diharapkan. Pindahkan kursor ke bawah ke baris kosong baru di akhir file dan tambahkan berikut ini:

3 * * * * /usr/sbin/logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status

Di atas akan menjalankan perintah logrotate setiap menit ke-3 setiap jam. Kami menggunakan jalur lengkap /usr/sbin/logrotate jadi kita tidak mendapatkan kesalahan Command not found.

Simpan file dan keluar. Ini akan menginstal crontab dan tugas kita akan berjalan pada jadwal yang ditentukan.

Kesimpulan

Kami melihat logrotate dalam panduan ini. Kami dapat memverifikasi versinya, memeriksa konfigurasi default dan mengatur pengaturan kustom kami sendiri. Untuk mempelajari lebih lanjut tentang baris perintah dan opsi konfigurasi yang tersedia untuk Logrotate, Anda dapat membaca halaman manualnya dengan menjalankan man logrotate di terminal Anda:

man logrotate

Linux
  1. Urutkan Perintah di Linux dengan Contoh

  2. Cara Mengelola File Log Menggunakan Logrotate Di Linux

  3. perintah chattr di Linux dengan contoh

  1. Perintah wc Linux dengan Contoh

  2. 10 Perintah Cepat Linux Tail dengan Contoh

  3. 10+ perintah Linux VI dengan contoh

  1. 17 Perintah Tar Berguna dengan Contoh Praktis di Linux

  2. Perintah Zip dan Unzip Linux dengan Contoh

  3. Perintah ip Linux dengan Contoh