Logrotate: مدیریت چرخش و فشرده‌سازی خودکار فایل‌های لاگ در اوبونتو 20.04

Logrotate یک ابزار سیستمی است که مدیریت چرخش و فشرده‌سازی خودکار فایل‌های لاگ را بر عهده دارد. اگر فایل‌های لاگ به صورت منظم چرخش و فشرده نشوند و همچنین پاکسازی نشوند، ممکن است در نهایت تمام فضای دیسک سیستم را اشغال کنند.

Logrotate به طور پیش‌فرض روی اوبونتو 20.04 نصب است و برای رفع نیازهای چرخش لاگ تمامی بسته‌های نصب شده، از جمله rsyslog که پردازشگر پیش‌فرض لاگ‌های سیستم است، پیکربندی شده است.

در این مقاله ابتدا ساختار پیکربندی پیش‌فرض Logrotate را بررسی می‌کنیم و سپس نحوه پیکربندی چرخش لاگ برای یک برنامهٔ سفارشی فرضی را آموزش می‌دهیم.

این آموزش فرض می‌کند که شما یک سرور اوبونتو 20.04 دارید و با یک کاربر غیر روت دارای دسترسی sudo وارد سیستم شده‌اید، مطابق با مراحل آموزش اولیه سرور اوبونتو 20.04.

Logrotate در بسیاری از توزیع‌های لینوکس قابل استفاده است، اما پیکربندی پیش‌فرض ممکن است متفاوت باشد. سایر بخش‌های این آموزش تا زمانی که نسخه Logrotate شما مشابه اوبونتو 20.04 باشد کاربرد دارد. قدم اول بررسی نسخه Logrotate است.

برای شروع، با کاربر دارای دسترسی sudo وارد سرور خود شوید.

نصب Logrotate

Logrotate به صورت پیش‌فرض روی اوبونتو نصب است. اما اگر نیاز به نصب داشتید، با اجرای دستورات زیر فهرست بسته‌ها را بروزرسانی و Logrotate را نصب کنید:

sudo apt update
sudo apt install logrotate

اگر از سروری غیر اوبونتو استفاده می‌کنید، ابتدا مطمئن شوید Logrotate نصب است با درخواست نمایش نسخه:

logrotate --version

اگر نسخه نصب شده تفاوت زیادی با نسخه اوبونتو داشت، ممکن است برخی گزینه‌های پیکربندی آموزش داده شده کار نکند. برای اطلاع دقیق‌تر، مستندات نسخه خود را با دستور زیر بخوانید:

man logrotate

می‌توانید نسخه آنلاین مستندات را نیز از این لینک مطالعه کنید:
https://www.man7.org/linux/man-pages/man8/logrotate.8.html

بررسی ساختار پیکربندی پیش‌فرض Logrotate در اوبونتو

پیکربندی Logrotate معمولاً در دو مکان زیر قرار دارد:

  • /etc/logrotate.conf
  • /etc/logrotate.d/

به صورت پیش‌فرض، فایل logrotate.conf چرخش لاگ‌ها را به صورت هفتگی تنظیم می‌کند. فایل‌های لاگ توسط کاربر root و گروه syslog مالکیت دارند و چهار نسخه قدیمی نگهداری می‌شود (rotate 4). همچنین پس از چرخش، فایل لاگ جدیدی خالی ساخته می‌شود (create).

بیایید فایل پیکربندی بسته apt را در مسیر /etc/logrotate.d/ بررسی کنیم:

cat /etc/logrotate.d/apt

این فایل شامل بلوک‌های پیکربندی دو فایل لاگ در مسیر /var/log/apt/ است: term.log و history.log. هر دو گزینه‌های مشابهی دارند. تنظیماتی که در این بلوک‌ها تعریف نشده باشد، از /etc/logrotate.conf به ارث می‌رسد. تنظیمات موجود برای لاگ‌های apt عبارتند از:

  • چرخش هفتگی
  • نگهداری چهار فایل لاگ قبلی
  • ساخت فایل جدید پس از چرخش

این فایل‌های پیکربندی همچنین رفتار پیش‌فرض create را به ارث می‌برند که باعث ساخت یک فایل لاگ جدید پس از چرخش می‌شود. می‌توان این گزینه را با nocreate تغییر داد، اما این کار به طور موثر بیشتر قابلیت‌های دیگر را غیرفعال خواهد کرد.

گزینه‌های پیکربندی فراوانی وجود دارد که می‌توانید با اجرای دستور man logrotate آنها را مشاهده کنید.

پیکربندی چرخش لاگ برای یک برنامه سفارشی

برای مدیریت فایل‌های لاگ برنامه‌های خارج از خدمات سیستمی پیش‌فرض، دو راه داریم:

  1. اضافه کردن فایل پیکربندی در /etc/logrotate.d/
  2. ساخت یک فایل پیکربندی مستقل خارج از ساختار پیش‌فرض

بیایید این دو روش را با مثال بررسی کنیم.

روش اول: افزودن پیکربندی به /etc/logrotate.d/

فرض کنید یک وب‌سرور فرضی دارید که در مسیر /var/log/your-app/ دو فایل لاگ access.log و error.log ایجاد می‌کند. این برنامه با کاربر و گروه www-data اجرا می‌شود.

برای افزودن پیکربندی، ابتدا فایلی جدید در /etc/logrotate.d/ بسازید، مثلاً your-app:

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

