في أي بيئة خادم إنتاج، تُعد إدارة ملفات السجلات جانبًا حاسمًا من جوانب إدارة النظام. تحتوي ملفات السجلات على معلومات قيمة حول أحداث النظام وسلوك التطبيقات والمشكلات المحتملة، مما يجعلها لا غنى عنها لأغراض استكشاف الأخطاء وإصلاحها والمراقبة. ومع ذلك، إذا تركت دون رقابة، يمكن أن تنمو ملفات السجلات بسرعة، مستهلكة مساحة قرص كبيرة وقد تؤدي إلى تدهور الأداء أو حتى تعطل النظام.
تُعد Logrotate أداة قوية مصممة لمعالجة هذه المشكلة من خلال تدوير وضغط وتقليم ملفات السجلات تلقائيًا بناءً على قواعد وجداول زمنية محددة مسبقًا. من خلال ضغط وأرشفة ملفات السجلات القديمة بانتظام، وإزالة تلك التي أصبحت قديمة، تضمن Logrotate استخدام مساحة القرص بكفاءة وأن تظل ملفات السجلات قابلة للإدارة.
في هذا الدليل الشامل، سنستكشف وظائف Logrotate، وتكوينها الافتراضي على Ubuntu 20.04 و 22.04، ونمر عبر عملية إعداد قواعد تدوير سجلات مخصصة لتطبيق وهمي.
متطلبات
قبل المتابعة، تأكد من توفر ما يلي:
- خادم Ubuntu 20.04 أو 22.04 مع حساب مستخدم غير جذر لديه صلاحيات sudo.
- معرفة بالعمليات الأساسية في سطر الأوامر وتحرير النصوص.
تأتي Logrotate مثبتة مسبقًا على Ubuntu، ولكن إذا كنت بحاجة إلى تثبيتها يدويًا، يمكنك القيام بذلك بتشغيل الأوامر التالية:
$ sudo apt update
$ sudo apt install logrotate
الخطوة 1: التحقق من إصدار Logrotate
على الرغم من أن Logrotate مثبتة مسبقًا على Ubuntu، إلا أنه من الممارسات الجيدة التحقق من الإصدار المثبت وإعداداته الافتراضية. يمكنك القيام بذلك بتشغيل الأمر التالي:
$ logrotate --version
سيعرض هذا الأمر رقم الإصدار، إلى جانب معلومات حول الإعدادات الافتراضية مثل أمر البريد وأمر الضغط ومسار ملف الحالة. فيما يلي مثال على الإخراج:
logrotate 3.19.0
أمر البريد الافتراضي: /usr/bin/mail
أمر الضغط الافتراضي: /bin/gzip
أمر فك الضغط الافتراضي: /bin/gunzip
امتداد الضغط الافتراضي: .gz
مسار ملف الحالة الافتراضي: /var/lib/logrotate/status
دعم ACL: yes
دعم SELinux: yes
إذا كنت تستخدم توزيعة غير Ubuntu أو إصدارًا مختلفًا كثيرًا من Logrotate، فقد لا تنطبق بعض خيارات التكوين المشروحة في هذا الدليل. في مثل هذه الحالات، استشر صفحات الدليل (man logrotate
) أو التوثيق عبر الإنترنت الخاص بإصدار Logrotate الخاص بك.
الخطوة 2: استكشاف التكوين الافتراضي
على أنظمة Ubuntu، يتم إدارة تكوين Logrotate بشكل أساسي من خلال موقعين:
/etc/logrotate.conf
: يحتوي هذا الملف على الإعدادات الافتراضية ويقوم بإعداد تدوير السجلات لبعض سجلات النظام التي لا تمتلكها أي حزم مثبتة. كما أنه يتضمن ملفات التكوين من دليل/etc/logrotate.d
باستخدام بيانinclude
./etc/logrotate.d/
: يحتوي هذا الدليل على ملفات التكوين للعديد من الحزم المثبتة التي تتطلب تدوير السجلات. على سبيل المثال، ستجد ملفات تكوين لأدوات النظام الأساسية مثلapt
وdpkg
وrsyslog
وغيرها.
لنفحص التكوين الافتراضي في ملف /etc/logrotate.conf
:
$ sudo cat /etc/logrotate.conf
يقوم هذا الملف بإعداد تدوير السجلات أسبوعيًا لملفات السجلات المملوكة للمستخدم الجذر ومجموعة syslog. يحتفظ بأربعة ملفات سجلات مدورة (rotate 4
) ويقوم بإنشاء ملفات سجلات فارغة جديدة بعد التدوير (create
). بالإضافة إلى ذلك، يتضمن ملفات التكوين من الدليل /etc/logrotate.d
.
بعد ذلك، لنلقِ نظرة على مثال لملف تكوين من الدليل /etc/logrotate.d
للحزمة apt
:
$ sudo cat /etc/logrotate.d/apt
/var/log/apt/term.log {
rotate 12
monthly
compress
missingok
notifempty
}
/var/log/apt/history.log {
rotate 12
monthly
compress
missingok
notifempty
}
يحتوي هذا الملف على كتل تكوين لملفي سجل: term.log
و history.log
، الموجودين في الدليل /var/log/apt/
. الخيارات المستخدمة هنا هي:
rotate 12
: الاحتفاظ بـ 12 ملف سجل مدور قديم (يتجاوز الافتراضي البالغ 4).monthly
: تدوير السجلات مرة واحدة شهريًا (يتجاوز الافتراضي الأسبوعي).compress
: ضغط ملفات السجلات المدورة باستخدام gzip.missingok
: عدم إنشاء خطأ إذا كان ملف السجل مفقودًا.notifempty
: عدم تدوير ملف السجل إذا كان فارغًا.
أي خيارات غير محددة في كتل التكوين هذه ستحصل على القيم الافتراضية من /etc/logrotate.conf
.
الخطوة 3: إعداد تكوين مخصص
في حين أن التكوين الافتراضي كافٍ لمعظم سجلات النظام، قد تحتاج إلى إعداد قواعد تدوير سجلات مخصصة لتطبيقاتك. تقدم Logrotate نهجين رئيسيين لهذا الغرض:
- إضافة التكوين إلى
/etc/logrotate.d/
- إنشاء تكوين مستقل
إضافة التكوين إلى /etc/logrotate.d/
تنطوي هذه الطريقة على إنشاء ملف تكوين جديد في دليل /etc/logrotate.d/
. سيتم تشغيل التكوين المحدد في هذا الملف يوميًا كمستخدم الجذر، إلى جانب جميع مهام Logrotate الافتراضية الأخرى.
لنقم بإعداد تكوين لتطبيق ويب وهمي يُسمى “your-app” ينشئ ملفات access.log
و error.log
في الدليل /var/log/your-app/
. يعمل التطبيق كمستخدم ومجموعة www-data
.
أولاً، أنشئ ملف تكوين جديد:
$ sudo nano /etc/logrotate.d/your-app
أضف التكوين التالي إلى الملف:
/var/log/your-app/*.log {
daily
missingok
rotate 14
compress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload your-app
endscript
}
فيما يلي شرح لكل خيار:
daily
: تدوير السجلات يوميًا (يتجاوز التدوير الأسبوعي الافتراضي).missingok
: عدم إنشاء خطأ إذا كان ملف السجل مفقودًا.rotate 14
: الاحتفاظ بـ 14 ملف سجل مدور قديم.compress
: ضغط ملفات السجلات المدورة باستخدام gzip.notifempty
: عدم تدوير ملف السجل إذا كان فارغًا.create 0640 www-data www-data
: إنشاء ملف سجل فارغ جديد بأذونات 0640، ومملوكًا للمستخدم ومجموعة www-data.sharedscripts
: تشغيل أي سكربتات محددة في التكوين (مثلpostrotate
) مرة واحدة فقط لكل تشغيل، بدلاً من لكل ملف سجل.postrotate
إلىendscript
: يحتوي هذا الكتلة على سكربت سيتم تشغيله بعد تدوير السجلات. في هذه الحالة، فهو يعيد تحميل خدمةyour-app
للتأكد من أنها تبدأ الكتابة في ملف السجل الجديد.
احفظ الملف وأغلقه. يمكنك اختبار التكوين من خلال تشغيل جولة جافة:
$ sudo logrotate /etc/logrotate.conf --debug
تنفذ هذه الأمر Logrotate مع ملف التكوين القياسي وتمكن وضع التصحيح، حيث تُطبع معلومات حول ملفات السجلات التي سيتم معالجتها والإجراءات التي سيتم اتخاذها.
إنشاء تكوين مستقل
في بعض الحالات، قد تحتاج إلى تشغيل Logrotate كمستخدم غير جذر أو تدوير السجلات بشكل أكثر تكرارًا من الجدول الزمني اليومي الافتراضي. في مثل هذه الحالات، يمكنك إنشاء تكوين Logrotate مستقل وإعداد مهمة cron لتشغيله في الفترة الزمنية المطلوبة.
لنفترض أن لديك تطبيقًا يعمل كمستخدم bob
، وينشئ سجلات في الدليل /home/bob/logs/
. تريد تدوير هذه السجلات كل ساعة.
أولاً، أنشئ ملف تكوين في دليل المنزل الخاص بك:
$ nano /home/bob/logrotate.conf
أضف التكوين التالي:
/home/bob/logs/*.log {
hourly
missingok
rotate 24
compress
create
}
سيقوم هذا التكوين بتدوير السجلات كل ساعة، والاحتفاظ بـ 24 ملف سجل مدور قديم، وضغطها، وإنشاء ملف سجل فارغ جديد بعد التدوير.
احفظ الملف وأغلقه.
بعد ذلك، أنشئ ملف سجل لأغراض الاختبار:
$ cd ~
$ mkdir logs
$ touch logs/access.log
الآن، شغل Logrotate مع التكوين الجديد وحدد موقع ملف الحالة:
$ logrotate /home/bob/logrotate.conf --state /home/bob/logrotate-state --verbose
تحدد خاصية --state
موقع ملف الحالة، الذي يسجل معلومات عن السجلات التي تمت معالجتها خلال كل تشغيل. يعرض علم --verbose
إخراجًا مفصلاً حول إجراءات Logrotate.
يجب أن ترى إخراجًا مشابهًا للآتي:
قراءة ملف التكوين /home/bob/logrotate.conf
معالجة 1 سجل
تدوير النمط: /home/bob/logs/*.log كل ساعة (24 تدويرًا)
سيتم تدوير ملفات السجلات الفارغة، وسيتم إزالة السجلات القديمة
النظر في ملف السجل /home/bob/logs/access.log
لا يحتاج ملف السجل إلى التدوير
سجلت Logrotate معلومات عن السجلات التي صادفتها في ملف الحالة. يمكنك عرض محتويات ملف الحالة بـ:
$ cat /home/bob/logrotate-state
إذا شغلت نفس الأمر بعد ساعة واحدة، يجب أن يتم تدوير ملف السجل كما هو متوقع.
لإرغام Logrotate على تدوير ملف السجل على الفور (لأغراض الاختبار)، استخدم العلم --force
:
$ logrotate /home/bob/logrotate.conf --state /home/bob/logrotate-state --verbose --force
وأخيرًا، قم بإعداد مهمة cron لتشغيل Logrotate كل ساعة. افتح crontab لمستخدمك بـ:
$ crontab -e
أضف السطر التالي إلى ملف crontab:
14 * * * * /usr/sbin/logrotate /home/bob/logrotate.conf --state /home/bob/logrotate-state
سيقوم هذا بتشغيل أمر logrotate
في الدقيقة 14 من كل ساعة، باستخدام المسار الكامل إلى ثنائي logrotate
وتحديد مواقع ملف التكوين وملف الحالة.
احفظ واترك ملف crontab. ستشتغل المهمة cron الآن في الجدول الزمني المحدد.
خيارات التكوين المتقدمة
في حين تظهر الأمثلة المغطاة في هذا الدليل بعض خيارات Logrotate الشائعة، هناك العديد من الخيارات المتقدمة الأخرى لضبط سلوك تدوير السجلات بدقة. فيما يلي بعض الخيارات البارزة:
dateext
: يضيف هذا الخيار امتدادًا للتاريخ إلى أسماء ملفات السجلات المدورة، مما يسهل تحديد الفترة الزمنية التي يغطيها كل ملف سجل.dateformat
: يحدد تنسيق التاريخ الذي سيتم استخدامه معdateext
.mail
: يرسل تقريرًا بتدوير ملف السجل إلى عنوان البريد الإلكتروني المحدد.olddir
: ينقل ملفات السجلات المدورة إلى دليل مختلف بدلاً من الاحتفاظ بها في نفس الدليل الذي يوجد فيه ملف السجل الحالي.prerotate
وpostrotate
: تسمح لك هذه الخيارات بتشغيل سكربتات قبل وبعد تدوير السجلات، على التوالي.size
: تدوير ملفات السجلات بناءً على حجمها، بدلاً من جدول زمني ثابت.
يمكنك استكشاف هذه الخيارات وغيرها عن طريق الرجوع إلى صفحة دليل Logrotate (man logrotate
) أو التوثيق عبر الإنترنت.
خلاصة
تعد إدارة ملفات السجلات بشكل فعال أمرًا بالغ الأهمية للحفاظ على بيئة خادم صحية وضمان حفظ بيانات السجلات القيمة وإمكانية الوصول إليها عند الحاجة. تُعد Logrotate أداة قوية تبسط هذه المهمة من خلال أتمتة تدوير السجلات وضغطها وتقليمها بناءً على قواعد وجداول زمنية قابلة للتخصيص.
من خلال اتباع الأمثلة وأفضل الممارسات الموضحة في هذا الدليل، يمكنك إدارة ملفات سجلات تطبيقاتك بشكل فعال، مما يضمن الاستخدام الأمثل لمساحة القرص والوصول السهل إلى بيانات السجلات التاريخية عند الحاجة.