تنظیم و مدیریت چرخش لاگ با 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 در سرور لینوکس خود، گزارش ها را به صورت دوره ای نگهداری کنید.
منبع:
افزودن نظر