وقتی با هرگونه مشکلی در عملکرد سرور خود مواجه میشوید، اولین کاری که باید انجام دهید بررسی لاگهای لینوکس خود است . در لاگ سیستم، میتوانید پیامهای تشخیصی مفیدی از اجزای مختلف سیستم عامل مانند هسته یا سرویسهای مختلف پیدا کنید، بنابراین به احتمال زیاد علت خرابی را در آنجا خواهید یافت.
هر پیامی در گزارش در نتیجه رویدادهای خاصی در سیستم عامل ایجاد می شود: از کاربر، مجوز تا خاموش شدن سرویس یا خرابی برنامه. این رویدادها بسته به اینکه چقدر بحرانی هستند اولویت های متفاوتی دارند. انواع رویدادهای زیر در لینوکس وجود دارد:
emerg- شکست، بالاترین اولویت؛alert- هشدار فوری؛crit- رویداد مهم؛err- خطای معمولی؛warn- هشدار معمولی؛notice- اطلاع رسانی؛info- پیام اطلاعاتی؛debug- اشکال زدایی اطلاعات؛
در حال حاضر، سرویسهای اصلی جمعآوری لاگ در لینوکس rsyslog و systemd-journald هستند . آنها با اکثر بستههای توزیع مدرن همراه هستند و بهطور مستقل کار میکنند.
rsyslog
گزارشهای این سرویس در پوشهی « /var/log/ » به شکل فایلهای متنی معمولی قرار دارند. پیامهای گزارش بسته به نوع رویداد، در فایلهای مختلفی قرار میگیرند. برای مثال، « /var/log/auth.log » حاوی اطلاعات مربوط به مجوز کاربران در سیستم و « /var/log/kern.log » حاوی پیامهای هسته است. نام فایلها میتواند در بستههای توزیع مختلف متفاوت باشد، بنابراین بیایید نگاهی به فایل پیکربندی بیندازیم تا بفهمیم « /etc/rsyslog.d/50-default.conf » در کجا قرار دارد.
این قوانین نشان میدهند که هر نوع پیام لاگ در کدام فایل قرار دارد. قسمت چپ نوع پیام را به شکل « [منبع].[اولویت] » و قسمت راست نام فایل لاگ را نمایش میدهد. هنگام نوشتن نوع پیام، میتوان کاراکتر « * » را به آن اضافه کرد. این به معنای مقدار خالی یا « هیچ » است که آن را از لیست حذف میکند. بیایید نگاهی دقیقتر به دو قانون اول بیندازیم.
“auth,authpriv.* /var/log/auth.log”
“*.*;auth,authpriv.none -/var/log/syslog”
قانون اول به این معنی است که تمام پیامهای دریافتی از مکانیزم احراز هویت در فایل " /var/log/auth.log " ثبت میشوند. تمام تلاشهای احراز هویت (چه موفق و چه ناموفق) در این فایل ثبت میشوند. قانون دوم نشان میدهد که تمام پیامها به جز پیامهای مرتبط با احراز هویت در فایل " /var/log/syslog " ثبت میشوند. این دو فایل معمولاً محبوبترین هستند. قوانین زیر مسیر ذخیره لاگهای هسته " kern.* " و لاگهای سرویس ایمیل " mail.* " را تعریف میکنند.
فایلهای لاگ را میتوان با کمک هر ویرایشگر متنی مانند less ، cat ، tail باز کرد . بیایید فایل “ /var/log/auth.log ” را باز کنیم.
less /var/log/auth.log
هر خط از فایل یک پیام جداگانه است که از برنامه یا سرویس دریافت می شود. همه پیام ها صرف نظر از منبع آنها دارای یک قالب و از 5 قسمت هستند. بیایید پیام هایلایت شده در اسکرین شات را به عنوان مثال در نظر بگیریم.
- مهر زمانی پیام - "12 فوریه 06:18:33"
- نام رایانه ای که پیام را ارسال کرده است - "vds"
- نام برنامه یا سرویسی که پیام را ارسال کرده است - "sshd"
- شناسه فرآیند - [653]
- متن پیام - "گذرواژه پذیرفته شده برای mihail از 188.19.42.165 پورت 2849 ssh2"
این نمونه ای از اتصال موفق به SSH بود.
و در اینجا چگونگی تلاش ناموفق برای ورود به سیستم به نظر می رسد:
این فایل همچنین دستورات با مجوزهای پیشرفته را ضبط می کند
بیایید فایل /var/log/syslog را باز کنیم
یک پیام برجسته در اسکرین شات، پیامی در مورد خاموش شدن رابط شبکه است.
برای جستجوی اطلاعات در فایلهای متنی طولانی از ابزار grep استفاده کنید . میتوانید تمام پیامهای دریافتی از سرویس pptpd را در فایل “ /var/log/syslog ” پیدا کنید.
grep 'pptpd' /var/log/syslog
در طول عیبیابی میتوانید از ابزار tail استفاده کنید که میتواند چندین خط آخر فایلها را نمایش دهد. دستور « tail -f /var/log/syslog » به شما امکان میدهد ضبط لاگها را به صورت بلادرنگ مشاهده کنید.
سرویس rsyslog بسیار انعطافپذیر و قدرتمند است. میتوان از آن برای جمعآوری لاگها در سیستمهای محلی و همچنین در سطح سازمانی استفاده کرد. میتوانید مستندات کامل را در وبسایت رسمی https://www.rsyslog.com/ پیدا کنید.
چرخش لاگ ها در لینوکس
ثبت لاگها به طور مداوم در حال انجام است، بنابراین اندازه فایلها دائماً در حال افزایش است. مکانیزم چرخش، بایگانی خودکار لاگهای قدیمی و ایجاد فایلهای جدید را تضمین میکند. بسته به قوانین، این کار میتواند روزانه، هفتگی، ماهانه یا با محدودیت اندازه انجام شود. با ایجاد لاگهای جدید، میتوان لاگهای قدیمی را حذف یا از طریق ایمیل ارسال کرد. چرخش لاگها توسط ابزار logrotate انجام میشود . میتوانید پیکربندی اصلی را در فایل " /etc/logrotate.conf " پیدا کنید. محتوای فایلها نیز در پوشه " /etc/logrotate.d/ " پردازش میشود.
قوانین جدید را میتوان در فایل پیکربندی اصلی وارد کرد. با این حال، بهتر است یک فایل جداگانه در « /etc/logrotate.d/ » ایجاد کنید. به طور پیشفرض، چند فایل در این دایرکتوری وجود دارد.
بیایید نگاهی به فایل « /etc/logrotate.d/rsyslog » بیندازیم که شامل قوانین چرخش برای گزارشهای سرویس rsyslog است.
ابتدا، قانون باید شامل مسیر فایل log باشد و سپس تمام دستورالعمل ها را در براکت های منحنی دنبال کند.
- چرخش 7 - تعداد فایل برای نگهداری - 7
- روزانه - هر روز یک فایل جدید ایجاد کنید
- فشرده کردن - فشرده سازی و بایگانی فایل های قدیمی
همانطور که در تصویر میبینید، در پوشهی « /var/log/ » فایل اصلی گزارش « syslog » و ۷ فایل آرشیو وجود دارد که با قوانین موجود در فایل پیکربندی مطابقت دارد.
میتوانید توضیحات مفصلتری از logrotate را در راهنما، با اجرای دستور « man logrotate » بیابید.
جمع آوری لاگ های لینوکس - مجله
سرویس جمعآوری لاگهای systemd-journald بخشی از سیستم راهاندازی systemd است. فایلهای لاگ لینوکس در مسیر " /var/log/journal/ " با فرمت خاصی ذخیره میشوند و میتوان آنها را با کمک ابزار journalctl باز کرد . فرمت رکوردها دقیقاً مشابه rsyslog است.
دستور journalctl بدون هیچ ویژگی، تمام رکوردها را نشان میدهد، اما برای لاگهای بزرگتر مناسب نیست. بیایید نگاهی به برخی از گزینههای این ابزار بیندازیم.
journalctl -b- نمایش تمام رکوردها از آخرین شروعjournalctl -S "2020-02-17 12:00" -U "2020-02-17 12:10"- نمایش رکورد در یک بازه زمانی خاصjournalctl -u pptpd- نمایش سوابق یک سرویس خاصjournalctl -k- نمایش پیام های هستهjournalctl -p err- نمایش پیام هایی با اولویت خاص، پیام های با اولویت بالاتر در این مورد (crit، alert، emerg)journalctl -f- نمایش پیام ها در زمان واقعی
برای انعطافپذیری بهتر، میتوانید این گزینهها را با هم ترکیب کنید. بیایید تمام خطاهای سرویس pptpd را نشان دهیم.
journalctl -u pptpd -p err
اگر مسیر فایل اجرایی را به عنوان یک ویژگی مشخص کنید، ابزار تمام پیامهای ارسال شده توسط این فایل را نشان میدهد. بیایید تمام پیامهای ارسال شده توسط فایل " /usr/bin/sudo " را از ساعت 04:15 در 18 فوریه 2020 نشان دهیم. در واقع، تمام دستورات اجرا شده با مجوزهای بالاتر را نشان میدهد.
journalctl -S "2020-02-18 04:15" /usr/bin/sudo
برای اینکه بفهمید فایل های لاگ چقدر فضای دیسک را برای اجرای دستور زیر اشغال می کنند
journalctl --disk-usage
برای محدود کردن فایل log به 1Gb دستور زیر را اجرا کنید
journalctl --vacuum-size=1G
باز کردن فایل های باینری
حالا بیایید نگاهی به چند فایل خاص در پوشهی « /var/log/ » بیندازیم که تمام تلاشهای ورود به سیستم در آنها ذخیره میشوند. این فایلها دودویی هستند و فقط با برنامههای خاص قابل باز شدن هستند.
/var/log/wtmp حاوی اطلاعاتی در مورد تلاشهای موفق برای ورود به سیستم است. برای باز کردن آن از ابزار last استفاده کنید.
/var/log/btmp - شامل تمام تلاشهای ناموفق برای ورود به سیستم است. میتوان آن را با lastb و با مجوزهای پیشرفته باز کرد. ویژگی -n تعداد خطوط نمایش داده شده از انتهای فایل را تعریف میکند.
/var/log/lastlog - شامل زمان آخرین اقدام ورود به سیستم برای هر رکورد حساب است. میتواند با lastlog باز شود.