LogRotate ( لاگ روتیت ) چیست ؟
logrotate سرویسی است در لینوکس که اغلب یکبار در روز اجرا میشود و فایل های لاگ سیستم که در آن تعریف شده است و تاریخ آرشیو برای آنها تعریف شده است آرشیو یا حذف میشوند.
“Log Rotation” فرآیند آرشیو کردن فایل لاگ فعلی ، ایجاد فایل لاگ تازه یا حذف لاگ فایل قدیمی است.
مساله ای که در لاگ فایل ها مهم هستند این است که قطعاً ما نمیخواهیم فایل های بزرگ و قدیمی را داشته باشیم یا میخواهیم این فایل ها آرشیو شوند.
اهمیت لاگ روتیت (Log Rotate) چیست ؟
لاگ فایل ها بسیار با اهمیت و کاربردی هستند و برای مدیران شبکه یا مدیران سرورها در جستجوی اطلاعات و نحوه عملکرد سرویس بسیار مفید هستند.
جستجو در لاک فایل های بسیار بزرگ سخت و کند خواهد بود. فایل لاک بزرگ حجم زیادی از دیسک شما را اشغال خواهد کرد در ضمن خود فرآیند زیپ کردن و آرشیو فایل های لاگ بزرگ طولانی و وقت گیر خواهد شد.
بر اساس مطالب بالا لازم است لاگ فایلها در زمان مناسب بر اساس حجم فایل یا تعداد روز های ذخیره سازی آرشیو و یا حذف شوند.
لاگ روتیت (Log Rotate) چگونه کار میکند ؟
سرویس logrotate در زمان های مقرری مثلاً یک بار در روز اجرا میشود :
/etc/cron.daily/logrotate
در صورتی که مایل هستید سرویس logrotate در زمان های زودتری مثلاً بصورت ساعتی اجرا شود لازم است که اجرای سرویس آن را توسط سرویس cron به ساعتی تبدیل کنید :
/etc/cron.hourly
زمانی که سرویس logrotate اجرا میشود این سرویس لاگ فایل های تعریف شده را میخواند تا بر اساس “تعداد آرشیو هایی که باید نگهداری شود ” یا ” چه زمانی باید لاگ فعلی بسته شود” عملیات خود را به انجام میرساند.
فایل logrotate.conf
فایل تنظیمات logrotate در مسیر زیر قرار دارد :
/etc/logrotate.conf
این فایل حاوی پارامترهای پیش فرض سرویس logrotate است و با توجه به توضیحات درون فایل میتوانیم مقادیر پیش فرض را تغییر دهیم.
در این فایل مسیر زیر محل تنظیمات logrotate مربوط به سایر برنامه ها را مشخص میکند :
include /etc/logrotate.d
مسیر logrotate.d
میتوانید با استفاده از دستور زیر مسیر دایرکتوری logrotate.d را نگاه کنید :
ls /etc/logrotate.d
بسته به اینکه چه برنامه هایی روی سرور شما نصب شده اند این برنامه ها در دایرکتوری فوق یک فایل در این مسیر برای تنظیم اختصاصی logrotate خود این برنامه ایجاد میکند.
در این مسیر لااقل یک فایل به نام syslog مشاهده میشود که لاگ های خود سیستم را rotate خواهد کرد.
داخل فایل های تنظیم هر برنامه
فایل زیر را مشاهده کنید این فایل قسمتی از فایل تنظیم logrotate مربوط به این برنامه در logrotate.d میباشد که از یک وب سرور Apache در سیستم عامل Fedora برداشته شده است:
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}
مسیر لاگ فایل ها در بالا مشخص شده است :
/var/log/httpd/*log
لاگ فایل ها
لاگ فایل ها اغلب بصورت یک فایل با استفاده از علامت { } مشخص میشوند اما شما میتوانید مانند زیر چند لاگ فایل تعریف کنید :
/var/foo/*.log /var/bar/log.txt {
b b b
b b b
}
همچنین مانند مثال فوق میتوان یک فایل یا چند فایل با علامت * یا log.* را مشخص کنید .
پارامتر Rotate count چیست ؟
دستوری مطابق زیر تعداد نگهداری لاگ فایل ها را قبل از حذف فایل لاگ مشخص میکند :
rotate 4
در دستور فوق مشخص میشود که تعداد 4 لاگ فایل نگهداری شود.
پارامتر Rotation interval چیست ؟
دستوری وجود دازد که مشخص میکند لاگ روتیشن برای چه مدت لاگ را نگهداری کند.
daily
weekly
monthly
yearly
پارامتر Size چیست ؟
میتوان دستور لاگ روتیشن را با توجه به حجم فایل لاگ مشخص کرد.
size 100k
size 100M
size 100G
مثالهای فوق دستور Log Rotate را بعد از بزرگ شدن فایل از حجم 100 کیلوبایت ، دومی بعد از بزرگ شدن از سایز 100 مگابایت و سومی بعد از بزرگ شدن از اندازه 100 گیگابایت مشخص میکند.
دقت شود که پارامتر size از درجه اهمیت و اجرای بالاتری نسبت به سایر پارامترها برخوردار است.
پارامتر Compression چیست ؟
پارامتر compress باعث فشرده سازی فایل لاگ بصورت gzip خواهد شد . با استفاده از دستور nocompress فشرده سازی کنسل خواهد شد.
در صورتی که مایل هستید فشرده سازی با تاخیر انجام شود و لزومی به انجام به سرعت آن وجود ندارد از پارامتر delaycompress استفاده شود.یکی از کاربردهای delaycomress در لاگ های سرویس آپاچی است.
پارامتر postrotate چیست ؟
postrotate اسکریپتی است که هر زمان که logrotate انجام میشود اجرا میشود.
به عنوان مثال میتوان سرویس مورد نظر را در این اسکریپت Restart کرد :
postrotate
/usr/sbin/apachectl restart > /dev/null
endscript
بعد از دستورات postrotate با استفاده از endscript اسکریپت بسته میشود.
پارامتر sharedscripts چیست ؟
این پارامتر باعث میشود که در صورتی یک برنامه مانند Apache دارای چندین لاگ بود ، فقط یک بار اسکریپت تعریف شده در postrotate انجام شود و ری استارت آپاچی مکرر انجام نشود.