انتقل إلى المحتوى الرئيسي

الفصل 11.2 - إدارة السجلات

أهداف التعلم​

في نهاية هذا الفصل، ستكون قادرًا على:

  • فهم نظام سجلات لينكس
  • استخدام journalctl (systemd)
  • تحليل /var/log
  • تكوين logrotate
  • البحث في السجلات
  • مركزية السجلات

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

journalctl (systemd)​

السجلات النظامية الحديثة:

# جميع السجلات
sudo journalctl

# السجلات الحديثة
sudo journalctl -n 50

# المتابعة في الوقت الحقيقي
sudo journalctl -f

# حسب الوحدة (الخدمة)
sudo journalctl -u sshd
sudo journalctl -u apache2

# حسب الأولوية
sudo journalctl -p err
sudo journalctl -p warning

# حسب التاريخ
sudo journalctl --since "2024-01-01"
sudo journalctl --since "1 hour ago"
sudo journalctl --since yesterday

# حسب المستخدم
sudo journalctl _UID=1000

/var/log​

السجلات التقليدية:

# سجلات النظام
/var/log/syslog # Ubuntu/Debian
/var/log/messages # Red Hat/CentOS

# التحقق
/var/log/auth.log # Ubuntu/Debian
/var/log/secure # Red Hat/CentOS

# التطبيقات
/var/log/apache2/ # Apache
/var/log/nginx/ # Nginx
/var/log/mysql/ # MySQL

# Cron
/var/log/cron # Red Hat/CentOS
# Ubuntu: في syslog

تحليل السجلات​

البحث الأساسي​

# Grep بسيط
grep "ERROR" /var/log/syslog

# تجاهل الحالة
grep -i "error" /var/log/syslog

# السياق
grep -C 5 "ERROR" /var/log/syslog # 5 أسطر قبل/بعد

# ملفات متعددة
grep "ERROR" /var/log/*.log

# بشكل متكرر
grep -r "ERROR" /var/log/

أدوات متقدمة​

# عد التكرارات
grep -c "ERROR" /var/log/syslog

# أسطر فريدة
grep "ERROR" /var/log/syslog | sort -u

# إحصائيات
grep "ERROR" /var/log/syslog | awk '{print $1}' | sort | uniq -c

# آخر الأخطاء
grep "ERROR" /var/log/syslog | tail -20

journalctl البحث​

# البحث النصي
sudo journalctl -g "ERROR"

# حسب الباينري
sudo journalctl /usr/bin/sshd

# الجمع
sudo journalctl -u sshd -p err --since "1 hour ago"

تدوير السجلات​

logrotate​

التكوين التلقائي:

# التكوين
/etc/logrotate.conf
/etc/logrotate.d/

# اختبار التكوين
sudo logrotate -d /etc/logrotate.conf

# فرض التدوير
sudo logrotate -f /etc/logrotate.conf

مثال على التكوين​

# /etc/logrotate.d/mon-app
/var/log/mon-app/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload mon-app > /dev/null 2>&1 || true
endscript
}

الخيارات:

  • daily/weekly/monthly: التكرار
  • rotate N: الاحتفاظ بـ N تدويرات
  • compress: ضغط السجلات القديمة
  • missingok: عدم وجود خطأ إذا كان الملف مفقودًا
  • notifempty: عدم التدوير إذا كان فارغًا
  • create: إنشاء ملف جديد مع الأذونات

سجلات Cron​

عرض سجلات Cron​

# Ubuntu/Debian (في syslog)
sudo grep CRON /var/log/syslog

# Red Hat/CentOS
sudo tail -f /var/log/cron

# journalctl
sudo journalctl -u cron
sudo journalctl _COMM=cron

سجلات المهام​

# إذا كان هناك توجيه في crontab
# 0 2 * * * /script.sh > /var/log/script.log 2>&1

# عرض السجلات
tail -f /var/log/script.log

# البحث عن الأخطاء
grep -i error /var/log/script.log

مراقبة Cron​

#!/bin/bash
# التحقق من تنفيذ cron

# التحقق من آخر تنفيذ
LAST_RUN=$(grep "script.sh" /var/log/syslog | tail -1 | awk '{print $1, $2, $3}')

if [ -z "$LAST_RUN" ]; then
echo "تنبيه: لم يتم تنفيذ سكربت cron أبدًا"
else
echo "آخر تنفيذ: $LAST_RUN"
fi

# التحقق من الأخطاء
ERRORS=$(grep "script.sh" /var/log/syslog | grep -i error | wc -l)
if [ "$ERRORS" -gt 0 ]; then
echo "تنبيه: تم اكتشاف $ERRORS أخطاء"
fi

مركزية السجلات​

rsyslog​

تكوين الخادم:

# /etc/rsyslog.conf
# تفعيل UDP/TCP
module(load="imudp")
input(type="imudp" port="514")

module(load="imtcp")
input(type="imtcp" port="514")

# التخزين حسب المضيف
$template RemoteHost,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteHost

تكوين العميل:

# /etc/rsyslog.conf
# الإرسال إلى الخادم
*.* @192.168.1.100:514

Logstash/Filebeat​

Stack ELK:

  • Elasticsearch: التخزين
  • Logstash: المعالجة
  • Kibana: التصور
  • Filebeat: الجمع

سكربتات مفيدة​

التحليل اليومي​

#!/bin/bash
# تحليل السجلات اليومي

DATE=$(date +%Y%m%d)
REPORT="/var/log/analysis-$DATE.txt"

{
echo "=== تحليل السجلات $(date) ==="
echo
echo "=== الأخطاء ==="
grep -i error /var/log/syslog | tail -20
echo
echo "=== التحذيرات ==="
grep -i warning /var/log/syslog | tail -20
echo
echo "=== محاولات فشل SSH ==="
grep "Failed password" /var/log/auth.log | wc -l
echo
echo "=== أعلى العمليات ==="
ps aux --sort=-%cpu | head -10
} > "$REPORT"

تنظيف السجلات​

#!/bin/bash
# تنظيف السجلات القديمة

# حذف السجلات > 30 يومًا
find /var/log -name "*.log" -mtime +30 -delete
find /var/log -name "*.gz" -mtime +90 -delete

# تنظيف journal systemd
sudo journalctl --vacuum-time=30d
sudo journalctl --vacuum-size=500M

ملخص​

في هذا الفصل، تعلمت:

journalctl: سجلات systemd، البحث، الفلاتر
/var/log: السجلات التقليدية، التطبيقات
البحث: grep، journalctl -g، الأدوات المتقدمة
logrotate: التدوير التلقائي، التكوين
سجلات Cron: مراقبة التنفيذ، اكتشاف الأخطاء
المركزية: rsyslog، ELK stack
الممارسة: التحليل، التنظيف، المراقبة


الخطوات التالية​

الفصل 11.3: مراقبة Crons والتنبيهات
الوحدة 12: الإدارة المتقدمة


تم إنشاء الفصل في: ديسمبر 2024