و محتوای زیر را وارد کنید:

/var/log/your-app/*.log {
    weekly
    missingok
    rotate 4
    compress
    delaycompress
    notifempty
    create 640 www-data www-data
    sharedscripts
    postrotate
        systemctl reload your-app.service > /dev/null 2>&1 || true
    endscript
}

توضیح برخی دستورات:

  • weekly: چرخش هفتگی
  • missingok: در صورت نبودن فایل خطا ندهد
  • rotate 4: نگهداری چهار نسخه قدیمی
  • compress: فشرده کردن فایل‌های قدیمی
  • delaycompress: فشرده‌سازی با تاخیر (نسخه جدیدترین را فشرده نمی‌کند)
  • notifempty: اگر فایل خالی باشد چرخش نکند
  • create 640 www-data www-data: ساخت فایل جدید با پرمیشن 640 و مالک www-data
  • sharedscripts: اجرای اسکریپت‌های پس از چرخش فقط یک بار
  • postrotate ... endscript: دستور reload سرویس پس از چرخش

برای ذخیره در nano کلیدهای Ctrl+X و سپس Y و Enter را بزنید.

برای تست پیکربندی جدید، دستور dry-run را اجرا کنید:

sudo logrotate /etc/logrotate.conf --debug

خروجی نشان می‌دهد چه فایل‌هایی چرخش خواهند داشت و چه عملی انجام شده است. اگر همه چیز درست بود، کار شما تمام است. Logrotate پیش‌فرض روزانه اجرا می‌شود و پیکربندی جدید نیز اعمال خواهد شد.

روش دوم: پیکربندی مستقل خارج از ساختار پیش‌فرض

مثال دیگر: برنامه‌ای دارید که به عنوان کاربر sammy اجرا می‌شود و فایل‌های لاگ آن در /home/sammy/logs/ ذخیره می‌شود. می‌خواهید این لاگ‌ها را به صورت ساعتی بچرخانید. پس باید پیکربندی را خارج از /etc/logrotate.d/ انجام دهید.

ابتدا فایلی در دایرکتوری خانگی بسازید:

nano /home/sammy/logrotate.conf

محتوای زیر را در آن قرار دهید:

/home/sammy/logs/*.log {
    hourly
    missingok
    rotate 24
    compress
    delaycompress
    notifempty
    create 640 sammy sammy
    sharedscripts
}

این پیکربندی هر ساعت لاگ‌ها را چرخش می‌دهد، ۲۴ نسخه قدیمی نگه می‌دارد، فشرده می‌کند و بعد از چرخش، فایل جدیدی با مالکیت و دسترسی مناسب می‌سازد.

برای تست عملکرد، در پوشه خانگی با دستورات زیر دایرکتوری و یک فایل خالی لاگ بسازید:

cd ~
mkdir logs
touch logs/test.log

برای اجرای Logrotate با این پیکربندی و تعیین فایل وضعیت (state file) که در پویش بعدی Logrotate را راهنمایی می‌کند، دستور زیر را اجرا کنید:

logrotate --state /home/sammy/logrotate.status --verbose /home/sammy/logrotate.conf

توضیح پرچم‌ها:

  • --state: مسیر فایل وضعیت
  • --verbose: نمایش جزئیات اجرا

در بار اول اجرا، هیچ چرخشی انجام نمی‌شود چون لاگ‌ها هنوز خیلی تازه هستند.

فایل وضعیت را می‌توانید با:

cat /home/sammy/logrotate.status

مشاهده کنید. این فایل اطلاعاتی از زمان بررسی و چرخش لاگ‌ها دارد.

اگر بخواهید Logrotate را مجبور به چرخش حتی اگر شرایط ساعتی رعایت نشده باشد کنید، از گزینه --force استفاده کنید:

logrotate --force --state /home/sammy/logrotate.status /home/sammy/logrotate.conf

راه‌اندازی کرون برای اجرای Logrotate ساعتی

برای اجرای خودکار Logrotate هر ساعت، کرون (cron) را تنظیم کنید. با دستور زیر crontab کاربر را ویرایش کنید:

crontab -e

در فایل باز شده، خط زیر را به انتها اضافه کنید:

14 * * * * /usr/sbin/logrotate --state /home/sammy/logrotate.status /home/sammy/logrotate.conf

این کار دستور Logrotate را در دقیقه ۱۴ هر ساعت اجرا می‌کند.

فایل را ذخیره کرده و خارج شوید. این کار کرون‌جاب را نصب می‌کند.

بعد از یک ساعت، در مسیر لاگ‌ها نسخه‌های چرخش شده و فشرده شده (مانند access.log.1.gz) ظاهر می‌شود.

جمع‌بندی

در این آموزش، نسخه Logrotate را بررسی کردیم، ساختار پیش‌فرض پیکربندی اوبونتو را شناختیم و دو نوع روش پیکربندی برای لاگ‌های سفارشی را فعال کردیم.

برای کسب اطلاعات بیشتر درباره گزینه‌های دستوری و پیکربندی Logrotate، می‌توانید دستور زیر را در ترمینال اجرا کنید یا مستندات آنلاین را ببینید:

man logrotate

Online documentation

از همراهی شما با پارمین کلود متشکریم.

Click to rate this post!
[Total: 0 Average: 0]

نظرات کاربران

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *