فصل هفتم — قسمت هفتاد و یکم 🐧
مدیریت لاگها در لینوکس
————————————
این قسمت خیلی مهمه، چون در لینوکس تقریباً هر اتفاق مهمی را میتوان از روی Logها بررسی کرد؛ از ورود کاربر گرفته تا Crash شدن سرویس، خطای SSH یا مشکل شبکه.
————————————
1️⃣ Process چیست؟
Process یا پردازش یعنی یک برنامهای که در حال اجراست.
مثلاً وقتی میزنی:
firefox
برنامه Firefox اجرا میشود و سیستم برای آن یک Process ایجاد میکند.
هر Process معمولاً یک PID دارد:
Firefox
↓
PID = 2451
برای دیدنش:
ps aux
یا:
top
—————————————
2️⃣ Daemon چیست؟
Daemon یک Process است که معمولاً در پسزمینه اجرا میشود و منتظر درخواست یا رویداد میماند.
مثلاً:
sshd
cron
systemd-journald
rsyslogd
مثال واقعی:
وقتی SSH Server اجراست:
sshd
↓
منتظر اتصال SSH
↓
کاربر وصل شد
↓
درخواست را پردازش میکند
پس:
معمولاً اسم بسیاری از Daemonها به d ختم میشود:
sshd
rsyslogd
systemd-journald
————————-
3️⃣ Log چیست و چرا مهم است؟
Log یعنی گزارش اتفاقاتی که در سیستم رخ دادهاند.
مثلاً:
18:30 → User ali وارد شد
18:31 → sshd اجرا شد
18:32 → Login ناموفق
18:35 → nginx Restart شد
18:40 → Disk error
مثال واقعی
فرض کن کاربر میگوید:
به جای حدس زدن:
journalctl -u sshd
را میزنی و Log را بررسی میکنی.
ممکن است مشخص شود:
Failed password
یا:
Connection refused
یا:
User not allowed
پس Log برای Troubleshooting، Security و Auditing بسیار مهم است.
————————————-
4️⃣ ساختار کلی Logging در Linux
در Linux دو سیستم مهم را زیاد میبینی:
Traditional Syslog
↓
rsyslog
systemd
↓
systemd-journald
↓
journalctl
یعنی ممکن است سیستم هم از:
rsyslog
استفاده کند و هم:
systemd-journald
—————————
5️⃣ Syslog چیست؟
Syslog یک استاندارد و معماری برای ارسال و مدیریت پیامهای Log است.
برنامهها میتوانند پیامهای خودشان را به Syslog بفرستند.
مثلاً:
sshd ─────┐
nginx ────┤
cron ─────┤──→ rsyslog ──→ /var/log/...
kernel ───┘
یکی از پیادهسازیهای معروف Syslog:
rsyslog
است.
فایل تنظیمات آن معمولاً:
/etc/rsyslog.conf
است.
——————————-
6️⃣ Facility چیست؟
Facility مشخص میکند Log مربوط به چه نوع بخشی از سیستم است.
چند نمونه:
auth
authpriv
cron
daemon
kern
mail
user
local0 ... local7
مثلاً:
auth
→ پیامهای مربوط به Authentication
kern
→ پیامهای Kernel
mail
→ پیامهای Mail
cron
→ پیامهای Cron
———————————
7️⃣ Severity چیست؟
Severity مشخص میکند شدت یا اهمیت یک Log چقدر است.
از کماهمیتتر به بحرانیتر:
debug
info
notice
warning
err
crit
alert
emerg
مثلاً:
info
→ اطلاعات عادی
warning
→ هشدار
err
→ خطا
crit
→ خطای بسیار مهم
emerg
→ وضعیت اضطراری
🧠 برای دفتر:
Facility → این Log مربوط به کدام بخش است؟
Severity → این Log چقدر جدی است؟
————————————
8️⃣ Log Rotation چیست؟
فرض کن یک سرور داری و:
/var/log/messages
هر روز هزاران Log تولید میکند.
اگر این فایل را کنترل نکنی، ممکن است:
100 MB
↓
1 GB
↓
10 GB
↓
Disk Full 💀
اینجاست که Log Rotation وارد میشود.
ابزار معروف:
logrotate
است.
کارش این است که Logهای قدیمی را:
messages
messages.1
messages.2
messages.3.gz
مدیریت کند و در صورت نیاز فشرده یا حذف کند.
———————————————
9️⃣ فایل logrotate.conf
فایل اصلی تنظیمات:
/etc/logrotate.conf
و تنظیمات برنامههای مختلف معمولاً در:
/etc/logrotate.d/
قرار دارند.
مثلاً:
ls /etc/logrotate.d/
——————————
🔟 systemd-journald چیست؟
در سیستمهای مبتنی بر systemd، سرویس:
systemd-journald
وظیفه جمعآوری و مدیریت Journalها را دارد.
یعنی:
Application
↓
systemd-journald
↓
Journal
↓
journalctl
———————
1️⃣1️⃣ فایل تنظیمات journald
فایل:
/etc/systemd/journald.conf
است.
——————————
1️⃣2️⃣ journalctl
مهمترین ابزار برای خواندن Journal:
journalctl
است.
اگر فقط بزنی:
journalctl
تعداد زیادی Log نمایش داده میشود.
———————————
1️⃣3️⃣ آخرین 50 Log
journalctl -n 50
یعنی:
————————
1️⃣4️⃣ دنبال کردن Log به صورت لحظهای
journalctl -f
-f یعنی Follow.
مثل:
tail -f
مثلاً:
journalctl -f
حالا در Terminal دیگری SSH Login کن.
Log همان لحظه نمایش داده میشود.
———————-
1️⃣5️⃣ Log مربوط به یک سرویس
مثلاً SSH:
journalctl -u sshd
یعنی:
در Ubuntu ممکن است نام سرویس:
journalctl -u ssh
باشد.
————————-
1️⃣6️⃣ Log مربوط به Boot فعلی
journalctl -b
یعنی:
خیلی کاربردی است وقتی سیستم Boot شده ولی مثلاً یک سرویس بالا نیامده.
———————————
1️⃣7️⃣ فقط Errorها
journalctl -p err
یعنی فقط پیامهایی با Priority برابر یا بالاتر از err را نشان بده.
برای محدوده:
journalctl -p crit..err
یعنی Logهای:
crit
alert
emerg
err
را نمایش بده.
———————-
1️⃣8️⃣ Log از یک زمان مشخص
از دیروز:
journalctl --since yesterday
از دو ساعت قبل:
journalctl --since "2 hours ago"
مثلاً:
journalctl --since "2026-08-26 15:00"
→ Logهای بعد از ساعت 15 را نشان میدهد.
———————-
1️⃣9️⃣ ترکیب چند Filter
اینجا قدرت journalctl را میبینی.
مثلاً:
journalctl -u sshd --since yesterday
یعنی:
یا:
journalctl -u sshd -p err
یعنی:
——————-
2️⃣0️⃣ تغییر Format خروجی
خروجی معمولی:
journalctl -o short
برای خروجی JSON:
journalctl -o json-pretty
JSON برای زمانی مفید است که بخواهی Log را با ابزارها و برنامهها پردازش کنی.
——————————————
2️⃣1️⃣ ابزار logger
با logger میتوانیم خودمان یک پیام به Syslog ارسال کنیم.
مثلاً:
logger "Hello from Alireza"
بعد میتوانی Log را پیدا کنی.
حتی Facility و Severity هم مشخص کنی:
logger -p user.info "Test message"
یعنی:
Facility → user
Severity → info
یک مثال امنیتی:
logger -p auth.warning "Suspicious login detected"
————————-
2️⃣2️⃣ systemd-cat
این ابزار خروجی یک برنامه را وارد Journal میکند.
مثلاً:
echo "Hello Journal" | systemd-cat
یا:
systemd-cat echo "Test message"
بعد:
journalctl
را بزن و پیام را پیدا کن.
حتی میتوانی Priority بدهی:
echo "Something went wrong" | systemd-cat -p err
——————-
2️⃣3️⃣ /var/log
یکی از مهمترین مسیرهای Log در Linux:
cd /var/log/
است.
برای دیدنش:
ls -lh /var/log/
ممکن است فایلهایی مثل این ببینی:
messages
secure
maillog
cron
boot.log
البته نام و محل Logها بسته به Distribution و تنظیمات سیستم متفاوت است.
————————
🧠 یک مثال واقعی خیلی مهم
فرض کن SSH کار نمیکند.
به جای اینکه کورکورانه تنظیمات را تغییر بدهی:
اول:
systemctl status sshd
بعد:
journalctl -u sshd -n 50
اگر فقط Error میخواهی:
journalctl -u sshd -p err
اگر مشکل بعد از Reboot ایجاد شده:
journalctl -b
این یعنی Log خواندن یکی از اصلیترین مهارتهای Linux Administrator است.
—————————
مدیریت لاگها در لینوکس
————————————
این قسمت خیلی مهمه، چون در لینوکس تقریباً هر اتفاق مهمی را میتوان از روی Logها بررسی کرد؛ از ورود کاربر گرفته تا Crash شدن سرویس، خطای SSH یا مشکل شبکه.
————————————
1️⃣ Process چیست؟
Process یا پردازش یعنی یک برنامهای که در حال اجراست.
مثلاً وقتی میزنی:
firefox
برنامه Firefox اجرا میشود و سیستم برای آن یک Process ایجاد میکند.
هر Process معمولاً یک PID دارد:
Firefox
↓
PID = 2451
برای دیدنش:
ps aux
یا:
top
—————————————
2️⃣ Daemon چیست؟
Daemon یک Process است که معمولاً در پسزمینه اجرا میشود و منتظر درخواست یا رویداد میماند.
مثلاً:
sshd
cron
systemd-journald
rsyslogd
مثال واقعی:
وقتی SSH Server اجراست:
sshd
↓
منتظر اتصال SSH
↓
کاربر وصل شد
↓
درخواست را پردازش میکند
پس:
Daemon = برنامهای که معمولاً در پسزمینه اجرا میشود و یک سرویس را ارائه میدهد.
معمولاً اسم بسیاری از Daemonها به d ختم میشود:
sshd
rsyslogd
systemd-journald
————————-
3️⃣ Log چیست و چرا مهم است؟
Log یعنی گزارش اتفاقاتی که در سیستم رخ دادهاند.
مثلاً:
18:30 → User ali وارد شد
18:31 → sshd اجرا شد
18:32 → Login ناموفق
18:35 → nginx Restart شد
18:40 → Disk error
مثال واقعی
فرض کن کاربر میگوید:
«من رمز SSH را درست میزنم ولی وارد نمیشوم.»
به جای حدس زدن:
journalctl -u sshd
را میزنی و Log را بررسی میکنی.
ممکن است مشخص شود:
Failed password
یا:
Connection refused
یا:
User not allowed
پس Log برای Troubleshooting، Security و Auditing بسیار مهم است.
————————————-
4️⃣ ساختار کلی Logging در Linux
در Linux دو سیستم مهم را زیاد میبینی:
Traditional Syslog
↓
rsyslog
systemd
↓
systemd-journald
↓
journalctl
یعنی ممکن است سیستم هم از:
rsyslog
استفاده کند و هم:
systemd-journald
—————————
5️⃣ Syslog چیست؟
Syslog یک استاندارد و معماری برای ارسال و مدیریت پیامهای Log است.
برنامهها میتوانند پیامهای خودشان را به Syslog بفرستند.
مثلاً:
sshd ─────┐
nginx ────┤
cron ─────┤──→ rsyslog ──→ /var/log/...
kernel ───┘
یکی از پیادهسازیهای معروف Syslog:
rsyslog
است.
فایل تنظیمات آن معمولاً:
/etc/rsyslog.conf
است.
——————————-
6️⃣ Facility چیست؟
Facility مشخص میکند Log مربوط به چه نوع بخشی از سیستم است.
چند نمونه:
auth
authpriv
cron
daemon
kern
user
local0 ... local7
مثلاً:
auth
→ پیامهای مربوط به Authentication
kern
→ پیامهای Kernel
→ پیامهای Mail
cron
→ پیامهای Cron
———————————
7️⃣ Severity چیست؟
Severity مشخص میکند شدت یا اهمیت یک Log چقدر است.
از کماهمیتتر به بحرانیتر:
debug
info
notice
warning
err
crit
alert
emerg
مثلاً:
info
→ اطلاعات عادی
warning
→ هشدار
err
→ خطا
crit
→ خطای بسیار مهم
emerg
→ وضعیت اضطراری
🧠 برای دفتر:
Facility → این Log مربوط به کدام بخش است؟
Severity → این Log چقدر جدی است؟
————————————
8️⃣ Log Rotation چیست؟
فرض کن یک سرور داری و:
/var/log/messages
هر روز هزاران Log تولید میکند.
اگر این فایل را کنترل نکنی، ممکن است:
100 MB
↓
1 GB
↓
10 GB
↓
Disk Full 💀
اینجاست که Log Rotation وارد میشود.
ابزار معروف:
logrotate
است.
کارش این است که Logهای قدیمی را:
messages
messages.1
messages.2
messages.3.gz
مدیریت کند و در صورت نیاز فشرده یا حذف کند.
———————————————
9️⃣ فایل logrotate.conf
فایل اصلی تنظیمات:
/etc/logrotate.conf
و تنظیمات برنامههای مختلف معمولاً در:
/etc/logrotate.d/
قرار دارند.
مثلاً:
ls /etc/logrotate.d/
——————————
🔟 systemd-journald چیست؟
در سیستمهای مبتنی بر systemd، سرویس:
systemd-journald
وظیفه جمعآوری و مدیریت Journalها را دارد.
یعنی:
Application
↓
systemd-journald
↓
Journal
↓
journalctl
———————
1️⃣1️⃣ فایل تنظیمات journald
فایل:
/etc/systemd/journald.conf
است.
——————————
1️⃣2️⃣ journalctl
مهمترین ابزار برای خواندن Journal:
journalctl
است.
اگر فقط بزنی:
journalctl
تعداد زیادی Log نمایش داده میشود.
———————————
1️⃣3️⃣ آخرین 50 Log
journalctl -n 50
یعنی:
50 خط آخر Journal را نمایش بده.
————————
1️⃣4️⃣ دنبال کردن Log به صورت لحظهای
journalctl -f
-f یعنی Follow.
مثل:
tail -f
مثلاً:
journalctl -f
حالا در Terminal دیگری SSH Login کن.
Log همان لحظه نمایش داده میشود.
———————-
1️⃣5️⃣ Log مربوط به یک سرویس
مثلاً SSH:
journalctl -u sshd
یعنی:
فقط Logهای Unit مربوط به sshd را نشان بده.
در Ubuntu ممکن است نام سرویس:
journalctl -u ssh
باشد.
————————-
1️⃣6️⃣ Log مربوط به Boot فعلی
journalctl -b
یعنی:
Logهای Boot فعلی سیستم را نمایش بده.
خیلی کاربردی است وقتی سیستم Boot شده ولی مثلاً یک سرویس بالا نیامده.
———————————
1️⃣7️⃣ فقط Errorها
journalctl -p err
یعنی فقط پیامهایی با Priority برابر یا بالاتر از err را نشان بده.
برای محدوده:
journalctl -p crit..err
یعنی Logهای:
crit
alert
emerg
err
را نمایش بده.
———————-
1️⃣8️⃣ Log از یک زمان مشخص
از دیروز:
journalctl --since yesterday
از دو ساعت قبل:
journalctl --since "2 hours ago"
مثلاً:
journalctl --since "2026-08-26 15:00"
→ Logهای بعد از ساعت 15 را نشان میدهد.
———————-
1️⃣9️⃣ ترکیب چند Filter
اینجا قدرت journalctl را میبینی.
مثلاً:
journalctl -u sshd --since yesterday
یعنی:
Logهای SSH از دیروز تا الان.
یا:
journalctl -u sshd -p err
یعنی:
خطاهای مهم سرویس SSH.
——————-
2️⃣0️⃣ تغییر Format خروجی
خروجی معمولی:
journalctl -o short
برای خروجی JSON:
journalctl -o json-pretty
JSON برای زمانی مفید است که بخواهی Log را با ابزارها و برنامهها پردازش کنی.
——————————————
2️⃣1️⃣ ابزار logger
با logger میتوانیم خودمان یک پیام به Syslog ارسال کنیم.
مثلاً:
logger "Hello from Alireza"
بعد میتوانی Log را پیدا کنی.
حتی Facility و Severity هم مشخص کنی:
logger -p user.info "Test message"
یعنی:
Facility → user
Severity → info
یک مثال امنیتی:
logger -p auth.warning "Suspicious login detected"
————————-
2️⃣2️⃣ systemd-cat
این ابزار خروجی یک برنامه را وارد Journal میکند.
مثلاً:
echo "Hello Journal" | systemd-cat
یا:
systemd-cat echo "Test message"
بعد:
journalctl
را بزن و پیام را پیدا کن.
حتی میتوانی Priority بدهی:
echo "Something went wrong" | systemd-cat -p err
——————-
2️⃣3️⃣ /var/log
یکی از مهمترین مسیرهای Log در Linux:
cd /var/log/
است.
برای دیدنش:
ls -lh /var/log/
ممکن است فایلهایی مثل این ببینی:
messages
secure
maillog
cron
boot.log
البته نام و محل Logها بسته به Distribution و تنظیمات سیستم متفاوت است.
————————
🧠 یک مثال واقعی خیلی مهم
فرض کن SSH کار نمیکند.
به جای اینکه کورکورانه تنظیمات را تغییر بدهی:
اول:
systemctl status sshd
بعد:
journalctl -u sshd -n 50
اگر فقط Error میخواهی:
journalctl -u sshd -p err
اگر مشکل بعد از Reboot ایجاد شده:
journalctl -b
این یعنی Log خواندن یکی از اصلیترین مهارتهای Linux Administrator است.
—————————