نحوه کار با لاگ ها در لینوکس
6634
25 آذر 1396
مریم علیزاده نویسنده

در این آموزش از سری مقالات آموزشی سرور لینوکس با آموزش کار با لاگ ها در لینوکس در خدمت شما هستیم.
اگر مدت زمان زیادی را در محیط لینوکس سپری میکنید ضرورت دارد با محل لاگ فایل‌ها و چگونگی مدیریت آنها آشنا باشید. وظیفه لاگ فایها کمک برای عیب یابی مشکلات سیستم میباشد. هنگامی که سیستم شما با مشکل مواجه میشود و یا کند کار میکند باید محتوای فایل های لاگ را بررسی نمایید. بررسی لاگ فایل ها به شما کمک خواهد کرد محل مشکل را یافته و آن را برطرف نمایید.

در سیستم‌های لینوکسی فایل‌های لاگ مختلفی وجود دارد که برخی از آنها عبارتند از: لاگ‌های سیستم، کرنل، سیستم مدیریت بسته‌ها، پروسه بوت، آپاچی، MySQL و ... .

اکثر فایل‌های لاگ در مکان var/log/ قرار دارند. زمانی که مشکلی در سیستم عامل یا سرویس‌ها وجود دارد این لاگها به شما کمک خواهند کرد. خوشبختانه روش‌های مختلفی برای دیدن فایل های لاگ سیستم شما وجود دارد که از طریق خط فرمان اجرا میشوند.


نکته 1: ما فرض کرده‌ایم که دسترسی روت به سرور خود دارید ، در غیر اینصورت دستورات را با sudo آغاز نمایید.

با آموزش کار با لاگ ها در لینوکس همراه ما باشید.

کار با لاگ ها در لینوکس

محل لاگ فایل ها


تقریبا تمام لاگ فایل‌ها بصورت پیشفرض در دایرکتوری /var/log/ و دایرکتوری‌های زیرشاخه آن قرار دارند. برای وارد شدن به دایرکتوری log میتوانید از دستور زیر استفاده نمایید.

cd /var/log

حال برای دیدن محتوای دایرکتوری log میتوانید از دستور زیر استفاده نمایید.

ls -la

خروجی باید مشابه تصویر زیر باشد.

نمایش لاگ های لینوکس
برای مثال دایرکتوری با نام Cron را میبینید که لاگ‌های سرویس Crontab داخل این دایرکتوری قرار میگیرند.

خواندن لاگ فایل‌ها

دستورات مختلفی برای خواندن لاگ فایل‌ها وجود دارد و هر کدام از این دستورات کاربرد و اهداف خاصی دارند.

دستور cat
برای باز کردن یک فایل لاگ میتوانید از دستور cat استفاده نمایید. با استفاده از این دستور lمحتویات فایل yum.log را با هم میبینیم.

cat yum.log

با استفاده از دستور cat میتوانید تمامی فایل های لاگ را بصورت استاتیک ببینید.

دستور tail
دستور مفید دیگر برای دیدن لاگ فایل‌ها دستور tail میباشد. اگر این دستور را بدون هیچ پرچمی استفاده نمایید 10 خط آخر فایل شما را نمایش خواهد داد.

tail yum.log

نکته 2: برای دیدن پرچم‌های دستور tail میتوانید از دستور زیر استفاده نمایید.

tail --help

شکل استفاده از این دستور بصورت زیر میباشد.

tail [FLAG] [FILENAME]

اگر میخواهید 100 خط آخر فایل خود را ببینید باید دستور زیر را اجرا نمایید.

tail -n 100 yourlog.log

مهم ترین پرچم این دستور پرچم f- میباشد. که این پرچم اجازه میدهد محتوای فایل خود را بصورت زنده ببینید. یعنی اگر محتوای جدید به فایل اضافه میشود در خروجی دستور این محتوای جدید نیز نمایش داده شود.

tail -f yourlog.log

دستورات more و less
با استفاده از دستور more میتوانید فایل لاگ خود را بصورت صفحه به صفحه ببینید. برای رفتن به صفحه بعد باید از کلید space استفاده نمایید.

more yourlog.log

دستور less نیز تقریبا مشابه دستور more میباشد فقط با تفاوت‌های زیر:
- میتوانید با استفاده از کلید‌های مکان نما بین خظوط فایل حرکت کنید.
- میتوانید با استفاده از کلمه /keyword به جستجوی عبارتی بپردازید.
- از دستورات ویرایشگر vi استفاده مینماید.

less yourlog.log

دستور head
این دستور 10 خط اول فایل شما را نمایش خواهد داد.

head yourlog.log

ترکیب دستور grep با سایر دستورات

برای جستجوی محتوای خاص در داخل لاگ فایل خود میتوانید دستور grep را اضافه نمایید. مثلا برای یافتن IP معین یا پیام خطا داخل فایل لاگ خود میتوانید از دستورات زیر استفاده نمایید.

cat yourlog.log | grep IP
tail -f yourlog.log | grep errorname

دستور sort

برای مرتب سازی خروچی فایل لاگ خود میتوانید از دستور sort استفاده نمایید. این دستور دیتای شما را با معیارهای مختلف مرتب سازی میکند.
برای مرتب سازی فایل خود با حروف الفبا میتوانید از دستور زیر استفاده نمایید.

sort yourlog.log

اگر پرچم r- را به دستور خود اضافه نمایید دیتا برحسب حروف الفبا اما بصورت معکوس مرتب خواهد شد.

sort -r yourlog.log

پرچم n- در صورتی که دیتای شما دارای عدد برای هر عنصر باشد دیتا را از کمترین عدد به بزرگ ترین عدد مرتب خواهد کرد.

sort -n prices.log

نکته 3: برای دیدن تمامی پرچم های دستور sort میتوانید از دستور زیر استفاده نمایید.

sort --help

دستور awk
این دستور دستور قدرتمندی برای پردازش و آنالیز فایل‌های متنی بخصوص فایل‌های حاوی ستون و ردیف میباشد.
شکل استفاده از این دستور بصورت زیر میباشد.

awk 'pattern {action}' input-file

یعنی هر خط از فایل ورودی را گرفته و اگر خط مورد نظر دارای الگوی مشخص شده باشد، عمل تعیین شده در بخش action را روی خط اعمال نموده و خط حاصل را نمایش می‌دهد.
اگر الگوی مشخص شده در قسمت pattern را حذف نماییم عمل مشخص شده در قسمت action روی تمامی خطوط اعمال میشود.
برای مثال:

awk '{ print $5 }' yourlog.log


این دستور عنصر ستون 5‌ام هر خط را گرفته و آن را مثل یک خط در shell شما چاپ میکند.

awk '/30/ { print $3 }' yourlog.log


در دستور فوق رشته بین دو کاراکتر "/" بیان میکند که اگر خط دارای رشته "30" بود سیستم عنصر موجود در ستون سوم آن خط را چاپ میکند.
نکته 4: دستور awk میتواند کارهای پیچیده تری نیز انجام دهد. برای یادگیری بیشتر در مورد این دستور میتوانید با استفاده از دستور زیر صفحه راهنمای آن را ببینید.

man awk

دستور uniq
این دستور برای حذف یا تشخیص عناصر تکراری در فایل‌ها کاربرد دارد. در ادامه به بررسی برخی از پرچم‌های پرکاربرد این دستور میپردازیم.
شکل استفاده از دستور uniq بصورت زیر میباشد.

uniq [-options]


هرگاه این دستور بدون هیچ آپشنی استفاده شود خطوط تکراری را حذف کرده و خروجی را نمایش میدهد.

uniq yourlog.log


آپشن c- برای شمارش تعداد تکرار خطوط در یک فایل استفاده میشود.

uniq -c yourlog.log


