مقدمة
Logrotate هو أداة نظام تدير دورة تلقائية وضغط ملفات السجل. إذا لم يتم دوران ملفات السجل وضغطها وتقليمها بانتظام، فقد تستهلك في نهاية المطاف جميع مساحة القرص المتاحة على النظام.
يتم تثبيت Logrotate افتراضيًا على Ubuntu 22.04، ويتم إعداده للتعامل مع احتياجات دوران السجل الافتراضية لجميع الحزم المثبتة، بما في ذلك rsyslog
، معالج السجل النظامي الافتراضي.
في هذا المقال، سنستكشف تكوين Logrotate الافتراضي، ثم نقوم بتكوين دوران السجل لتطبيق مخصص وهمي.
المتطلبات الأولية
يفترض هذا البرنامج التعليمي أن لديك خادم Ubuntu 22.04، مع مستخدم غير جذر يمكنه استخدام sudo، كما هو موضح في إعداد الخادم الأولي مع Ubuntu 22.04.
يتوفر Logrotate على العديد من توزيعات Linux الأخرى أيضًا، ولكن قد يكون التكوين الافتراضي مختلفًا تمامًا. ستظل الأقسام الأخرى من هذا البرنامج التعليمي قابلة للتطبيق طالما كانت نسخة Logrotate مماثلة لنسخة Ubuntu 22.04. اتبع الخطوة 1 لتحديد إصدار Logrotate الخاص بك.
قم بتسجيل الدخول إلى خادمك بوصفك مستخدمًا يمكنه استخدام sudo للبدء.
الخطوة 1 — تأكيد نسخة Logrotate الخاصة بك
تم تثبيت Logrotate بشكل افتراضي على Ubuntu. ومع ذلك، إذا كنت بحاجة إلى تثبيته، قم بتشغيل الأوامر التالية لتحديث قائمة الحزم واسترداد الحزمة:
إذا كنت تستخدم خادمًا غير مبني على Ubuntu، تأكد أولاً من تثبيت Logrotate عن طريق طلب معلومات الإصدار الخاصة به:
Outputlogrotate 3.19.0
Default mail command: /usr/bin/mail
Default compress command: /bin/gzip
Default uncompress command: /bin/gunzip
Default compress extension: .gz
Default state file path: /var/lib/logrotate/status
ACL support: yes
SELinux support: yes
إذا كان Logrotate مثبتًا ولكن رقم الإصدار مختلف بشكل كبير، قد تواجه مشاكل مع بعض خيارات التكوين التي يتم استكشافها في هذا البرنامج التعليمي. يرجى الرجوع إلى الوثائق للنسخة المحددة من Logrotate عن طريق قراءة صفحتها الدليلية (man
):
يمكنك أيضًا الاطلاع على النسخة عبر الإنترنت من وثائق Logrotate. فيما يلي سنلقي نظرة على هيكل التكوين الافتراضي لـ Logrotate على Ubuntu.
الخطوة 2 — استكشاف تكوين Logrotate
يمكن العثور عادةً على معلومات تكوين Logrotate في مكانين على Ubuntu:
/etc/logrotate.conf
: يحتوي هذا الملف على بعض الإعدادات الافتراضية ويضبط دورة تناوب لبعض السجلات التي لا تملكها أي حزم نظام. كما يستخدم بيانinclude
لجلب تكوين من أي ملف في دليل/etc/logrotate.d
./etc/logrotate.d/
: هنا حيث ستضع أي حزم تقوم بتثبيتها وتحتاج إلى مساعدة في تناوب السجلات تكوينات Logrotate. في تثبيت قياسي يجب أن تكون لديك بالفعل ملفات هنا لأدوات النظام الأساسية مثلapt
،dpkg
،rsyslog
وما إلى ذلك.
بشكل افتراضي، ستكون logrotate.conf
تكوينات تناوب أسبوعية للسجلات، مع ملفات سجل تملكها مستخدم root ومجموعة syslog، مع الاحتفاظ بأربعة ملفات سجل في كل مرة (rotate 4
)، وإنشاء ملفات سجل جديدة فارغة بعد تناوب الملف الحالي (create
).
دعنا نلقي نظرة على ملف تكوين Logrotate لحزمة ما في /etc/logrotate.d
. استخدم cat
لعرض الملف لأداة حزمة apt
:
Output/var/log/apt/term.log {
rotate 12
monthly
compress
missingok
notifempty
}
/var/log/apt/history.log {
rotate 12
monthly
compress
missingok
notifempty
}
يحتوي هذا الملف على كتل تكوين لملفي سجل مختلفين في دليل /var/log/apt/
: term.log
و history.log
. كلاهما يحمل نفس الخيارات. أي خيارات غير مضبوطة في هذه الكتل سترث القيم الافتراضية أو تلك المضبوطة في /etc/logrotate.conf
. أي إعداد في ملف Logrotate سيكون له الأولوية على قيم Logrotate الافتراضية، التي يتم تكوينها في /etc/logrotate.conf
. الخيارات المضبوطة لسجلات apt
هي:
rotate 12
: قم بالاحتفاظ باثنتي عشرة ملف سجل قديم. يتم تجاوز القيمة الافتراضية لـrotate 4
.monthly
: قم بالتدوير مرة واحدة في الشهر. يتم تجاوز القيمة الافتراضية لـweekly
.compress
: ضغط الملفات المدوّرة. يتم استخدامgzip
افتراضيًا وينتج ملفات تنتهي بامتداد.gz
. يمكن تغيير أمر الضغط باستخدام الخيارcompresscmd
.missingok
: لا تكتب رسالة خطأ إذا كان ملف السجل مفقودًا.notifempty
: لا تقم بتدوير ملف السجل إذا كان فارغًا.
يورث هذه الملفات التكوينية أيضًا سلوك الإنشاء الافتراضي create
، الذي يوجه Logrotate لإنشاء سجلات جديدة بعد التدوير. يمكن تجاوز ذلك باستخدام nocreate
، على الرغم من أن ذلك سيعطل فعالية معظم وظائف أخرى.
هناك العديد من خيارات التكوين الأخرى المتاحة. يمكنك قراءة كل منها عن طريق كتابة man logrotate
في سطر الأوامر لعرض صفحة دليل Logrotate.
فيما يلي، سنقوم بإعداد ملف تكوين لمعالجة سجلات خدمة خيالية تُسمى your-app
.
الخطوة 3 — إعداد تكوين مثالي
لإدارة ملفات السجل باستخدام logrotate للتطبيقات خارج الخدمات النظامية المعبأة مسبقًا والمُكونة مُسبقًا، لدينا خياران:
- إنشاء ملف تكوين Logrotate جديد ووضعه في
/etc/logrotate.d/
. سيتم تشغيله يوميًا بصلاحيات المستخدم root بجانب جميع مهام Logrotate القياسية الأخرى. - إنشاء ملف تكوين جديد وتشغيله خارج إعداد Logrotate الافتراضي في Ubuntu. هذا ضروري فقط إذا كنت بحاجة لتشغيل Logrotate كمستخدم غير root، أو إذا كنت ترغب في تدوير السجلات بشكل أكثر تواترًا من اليومي (سيكون تكوين
hourly
في/etc/logrotate.d/
غير فعّال، لأن إعداد Logrotate للنظام يعمل مرة واحدة في اليوم فقط).
لنلقي نظرة على هاتين الخيارين مع بعض الإعدادات النموذجية.
إضافة التكوين إلى /etc/logrotate.d/
نريد تكوين تدوير السجلات لخادم ويب خيالي يضع ملفات access.log
و error.log
في /var/log/your-app/
. يعمل كمستخدم ومجموعة www-data
.
لإضافة تكوين لملفات السجلات your-app
إلى /etc/logrotate.d/
، افتح ملفًا جديدًا في دليل /etc/logrotate.d
باستخدام nano
أو المحرر المفضل لديك:
أضف الأسطر التالية إلى ملف التكوين الجديد الخاص بك:
/var/log/your-app/*.log {
daily
missingok
rotate 14
compress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload your-app
endscript
}
بعض التوجيهات التكوينية الجديدة في هذا الملف هي:
create 0640 www-data www-data
: ينشئ هذا ملف سجل فارغ جديد بعد التدوير، بالأذونات المحددة (0640
)، وصاحب الامتياز (www-data
)، والمجموعة أيضًا (www-data
).sharedscripts
: هذا العلم يعني أن أي نصوص مضافة إلى التكوين تعمل مرة واحدة فقط لكل تشغيل، بدلاً من كل مرة يتم فيها تدوير ملف سجل. نظرًا لأن المسار/var/log/your-app/*.log
يتضمن بادئة*
، فإن هذا التكوين سيطابق أي عدد من ملفات السجل في دليلyour-app
. بدون خيارsharedscripts
، سيتم تشغيل النص المحدد فيpostrotate
في كل مرة يقوم فيها logrotate بمعالجة ملف سجل بدون هذا الخيار.postrotate
إلىendscript
: يحتوي هذا الكتلة على سكريبت لتشغيله بعد تدوير ملف السجل. في هذه الحالة، نقوم بإعادة تحميل تطبيق المثال الخاص بنا. قد يكون هذا ضروريًا في بعض الأحيان لجعل تطبيقك ينتقل إلى ملف السجل الجديد الذي تم إنشاؤه حديثًا.
يرجى ملاحظة أنpostrotate
يعمل قبل ضغط السجلات. قد يستغرق الضغط وقتًا طويلاً، ويجب على برنامجك التبديل إلى ملف السجل الجديد فورًا. بالنسبة للمهام التي تحتاج إلى تشغيلها بعد ضغط السجلات، استخدم كتلةlastaction
بدلاً من ذلك.
لحفظ والخروج من nano
، اضغط Ctrl+X
، ثم عندما يُطلب منك، اضغط Y
ثم Enter
. يمكنك اختبار ملف التكوين عن طريق عملية تشغيل جافة:
هذا الأمر يستدعي logrotate
، ويشير إلى ملف التكوين القياسي، ويقوم بتشغيل وضع التصحيح.
سيتم طباعة المعلومات حول ملفات السجل التي يتعامل معها Logrotate وما كان سيفعله بها. إذا بدت كلها على ما يرام، فأنت منتهٍ. سيقوم العمل القياسي لـ Logrotate بالتشغيل مرة واحدة في اليوم وسيتضمن تكوينك الجديد.
بعد ذلك، سنحاول إعداد لا يستخدم تكوين أوبونتو الافتراضي على الإطلاق.
الخطوة 4 — إنشاء تكوين مستقل لـ Logrotate
في هذا المثال، لدينا تطبيق يعمل بصفتنا مستخدمًا باسم sammy
، يولِّد سجلات تُخزَّن في /home/sammy/logs/
. نريد تدوير هذه السجلات كل ساعة، لذا نحتاج إلى إعداد هذا خارج هيكل /etc/logrotate.d
الذي توفره أوبونتو.
أولاً، سنقوم بإنشاء ملف تكوين في دليل منزلنا. افتحه في محرر نصوص:
ثم الصق التكوين التالي:
/home/sammy/logs/*.log {
hourly
missingok
rotate 24
compress
create
}
احفظ وأغلق الملف. لقد تعاملنا مع جميع هذه الخيارات في الخطوات السابقة، ولكن دعنا نلخص: سيقوم هذا التكوين بتدوير الملفات ساعياً، مضغوطاً ومحتفظاً بأربعة وعشرين سجلًا قديمًا وإنشاء ملف سجل جديد لاستبدال الملف الذي تم تدويره.
ستحتاج إلى تخصيص التكوين ليتناسب مع تطبيقك، ولكن هذا بداية جيدة.
للاختبار ما إذا كانت التكوين تعمل، دعنا ننشئ ملف تسجيل. أولاً cd
إلى دليل المستخدم الخاص بك باستخدام الأمر cd ~
. ثم قم بإنشاء دليل لسجلات باستخدام الأمر mkdir
. وأخيرًا، أنشئ ملفًا فارغًا في دليل logs
باستخدام الأمر touch
. قم بتشغيل الأوامر التالية لإكمال هذه الخطوات:
الآن بعد أن لدينا ملف تسجيل فارغ في المكان الصحيح، دعنا نقوم بتشغيل الأمر logrotate
.
نظرًا لأن السجلات تمتلكها sammy
لا نحتاج إلى استخدام sudo
. ومع ذلك، نحتاج لتحديد ملف الحالة. يقوم هذا الملف بتسجيل ما وجده logrotate
وأي إجراءات اتخذها في المرة السابقة التي تم فيها تشغيله، بحيث يعرف ما يجب فعله في المرة القادمة التي يتم فيها تشغيله. يتم التعامل مع تتبع الحالة لنا عند استخدام تكوين /etc/logrotate.conf
الافتراضي. يتم تخزين ملف الحالة في /var/lib/logrotate/status
. نظرًا لأننا لا نستخدم التكوين الافتراضي، سنحتاج إلى تكوين موقع ملف الحالة يدويًا.
سنطلب من Logrotate وضع ملف الحالة مباشرة في دليل المستخدم الخاص بنا في هذا المثال. يمكن أن يكون في أي مكان يمكن الوصول إليه ومناسب. قم بتشغيل الأمر التالي لاستخدام /home/sammy/logrotate.conf
الذي قمت بإنشائه وتسجيل الحالة التي يواجهها logrotate:
logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose
Outputreading config file /home/sammy/logrotate.conf
Handling 1 logs
rotating pattern: /home/sammy/logs/*.log hourly (24 rotations)
empty log files are rotated, old logs are removed
considering log /home/sammy/logs/access.log
log does not need rotating
تعتبر علامة --verbose
ستطبع معلومات مفصلة حول ما يقوم به Logrotate. في هذه الحالة، لم يتم تدوير أي شيء. هذه هي المرة الأولى التي يواجه فيها Logrotate هذا الملف السجل وهو عمره صفر ساعة، لذلك لا يجب تدويره.
إذا قمنا بفحص ملف الحالة باستخدام أداة cat
، سنلاحظ أن Logrotate سجل بعض المعلومات حول العملية:
Outputlogrotate state -- version 2
"/home/sammy/logs/access.log" 2022-07-2-19:0:0
سجل Logrotate السجلات التي رأتها ومتى آخر مرة قامت فيها بالنظر فيها للتدوير. إذا قمنا بتشغيل نفس الأمر بعد ساعة واحدة، سيتم تدوير السجل كما هو متوقع.
إذا كنت ترغب في إجبار Logrotate على تدوير ملف السجل عندما لا يكون من المفترض أن تقوم بذلك، استخدم علامة --force
:
هذا مفيد عند اختبار postrotate
وسكربتات أخرى.
وأخيرًا، نحتاج إلى إعداد وظيفة cron لتشغيل Logrotate كل ساعة. افتح crontab الخاص بمستخدمك:
سيتم فتح ملف نصي. إذا كانت هذه أول مرة تستخدم فيها cron، قد يُطلب منك اختيار محرر نصي افتراضي. إذا لم تكن لديك تفضيل، فإننا نوصي باستخدام nano
للمستخدمين الجدد. قد تكون هناك بعض التعليقات بالفعل في الملف تشرح بناء جملة cron. قم بتحريك المؤشر لأسفل إلى سطر فارغ جديد في نهاية الملف وأضف ما يلي:
crontab14 * * * * /usr/sbin/logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state
هذه المهمة ستعمل في الدقيقة 14 من كل ساعة، كل يوم. تقوم بتشغيل نفس الأمر تقريبًا الذي قمنا بتشغيله مسبقًا، على الرغم من أننا قمنا بتوسيع logrotate
إلى مساره الكامل /usr/sbin/logrotate
لنكون في الجانب الآمن. من الجيد أن تستخدم المسارات الكاملة عند كتابة وظائف cron. لمعرفة المزيد عن cron، يمكنك مراجعة دليلنا الآخر التعليمات.
قم بحفظ الملف والخروج. سيقوم هذا بتثبيت crontab وستعمل مهمتنا وفقًا للجدول الزمني المحدد.
إذا عدنا إلى دليل السجل الخاص بنا في حوالي ساعة، يجب أن نجد ملف السجل المدوّر والمضغوط access.log.1.gz
(أو .2.gz
إذا قمت بتشغيل Logrotate بعلم --force
).
الاستنتاج
في هذا البرنامج التعليمي، قمنا بالتحقق من إصدار Logrotate الخاص بنا، واستكشفنا تكوين Ubuntu الافتراضي لـ Logrotate، وأنشأنا نوعين مختلفين من التكوينات المخصصة. لمعرفة المزيد حول سطر الأوامر وخيارات التكوين المتاحة لـ Logrotate، يمكنك قراءة صفحتها الدليلية عن طريق تشغيل man logrotate
في الطرفية الخاصة بك أو عن طريق زيارة الوثائق على الإنترنت.