الفصل 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