دليل شامل لإدارة ملفات السجلات مع Logrotate على Ubuntu 20.04/22.04

إدارة ملفات السجلات مع Logrotate على أوبونتو

في أي بيئة خادم إنتاج، تُعد إدارة ملفات السجلات جانبًا حاسمًا من جوانب إدارة النظام. تحتوي ملفات السجلات على معلومات قيمة حول أحداث النظام وسلوك التطبيقات والمشكلات المحتملة، مما يجعلها لا غنى عنها لأغراض استكشاف الأخطاء وإصلاحها والمراقبة. ومع ذلك، إذا تركت دون رقابة، يمكن أن تنمو ملفات السجلات بسرعة، مستهلكة مساحة قرص كبيرة وقد تؤدي إلى تدهور الأداء أو حتى تعطل النظام.

تُعد 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 بشكل أساسي من خلال موقعين:

  1. /etc/logrotate.conf: يحتوي هذا الملف على الإعدادات الافتراضية ويقوم بإعداد تدوير السجلات لبعض سجلات النظام التي لا تمتلكها أي حزم مثبتة. كما أنه يتضمن ملفات التكوين من دليل /etc/logrotate.d باستخدام بيان include.
  2. /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 نهجين رئيسيين لهذا الغرض:

  1. إضافة التكوين إلى /etc/logrotate.d/
  2. إنشاء تكوين مستقل

إضافة التكوين إلى /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 أداة قوية تبسط هذه المهمة من خلال أتمتة تدوير السجلات وضغطها وتقليمها بناءً على قواعد وجداول زمنية قابلة للتخصيص.

من خلال اتباع الأمثلة وأفضل الممارسات الموضحة في هذا الدليل، يمكنك إدارة ملفات سجلات تطبيقاتك بشكل فعال، مما يضمن الاستخدام الأمثل لمساحة القرص والوصول السهل إلى بيانات السجلات التاريخية عند الحاجة.

LEAVE A COMMENT