انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

إدارة السجلات: منع امتلاء القرص بـ logrotate

مواقع السجلات المهمة وتهيئة logrotate وحدود حجم journald وإيجاد ملفات السجلات الكبيرة وأساسيات تحليل السجلات. دليل منع امتلاء القرص على خوادم Linux.

وقت القراءة: 11 دقيقة إدارة الخادم
logrotateإدارة السجلاتjournaldمساحة القرصsysloglinuxتحليل السجلات

جدول المحتويات

إدارة السجلات: منع امتلاء القرص بـ logrotate

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

مواقع السجلات المهمة

ملفات سجلات النظام

hljs bash
# مجلد سجلات النظام الرئيسي
ls -lh /var/log/

# ملفات السجلات المهمة:
# /var/log/syslog          — رسائل النظام العامة (Debian/Ubuntu)
# /var/log/messages        — رسائل النظام العامة (RHEL/CentOS)
# /var/log/auth.log        — سجلات المصادقة (Debian/Ubuntu)
# /var/log/secure          — سجلات المصادقة (RHEL/CentOS)
# /var/log/kern.log        — رسائل النواة
# /var/log/cron            — سجلات مهام cron
# /var/log/mail.log        — سجلات خادم البريد

ملفات سجلات التطبيقات

hljs bash
# سجلات خادم الويب
/var/log/nginx/access.log
/var/log/nginx/error.log
/var/log/apache2/access.log
/var/log/apache2/error.log

# سجلات قواعد البيانات
/var/log/mysql/error.log
/var/log/postgresql/

مراقبة ملفات السجلات

hljs bash
# مراقبة السجلات في الوقت الفعلي
tail -f /var/log/syslog
tail -f /var/log/nginx/access.log

# آخر 100 سطر
tail -n 100 /var/log/auth.log

# البحث عن كلمة مفتاحية
grep "ERROR" /var/log/nginx/error.log
grep "Failed password" /var/log/auth.log

# البحث في ملفات متعددة
grep -r "error" /var/log/nginx/

تحليل مساحة القرص

إيجاد ملفات السجلات الكبيرة

hljs bash
# إيجاد أكبر الملفات في /var/log
du -sh /var/log/* | sort -rh | head -20

# إيجاد الملفات الكبيرة في النظام (100 ميجابايت+)
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null

# الملفات أكبر من 50 ميجابايت في /var/log
find /var/log -type f -size +50M -exec ls -lh {} \;

# التحقق من استخدام القرص
df -h

# عرض أحجام المجلدات
du -sh /var/log/
du -sh /var/log/* | sort -rh

تهيئة logrotate

logrotate أداة تقوم تلقائياً بتدوير ملفات السجلات وضغطها وحذفها.

كيف يعمل logrotate

hljs bash
# يعمل logrotate يومياً عادةً عبر cron
cat /etc/cron.daily/logrotate

# التشغيل اليدوي
sudo logrotate /etc/logrotate.conf

# وضع المحاكاة (بدون عمليات فعلية)
sudo logrotate --debug /etc/logrotate.conf

# إجبار التدوير
sudo logrotate --force /etc/logrotate.d/nginx

تهيئة logrotate الرئيسية

hljs bash
# ملف التهيئة الرئيسي
sudo nano /etc/logrotate.conf
hljs bash
# الإعدادات الافتراضية
weekly          # التدوير أسبوعياً
rotate 4        # الاحتفاظ بـ 4 إصدارات قديمة
create          # إنشاء ملف جديد بعد التدوير
compress        # ضغط السجلات القديمة
delaycompress   # عدم ضغط آخر سجل مُدار
include /etc/logrotate.d  # تضمين إعدادات التطبيقات

تهيئة logrotate خاصة بالتطبيق

hljs bash
# تهيئة logrotate لـ Nginx
sudo nano /etc/logrotate.d/nginx
hljs bash
/var/log/nginx/*.log {
    daily           # التدوير يومياً
    missingok       # لا خطأ إذا كان الملف مفقوداً
    rotate 14       # الاحتفاظ بسجلات 14 يوماً
    compress        # ضغط
    delaycompress   # عدم ضغط الأحدث
    notifempty      # عدم تدوير الملفات الفارغة
    create 0640 www-data adm
    sharedscripts
    postrotate
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 `cat /var/run/nginx.pid`
        fi
    endscript
}

logrotate لتطبيق مخصص

hljs bash
sudo nano /etc/logrotate.d/myapp
hljs bash
/var/log/myapp/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 0644 www-data www-data
    dateext
    dateformat -%Y%m%d
    postrotate
        systemctl reload myapp 2>/dev/null || true
    endscript
}

إدارة حجم journald

hljs bash
# التحقق من حجم السجل الحالي
journalctl --disk-usage

# تنظيف السجلات القديمة (أقدم من أسبوعين)
sudo journalctl --vacuum-time=2weeks

# التنظيف بحد الحجم
sudo journalctl --vacuum-size=500M

# الاحتفاظ بعدد محدد من الملفات
sudo journalctl --vacuum-files=5

تهيئة journald الدائمة

hljs bash
# تعديل ملف تهيئة journald
sudo nano /etc/systemd/journald.conf
hljs ini
[Journal]
# الحد الأقصى لاستخدام القرص
SystemMaxUse=500M

# الحد الأدنى للمساحة الحرة
SystemKeepFree=1G

# الحد الأقصى لحجم الملف
SystemMaxFileSize=50M

# فترة الاحتفاظ بالسجلات
MaxRetentionSec=2weeks

# الضغط
Compress=yes

# التخزين الدائم
Storage=persistent
hljs bash
# تطبيق التهيئة
sudo systemctl restart systemd-journald

أساسيات تحليل السجلات

hljs bash
# تحليل سجلات أخطاء Nginx
grep -c "error" /var/log/nginx/error.log
grep "error" /var/log/nginx/error.log | tail -20

# اكتشاف محاولات القوة الغاشمة على SSH
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn | head -10

# إيجاد أكثر عناوين IP طلباً
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10

# عدّ رموز حالة HTTP
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn

# تصفية الأخطاء من journald
journalctl -p err --since "1 hour ago"

حالة طارئة: القرص ممتلئ

hljs bash
# الاستجابة السريعة عند امتلاء القرص

# 1. التحقق من حالة القرص
df -h

# 2. إيجاد أكبر الملفات
du -sh /var/log/* | sort -rh | head -10

# 3. تنظيف سجلات journal القديمة
sudo journalctl --vacuum-time=3days

# 4. ضغط السجلات القديمة غير المضغوطة
find /var/log -name "*.log.*" ! -name "*.gz" -exec gzip {} \;

# 5. إجبار logrotate
sudo logrotate --force /etc/logrotate.conf

# 6. تنظيف ذاكرة التخزين المؤقت للحزم
sudo apt clean  # Ubuntu/Debian
sudo dnf clean all  # RHEL/CentOS

أتمتة إدارة السجلات: راجع تهيئة logrotate بانتظام وحدد حدود حجم journald وأنشئ تنبيهات لمراقبة استخدام القرص.

الخلاصة

إدارة السجلات الفعّالة تمنع مشكلات امتلاء القرص وتحسن موثوقية النظام. مع التدوير التلقائي بـ logrotate وحدود حجم journald وتحليل السجلات المنتظم، يمكنك الحفاظ على خوادم REXE في حالة جيدة.