خانه » نحوه مدیریت فایل های لاگ با استفاده از Logrotate در لینوکس
آموزش لینوکس

نحوه مدیریت فایل های لاگ با استفاده از Logrotate در لینوکس

تنظیم و مدیریت چرخش لاگ با Logrotate در لینوکس

ما قبلاً راهنمایی منتشر کرده ایم که نحوه راه اندازی سرور Rsyslog متمرکز در سیستم CentOS را شرح می دهد. امروز، در این راهنما، ما قصد داریم در مورد چیستی Logrotate ، نحوه نصب Logrotate و نحوه مدیریت فایل های log با استفاده از Logrotate در لینوکس بحث کنیم .

Logrotate چیست؟

همانطور که از نام آن پیداست، Logrotate لاگ ها را به طور کامل از سیستم شما در بازه زمانی منظم می چرخاند. همچنین امکان چرخش خودکار، فشرده سازی، حذف و ارسال فایل های لاگ را فراهم می کند.

ابزار logrotate هر فایل گزارش را به صورت ساعتی، روزانه، هفتگی، ماهانه یا زمانی که بیش از حد بزرگ می شود یا اندازه فایل لاگ به اندازه مشخصی می رسد مدیریت می کند.

این ابزار logrotate مدیریت فایل‌های گزارش را ساده می‌کند و به ویژه برای سیستم‌هایی که روزانه حجم زیادی از فایل‌های گزارش تولید می‌کنند مفید است.

Logrotate را در لینوکس نصب کنید

Logrotate در مخازن پیش فرض اکثر توزیع های لینوکس موجود است.

برای نصب logrotate در آلپاین لینوکس، اجرا کنید:

$ sudo apk add logrotate

برای نصب logrotate در Arch Linux و انواع آن مانند EndeavourOS و Manjaro Linux، دستور زیر را اجرا کنید:

$ sudo pacman -S logrotate

برای نصب logrotate در سیستم های مبتنی بر RPM مانند Fedora، RHEL، CentOS، CentOS Stream، AlmaLinux و Rocky Linux، اجرا کنید:

$ sudo dnf install logrotate

در سیستم‌های قدیمی‌تر RHEL، CentOS، به جای dnf از yum استفاده کنید:

$ sudo yum install logrotate

برای نصب logrotate در دبیان، اوبونتو و مشتقات اوبونتو مانند Elementary OS، Linux Mint و Pop!_OS، دستور زیر را اجرا کنید:

$ sudo apt install logrotate

logrotate را می توان با استفاده از دستور زیر در سیستم های SUSE و openSUSE نصب کرد:

$ sudo zypper install logrotate

Logrotate را از منبع کامپایل و نصب کنید

مطمئن شوید که ابزارهای توسعه را در سیستم لینوکس خود نصب کرده اید. آخرین logrotate tarball را از صفحه انتشار دانلود کنید . در هنگام نوشتن این راهنما، آخرین نسخه 3.21.0 بود . اجازه دهید آن را با استفاده از برنامه wget در فهرست فعلی دانلود کنیم:

$ wget https://github.com/logrotate/logrotate/releases/download/3.21.0/logrotate-3.21.0.tar.gz

اجازه دهید تربال دانلود شده را استخراج کنیم:

$ tar xvzf logrotate-3.21.0.tar.gz

با این کار محتویات tarball در فهرستی به نام  logrotate-3.21.0 استخراج می شود. وارد دایرکتوری می شویم:

$ cd logrotate-3.21.0

سپس دستور زیر را اجرا کنید:

$ ./configure

اگر با خطای زیر مواجه شدید:

configure: error: libpopt required but not found

libpopt-dev را در سیستم های مبتنی بر دبیان نصب کنید :

$ sudo apt install libpopt-dev

در سیستم های مبتنی بر RPM، بسته popt-devel را نصب کنید .

$ sudo dnf install popt-devel

و سپس، دستور را دوباره اجرا کنید:

$ ./configure

در نهایت، logrotate را با استفاده از دستورات نصب کنید:

$ make
$ sudo make install

فایل های گزارش را با استفاده از Logrotate مدیریت کنید

فایل پیکربندی اصلی LogRotate /etc/logrotate.conf است .