آپشن u- نیز فقط خطوط یکتا را نمایش خواهد داد.

uniq -u yourlog.log


دستورات ترکیبی مفید
برای ایجاد دستورات مفید میتوانید دستورات شرح داده شده در بخش قبلی را با هم ترکیب کنید. در ادامه تعدادی از این دستورات را آورده‌ایم.

cat yourlog.log |awk -F" " '{print $5}'


این دستور ستون 5 امی که با کاراکتر " " از هم جدا شده اند را نمایش خواهد داد.

cat /var/log/yourlog.log | awk -F" " '{print $1}' | uniq -c | sort -n


این دستور ستون اولی را نمایش خواهد داد که با کاراکتر " " از هم متمایز شده‌اند و عناصر ستون را از کمترین به بزرگ ترین بر اساس تعداد تکرار آنها مرتب سازی میکند.

فایل های لاگ رایج لینوکس و کاربرد آنها

var/log/messages/ : پیام های سیستمی
var/log/auth.log/ : لاگ های مربوط به اهراز هویت
var/log/kern.log/ : لاگ های کرنل
var/log/maillog/ : لاگ های میل سرور
var/log/httpd/ : دایرکتوری لاگ وب سرور آپاچی
var/log/boot.log/: لاگ های بوت سیستم.
var/log/mysqld.log/ : فایل های لاگ سرور دیتابیس MySQL
var/log/utmp یا /var/log/wtmp/ : ثبت لاگین ها

در این آموزش به بررسی روش های خواندن محتویات لاگ فایل ها پرداختیم. اما پس از خواندن لاگ فایل ها مهم ترین امر نحوه سازمان دهی آنها میباشد. اگر از روش مدیریت خاصی برای لاگ فایل ها استفاده نکنید پس از مدت زمانی با مشکلات زیادی مواجه خواهید شد. در ادامه این آموزش به معرفی دو روش معروف و موثر از روش های مدیریت لاگ ها خواهیم پرداخت.

چرخش لاگ ها

ابراز Logrotate میتواند بطور مرتب فایل‌های لاگ شما را حذف، فشرده سازی و چرخش نماید. منظور از چرخش به این صورت است که وقتی موعد زمانیِ مدیریت لاگ‌ها فرا می رسد (مثلاً هر هفته یا هر ماه یک بار انجام می‌گیرد)، فایل های لاگ فشرده میشوند و در مکانی ذخیره می‌گردد، حالا فایل‌های قدیمی حذف شده و به جای آن یک فایل تازه ساخته می‌شود. حالا اینکه چه تعداد از این بایگانیِ لاگ‌های فشرده شده روی سرور بماند، بستگی به تنظیماتی دارد که درون فایل کانفیگ Logrotate تعیین شده است. میتوانید عمل چرخش را روزانه، ماهانه یا ... تنظیم نمایید. بصورت پیشفرض ابزار Logrotate بصورت cron job روزانه اجرا میشود.


سرور syslog

syslog سرور مانیتورینگ لاگ مرکزی در یک شبکه فراهم میکند. این شبکه میتواند شامل انواع مختلفی از دستگاه‌ها مانند سرورهای Linux و Windows و روترها، سوییچ‌ها و یا هر میزبان دیگری باشد که تمامی این دستگاه‌ها میتوانند لاگ‌های خود را از طریق شبکه به سرور لاگ ارسال نمایند. با نصب سرور syslog میتوانید لاگ‌های میزبان‌ها و دستگاه‌های مختلف را از یکدیگر فیلتر کرده و در یک مکان جدا قرار دهید. با اینکار مدیریت لاگها آسان تر خواهد شد.
امیدوارم آموزش کار با لاگ ها در لینوکس برای شما مفید بوده باشد.

کاربر گرامی شما می‌توانید سؤالات مربوط به این آموزش را در بخش کامنت‌ها عنوان کرده و در همین قسمت پاسخ خود را دریافت کنید.