بررسی و پیکربندی لاگ در لینوکس با استفاده از rsyslog
بررسی و پیکربندی لاگ در لینوکس با استفاده از rsyslog
یکی از قابلیتهای سیستمعامل ثبت رخدادها و اتفاقات جاری سیستم است. این قابلیت کمک زیادی به بررسی وضعیت سیستم، عیب یابی و مدیریت سیستم میکند.
در لینوکس از ابزارها و روشهای مختلفی برای ثبت و مدیریت لاگ مانند syslogd و syslogd-ng استفاده میشده است. در حال حاضر متداولترین روشها برای انجام این کار rsyslog و systemd-journal است.
در این مستند در مورد نصب و پیکربندی rsyslog و همچنین مفاهیم مهم در بحث لاگ صحبت خواهیم کرد.
نصب و چک کردن سرویس rsyslog
برای نصب rsyslog از dnf به شکل زیر استفاده میکنیم (البته به صورت معمول و پیش فرض این بسته نرمافزاری در تمامی لینوکسها نصب میباشد).
در ادامه با استفاده از systemctl از وضعیت آن آگاه میشویم.
[root@AvidLearn ~]# dnf -y install rsyslog
[root@AvidLearn ~]# systemctl start rsyslog
[root@AvidLearn ~]# systemctl status rsyslog
● rsyslog.service - System Logging Service
Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2022-03-07 07:46:55 +0330; 14s ago
دسته بندی لاگها (Facility و Severity)
قبل از این که در مورد پیکربندی rsyslog صحبت کنیم باید دو مفهوم مهم Facility و Severity را بشناسیم.
Facility نوع یا طبقه بندی لاگها را مشخص میکند که لاگ توسط چه سرویس یا نرم افزاری تولید شده است. با توجه به استاندارد، Facility یکی از موارد جدول زیر میتواند باشد (RFC 3164).
پیکربندی rsyslog
تنظیمات مربوط به rsyslog در فایل /etc/rsyslog.conf قرار دارد.
xxxxxxxxxx
[root@AvidLearn ~]# cat /etc/rsyslog.conf | grep -v "#" | grep -v ^$
global(workDirectory="/var/lib/rsyslog")
module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat")
include(file="/etc/rsyslog.d/*.conf" mode="optional")
*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
mail.* -/var/log/maillog
cron.* /var/log/cron
*.emerg :omusrmsg:*
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
[root@AvidLearn ~]#
در این فایل در سمت چپ نوع لاگ با استفاده از Facility و Severity (با ساختار Facility.Severity) و در سمت راست فایل یا مکانی که لاگ ذخیره، ارسال یا نشان داده میشود، مشخص شده است.
به عنوان مثال در خط زیر *.info به معنای همهی انوع لاگ با سطح info و قبل از آن (سطح ۰ الی ۶) است، در ادامهی این خط mail.none;authpriv.none;cron.none به این معنا است که هیچ لاگی از نوع mail، authpriv یا cron را شامل نشود. در سمت راست نیز مکان ذخیره لاگ مشخص شده است.
xxxxxxxxxx
*.info;mail.none;authpriv.none;cron.none /var/log/messages
در ادامهی تنظیمات این فایل، لاگهای authpriv، mail و cron در فایلهای مجزایی ذخیره میشوند.
xxxxxxxxxx
authpriv.* /var/log/secure
mail.* -/var/log/maillog
cron.* /var/log/cron
تنظیمات خط زیر به معنای این است که همهی لاگها با سطح emerg یا panic (که در فایل /var/log/messages نیز ذخیره میشوند) در کنسول نیز نشان داده شوند.
xxxxxxxxxx
*.emerg :omusrmsg:*
فایل messages
با توجه به تنظیمات پیشفرض لاگ که توضیحات آن ارائه شد فایلی که بیشتر از همه برای بررسی لاگها با آن سر و کار داریم /var/log/messages است.
اگر نگاهی به این مسیر بیندازیم میبینیم که علاوه بر این فایل چند فایل دیگر نیز با نامهای شبیه آن به صورت زیر داریم. فایلهای دیگر در واقع همین فایل در بازههای زمانی هفتههای گذشته هستند که به دلیل تنظیمات پیش فرض rotation لاگها به این صورت ذخیره میشوند (لاگ هفتهی جاری + لاگ ۴ هفته گذشته).
xxxxxxxxxx
[root@AvidLearn ~]# ls /var/log/messages
messages messages-20220213 messages-20220220 messages-20220227 messages-20220306
[root@AvidLearn ~]# ll /var/log/messages*
-rw------- 1 root root 52029371 Mar 7 09:15 /var/log/messages
-rw------- 1 root root 211716719 Feb 13 03:47 /var/log/messages-20220213
-rw------- 1 root root 246900485 Feb 20 03:24 /var/log/messages-20220220
-rw------- 1 root root 218076815 Feb 27 03:09 /var/log/messages-20220227
-rw------- 1 root root 208170393 Mar 6 03:22 /var/log/messages-20220306
[root@AvidLearn ~]#
تنظیمات مربوط به rotate در فایل /etc/logrotate.conf انجام میشود.
[root@AvidLearn ~]# cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# system-specific logs may be also be configured here.
[root@AvidLearn ~]#
بررسی لاگها در messages
برای بررسی لاگها به صورت زنده از tailf یا tail -f به صورت زیر استفاده میکنیم.
xxxxxxxxxx
[root@AvidLearn ~]# tail -f /var/log/messages
Mar 7 13:10:37 AvidLearn systemd[26625]: Reached target Timers.
Mar 7 13:10:37 AvidLearn systemd[26625]: Reached target Paths.
Mar 7 13:10:37 AvidLearn systemd[26625]: Listening on D-Bus User Message Bus Socket.
Mar 7 13:10:37 AvidLearn systemd[26625]: Reached target Sockets.
Mar 7 13:10:37 AvidLearn systemd[26625]: Reached target Basic System.
Mar 7 13:10:37 AvidLearn systemd[26625]: Reached target Default.
Mar 7 13:10:37 AvidLearn systemd[26625]: Startup finished in 58ms.
Mar 7 13:10:37 AvidLearn systemd[1]: Started User Manager for UID 0.
Mar 7 13:10:38 AvidLearn systemd[1]: Started Session 9 of user root.
Mar 7 13:10:38 AvidLearn systemd-logind[720]: New session 9 of user root.
[root@AvidLearn ~]# tail -f /var/log/secure
Mar 7 07:38:48 AvidLearn sshd[2278]: pam_unix(sshd:session): session opened for user root by (uid=0)
Mar 7 07:38:48 AvidLearn sshd[2282]: Accepted password for root from --.--.--.-- port 32874 ssh2
Mar 7 07:38:48 AvidLearn sshd[2282]: pam_unix(sshd:session): session opened for user root by (uid=0)
Mar 7 11:57:54 AvidLearn sshd[2278]: pam_unix(sshd:session): session closed for user root
Mar 7 11:57:54 AvidLearn sshd[2282]: pam_unix(sshd:session): session closed for user root
Mar 7 13:10:37 AvidLearn sshd[26620]: Accepted password for root from --.--.--.-- port 1039 ssh2
Mar 7 13:10:37 AvidLearn systemd[26625]: pam_unix(systemd-user:session): session opened for user root by (uid=0)
Mar 7 13:10:37 AvidLearn sshd[26620]: pam_unix(sshd:session): session opened for user root by (uid=0)
Mar 7 13:10:38 AvidLearn sshd[26638]: Accepted password for root from --.--.--.-- port 1041 ssh2
Mar 7 13:10:38 AvidLearn sshd[26638]: pam_unix(sshd:session): session opened for user root by (uid=0)
برای بررسی و جستجو در لاگها از ابزارهایی مانند vi یا vim نیز استفاده میشود. به علاوه در صورتی که در لاگها خواسته باشیم کلمه کلیدی خاصی را جستجو کنیم از cat و grep نیز میتوانیم استفاده کنیم.
همانطور که در لاگهای ارائه شده مشخص است، لاگهای ایجاد شده در قالب پیامهایی (Messages) ذخیره میشوند که در ابتدای این پیام یک برچسب زمانی یا Timestamp وجود دارد که زمان رخداد لاگ را مشخص میکند و در ادامه توضیحات مربوط به لاگ ارائه میشود.
با توجه به اهمیت زمان لاگ، همگام بودن زمان و تاریخ سیستم از اهمیت بالایی برخوردار است و پیشنهاد میشود برای انجام این کار از سرویس NTP استفاده شود.