در اینجا محتویات پیش فرض این فایل در سیستم لینوکس فدورا آمده است.

# see "man logrotate" for details

# global options do not affect preceding include directives

# rotate log files weekly
weekly

# 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.

خروجی ممکن است در سایر توزیع های لینوکس کمی متفاوت به نظر برسد. به عنوان مثال، فایل آرچ لینوکس قدیمی من logrotate.conf محتویات مختلفی دارد.

$ cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# restrict maximum size of log files
#size 20M

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

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

# Logs are moved into directory for rotation
# olddir /var/log/archive

# Ignore pacman saved files
tabooext + .pacorig .pacnew .pacsave

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

/var/log/wtmp {
 monthly
 create 0664 root utmp
 minsize 1M
 rotate 1
}

/var/log/btmp {
 missingok
 monthly
 create 0600 root utmp
 rotate 1
}

بیایید ببینیم هر گزینه در فایل پیکربندی بالا چه می کند.

  • weekly – هر هفته logهای مربوط را می چرخاند.
  • rotate 4 – به طور پیش فرض، LogRotate چهار هفته (یک ماه) فایل های log را نگه می دارد. از آنجایی که همه فایل‌های گزارش را پس از یک دوره زمانی خاص می‌چرخاند، اگر نمی‌خواهید فایل‌های log مهم را از دست بدهید، لازم است یک نسخه پشتیبان تهیه کنید.
  • size 20M – فایل های log را در صورتی که به اندازه 20 مگابایت برسند می چرخاند. به شکل پیشفرض، این گزینه غیرفعال است. برای فعال کردن آن، فقط آن از کامنت خارج کنید.
  • create – یک بار پس از چرخاندن فایل های لاگ قدیمی، فایل های لاگ جدید ایجاد می کند. این گزینه به طور پیش فرض فعال است.
  • compress – فایل های گزارش را فشرده می کند. همچنین، به طور پیش فرض لاگ ها را فشرده نمی شود. اگر می‌خواهید گزارش‌ها را فشرده کنید، این خط را از حال کامنت خارج کنید.
  • /etc/logrotate.d/  – این دایرکتوری حاوی فایل‌های تنظیمات log برنامه است.
  • missing ok – اگر فایل log وجود نداشته باشد، Logrotate بدون ارسال پیام خطا به فایل بعدی می رود.

Logrotate فایل های گزارش را بخش بندی می کند و گزارش ها را بر اساس تنظیماتی که در فهرست /etc/logrotate.d/ مشخص شده اند فشرده می کند.

اجازه دهید نگاهی به محتویات این دایرکتوری بیندازیم.

$ ls /etc/logrotate.d/

خروجی نمونه:

bootlog  chrony  firewalld  httpd        libvirtd       numad  psacct  sssd            wtmp
btmp     dnf     glusterfs  iscsiuiolog  libvirtd.qemu  ppp    samba   wpa_supplicant

همانطور که در خروجی بالا مشاهده می کنید، این دایرکتوری حاوی فایل های تنظیمات مختلفی برای همه لاگ های مدیریت شده توسط Logrotate است.

برای مشاهده تنظیمات لاگ یک برنامه خاص، به عنوان مثال samba ، اجرا کنید:

$ cat /etc/logrotate.d/samba

خروجی نمونه:

/var/log/samba/log.smbd /var/log/samba/log.nmbd /var/log/samba/*.log {
 notifempty
 missingok
 sharedscripts
 copytruncate
 postrotate
 /bin/kill -HUP `cat /var/run/samba/*.pid 2>/dev/null` 2>/dev/null || true
 endscript
}

اینجا،

  • notifempty – نشان می دهد که فایل های گزارش در صورت خالی بودن چرخانده نمی شوند.
  • copytruncate – پس از ایجاد یک کپی، فایل لاگ اصلی را در جای خود truncate کنید.
  • sharedscripts – اسکریپت ها فقط یک بار اجرا می شوند، مهم نیست که چه تعداد لاگ با الگوی وایلد کارد مطابقت دارند.
  • $ cat /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 /etc/logrotate.conf
  • EXITVALUE=$?
  • if [ $EXITVALUE != 0 ]; then
  • /usr/bin/logger -t logrotate “ALERT exited abnormally with [$EXITVALUE]”
  • fi
  • exit $EXITVALUE
  • /endscript – خطوط بین postrotate و endscript پس از چرخش فایل log اجرا می شوند.

شما همچنین می توانید فایل های تنظیمات لاگ خود را در  /etc/logrotate.d/دایرکتوری ایجاد کنید و تنظیمات خود را تعریف کنید.

پیکربندی Cron

Cron برنامه logroate را روزانه اجرا می‌کند. برای جلوگیری از مداخله دستی کاربر، می‌توانید تنظیمات چرخش log خودکار را در فایل مشخص کنید: 

$ cat /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 /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit $EXITVALUE

این چرخش log سیستم را هر روز در یک زمان خاص انجام می دهد.

وضعیت Logrotate را بررسی کنید

برای بررسی اینکه آیا فایل‌های log در حال چرخش هستند یا نه، فایل logrotate.status را بررسی کنید:

$ sudo cat /var/lib/logrotate/logrotate.status

خروجی نمونه:

logrotate state -- version 2
"/var/log/glusterfs/snaps/*/*.log" 2022-11-29-14:0:0
"/var/log/firewalld" 2022-11-29-14:0:0
"/var/log/boot.log" 2023-4-7-16:10:29
"/var/log/hawkey.log" 2023-4-7-16:10:29
"/var/log/glusterfs/*.log" 2022-11-29-14:0:0
"/var/log/httpd/*log" 2022-11-29-14:0:0
"/var/log/chrony/*.log" 2022-11-29-14:0:0
"/var/log/wtmp" 2022-11-29-14:0:0
"/var/log/btmp" 2023-4-7-16:10:29
"/var/log/glusterfs/samples/*.samp" 2022-11-29-14:0:0
"/var/log/iscsiuio.log" 2022-11-29-14:0:0
"/var/log/libvirt/libvirtd.log" 2022-11-29-14:0:0
"/var/log/libvirt/qemu/*.log" 2022-11-29-14:0:0
"/var/log/sssd/sssd_kcm.log" 2023-4-7-16:10:29
"/var/log/wpa_supplicant.log" 2022-11-29-14:0:0
"/var/log/glusterfs/bricks/*.log" 2022-11-29-14:0:0
"/var/log/numad.log" 2022-11-29-14:0:0
"/var/log/ppp/connect-errors" 2022-11-29-14:0:0
"/var/log/samba/log.*" 2022-11-29-14:0:0
"/var/account/pacct" 2022-11-29-14:0:0

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

$ cat /var/lib/logrotate.status

خروجی نمونه:

logrotate state -- version 2
"/var/log/samba/log.smbd" 2022-5-12-11:0:0
"/var/log/lircd" 2022-6-15-10:0:0
"/var/log/httpd/*log" 2022-5-12-11:0:0
"/var/log/wtmp" 2022-5-6-10:0:0
"/var/log/samba/*.log" 2022-5-12-11:0:0
"/var/log/btmp" 2023-4-1-11:36:53
"/var/log/samba/log.nmbd" 2023-4-1-11:0:0

کمک گرفتن

برای جزئیات بیشتر، lorotate را با وارد کردن دستور زیر اجرا کنید:

$ logrotate --help

همچنین به صفحات man مراجعه کنید:

$ man logrotate

نتیجه

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

منبع:

مهدی منصوری

من مهدی منصوری و کارشناس حوزه نرم افزار و امنیت اطلاعات هستم. کارشناسی ارشد خودم را در رشته امنیت اطلاعات از دانشگاه مالک اشتر تهران گرفتم. هم اکنون در زمینه DevOPS مشغول هستم. و در زمان های ممکن در این سایت و چند سایت دیگه مطلب می گذارم

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

مهدی منصوری

من مهدی منصوری و کارشناس حوزه نرم افزار و امنیت اطلاعات هستم. کارشناسی ارشد خودم را در رشته امنیت اطلاعات از دانشگاه مالک اشتر تهران گرفتم.
هم اکنون در زمینه DevOPS مشغول هستم. و در زمان های ممکن در این سایت و چند سایت دیگه مطلب می گذارم

افزودن نظر

برای ارسال نظرات خود اینجا را کلیک کنید