معرفی دستور journalctl برای بررسی لاگهای Systemd در لینوکس
در این مقاله میخوانید
- نگاهی به کاربرد دستور journalctl در لینوکس
- بررسی لاگ سیستم
- فیلترکردن لاگ سیستم براساس زمان
- فیلترکردن لاگ سیستم براساس واحد یا بخشی از سیستم
- فیلترکردن لاگ سیستم براساس فرایند یا گروه خاص
- فیلترکردن لاگ سیستم براساس موقعیت یا مسیر فایل
- فیلترکردن لاگ سیستم براساس اولویت
- دریافت لاگ هسته سرور (Kernel)
- حذف باگهای systemed journal
- نمایش فرمتهای خاص در خروجی
- جدول کاربردهای دستور journalctl
- جمعبندی
- سؤالات متداول
دستور journalctl یکی از ابزارهای قدرتمند در انواع توزیع لینوکس است که اطلاعاتی درباره وضعیت سیستم، Damone، واحدها یا هسته (Kernel) سیستم ارائه میدهد. درواقع، اگر باگی در سیستم وجود داشته باشد، دستور journalctl مانند ابزار تشخیص قدرتمند آن را شناسایی میکند.
در این مطلب از بلاگ پارس پک، کاربرد journalctl را برای مشاهده و ویرایش و بررسی گزارشهای سیستم لینوکس توضیح میدهیم. اگر قصد دارید از این دستور استفاده کنید یا برای مشاهده لاگهای سیستم به مشکل خوردهاید، تا انتهای این مطلب همراه ما باشید.
نگاهی به کاربرد دستور journalctl در لینوکس
نرمافزار Systemd نوعی خدمت و ابزار مدیریت سیستم لینوکس بهشمار میرود. برای انجام فرایندهای مختلف در سیستم لینوکس، از ابزار و سرویسهای (Daemon) گوناگونی استفاده میشود. Systemd journald راهکارهای مربوط به فرایندهای هسته سیستم را بهصورت گزارشی متمرکز به journal تحویل میدهد.
خرید سرویس لینوکسی از پارس پک
شما میتوانید از این مقاله برای مدیریت سرور لینوکس خود استفاده کنید و اگر قصد خرید سرویسهای لینوکسی پارس پک را دارید، میتوانید با کارشناسان فروش ما در ارتباط باشید. همچنین، شما میتوانید برای اطلاع از تعرفهها و هزینهها به لینکهای زیر مراجعه کنید.
درواقع، Systemd journald پیامهای خروجی از سیستم را جمعآوری میکند و بهصورت journals بهوجود میآورد. دستور journalctl دادههایی را ویرایش و اجرا میکند که سرویس journals جمعآوری کرده است. رویهمرفته، میتوان گفت که این دستور ابزار کار مدیران سیستم لینوکس برای گزارشگیری و ویرایش و راهکارهای نرمافزار سرور Syslog است.
بررسی لاگ سیستم
یکی از ویژگیهای مهم هر سیستم، امکان بررسی لاگ آن است. دستور journalctl را میتوان با روشهای مختلفی بهکار برد. مهمترین کاربرد journalctl بررسی لاگ سیستم است. برای انجام این کار، تنها کافی است دستور journalctl را در ترمینال فراخوانی کنید. این کار را با فشاردادن همزمان کلید Shift و PageUp یا Shift و PageDown میتوانید انجام دهید.
خروجیای که این دستور به شما نشان میدهد، لاگهای حاصل از تمام سرویسها و واحدهای سیستم است. ناگفته نماند که در این شرایط، ممکن است اطلاعات بسیار زیادی را تحویل بگیرید که نیاز چندانی به آن ندارید. برای جلوگیری از این مسئله، باید از امکان فیلترسازی دستور استفاده کنید.
برای آشنایی با آموزش کپیکردن فایل و فولدر در لینوکس با استفاده از دستور cp مقاله زیر را بخوانید.
فیلترکردن لاگ سیستم براساس زمان
ازطریق یک یا چند فیلتر در دستور journalctl، میتوانید مشکل سیستم را دقیقتر تشخیص دهید. برای مثال، اگر قصد دارید اطلاعاتی درباره بخشی از سیستم در بازه زمانی خاصی پیدا کنید، فیلترسازی به شما کمک میکند تا بهجای حجم انبوه اطلاعات بلااستفاده، اطلاعات دقیقتری دریافت کنید.
فرض کنید قصد دارید لاگهای دیروز را بیابید. بهکمک دستور زیر، میتوانید این کار را انجام دهید:
journalctl --since yesterday
این دستور لاگهایی از سیستم را به شما نشان میدهد که دیروز در سرور لینوکس اتفاق افتاده است. همچنین، فیلترسازی را براساس تاریخ یا بازه زمانی مشخصی میتوانید انجام دهید. برای مثال:
journalctl --since yesterday
علاوهبراین، از دو تاریخ در یک دستور میتوانید استفاده کنید. بهعنوان نمونه، اگر قصد دارید از لاگ سیستم در تاریخ ۲۸/۰۲/۲۰۲۲ و از ساعت ۰۰:۰۰ تا ساعت ۲۳:۰۰ بازدید کنید، دستور journalctl را بهصورت زیر درج کنید:
journalctl --since "2022-02-28 00:00:00" --until "2022-02-28 23:00:00"
شایان ذکر است که برای دریافت ۱۰ ورودی اخیر در گزارشهای systemd-journald، میتوانید گزینه -n را نیز به آن اضافه کنید.
برای آشنایی با ۴۰ دستور پرکاربرد لینوکس حتماً مقاله زیر را بخوانید.
فیلترکردن لاگ سیستم براساس واحد یا بخشی از سیستم
یکی دیگر از کاربردهای رایج journalctl، اِعمال فیلتر براساس واحد یا بخشی از سیستم است که به اطلاعات آن نیاز دارید. برای این کار، فقط کافی است از دستور journalctl -u استفاده کنید. برای مثال، اگر قصد دارید لاگ را در قسمت cronie.service بررسی کنید، دستور زیر را بهکار ببرید:
journalctl -u cronie.service
همچنین، این دستور را میتوانید با تاریخ ترکیب و جستوجوی دقیقتری تجربه کنید:
journalctl -u cronie.service --since yesterday
فیلترکردن لاگ سیستم براساس فرایند یا گروه خاص
اگر از شناسه دقیق فرایندهایی که در سیستم رخداده اطلاع دارید، با استفاده از دستور PID- میتوانید براساس شناسه فیلترسازی انجام دهید. برای مثال، دستور journalctl برای شناسه ۸۸۸۸ بهصورت زیر است:
journalctl _PID=8888
برای فیلترسازی لاگ براساس شناسه کاربر یا گروه نیز، میتوانید بهترتیب از دستورهای _UID یا _GID استفاده کنید.
فیلترکردن لاگ سیستم براساس موقعیت یا مسیر فایل
اگر مسیری که قصد دارید لاگ آن را بررسی کنید، فایل است، ازطریق مسیر یا موقعیت فایل میتوانید این کار را انجام دهید. برای مثال، نام فایل را بهصورت زیر در دستور journalctl میتوانید وارد کنید:
journalctl /usr/bin/bash
فیلترکردن لاگ سیستم براساس اولویت
در بررسی کاربرد journalctl، میتوانید لاگ را براساس اولویت نیز فیلتر کنید. این یعنی از دستور journalctl برای نمایش پیغامهایی استفاده کنید که اولویت بیشتری دارند. فیلترسازی بر این اساس ساده و فقط کافی است دستور p- را وارد کنید. بدینترتیب، پیغامهایی با اولویت کمتر در خروجی ظاهر نخواهند شد. دستور journalctl برای هر پیغام خطا، بحرانی، هشداردهنده یا اضطراری مقدار عددی را براساس اولویت بهصورت زیر تعریف کرده است:
0: emerg 1: alert 2: crit 3: err 4: warning 5: notice 6: info 7: debug
برای مثال، اگر قصد دارید پیغامهایی در سطح خطا بهبعد نمایش داده شوند، کافی است دستور زیر را وارد کنید:
journalctl -p err -b
دریافت لاگ هسته سرور (Kernel)
گاهی اوقات نیاز است بررسی کنید که آیا هسته سرور بهخوبی کار میکند یا خیر. سپس از این طریق مشکل یا باگ سیستم را برطرف کنید. برای دریافت لاگ هسته سرور، فقط کافی است از دستور k- استفاده کنید. همچنین، اگر قصد دارید اطلاعاتی درباره بوت اخیر هسته بهدست آورید، از دستور -b میتوانید بهره ببرید:
journalctl -b
journalctl -k
با این پیغام بهطورپیشفرض پیامهای هسته از زمان بوت ظاهر میشود. برای جستوجوی دقیقتر، میتوانید این دستور را با سایر دستورهای گفتهشده در بالا نیز ترکیب کنید. بهعنوان نمونه، اگر قصد دارید پیغامهای هسته مربوط به ۶ بوت آخر را بررسی کنید، دستور زیر را بهکار ببرید:
journalctl -k -b -6
حذف باگهای systemed journal
برای بهبود عملکرد سیستم، فایلهای بیهوده را باید پاک کنید. برای این کار، بهکمک ابزار Disk Usage Analyzer خواهید فهمید که فایل لاگ سیستم چقدر فضا را در دیسک اشغال کرده است. فایلهای لاگ در بخش var/log/journal ذخیره میشوند. اگر به انجام دیباگ نیازی ندارید، با حذف فایلهای لاگ میتوانید تا حد بسیار زیادی فضای سیستم را آزاد کنید. درادامه، نحوه انجام این کار را توضیح خواهیم داد.
بهکمک دستور زیر، ترمینال را باز و فضای پرشده را بررسی کنید:
journalctl --disk-usage
برای حذف لاگ، بهکمک دستور rotate فایلهای journal را باید به حالت آرشیو تبدیل کنید:
sudo journalctl --rotate
سپس، درصورتیکه قصد دارید لاگهای journal قدیمی را از روز خاصی مثلاً از دو روز قبل حذف کنید، از دستور زیر بهره ببرید:
sudo journalctl --vacuum-time=2days
همچنین، اگر قصد دارید فایل لاگ را بهمیزان مشخصی مثلاً ۱۰۰ مگابایت حذف کنید، از دستور زیر استفاده کنید:
sudo journalctl --vacuum-size=100M
نمایش فرمتهای خاص در خروجی
با استفاده از دستور journalctl، میتوانید خروجی را در فرمتی خاص مشاهده کنید. سینتکس فرمت خروجی با استفاده از این دستور بهصورت زیر است:
journalctl -o <output format>
برخی از فرمتهای خروجی که سیستم پشتیبانی میکند، عبارتاند از:
- cat-: نمایشدهنده فیلد پیام
- export-: خروجی فرمت باینری و مناسب برای پشتیبانگیری
- short-: خروجی مشابه فایلهای Syslog کلاسیک
- short-precise-: نمایش زمان با میکروثانیه
- json-: نمایش ورودی journals بهصورت ورودیهای تکخطی JSON
- json-pretty-: نمایش خطوط بهصورت ساختارهای JSON
برای مثال، اگر قصد دارید خروجی را با فرمت short دریافت کنید، از دستور زیر باید استفاده کنید:
journalctl -o short
جدول کاربردهای دستور journalctl
دستور | شرح |
-a
–all |
نمایش تمام فایلهای چاپشدنی و چاپنشدنی |
-f
–follow |
نمایش جدیدترین ورودیها و پرینت آنها |
–no-full | کوتاهمدت خروجی |
-e
–pager-end |
پرش به انتهای صفحه |
-n <number>
–lines=<number> |
تعداد محدودی (بهصورت پیشفرض ۱۰ آرگومان) از جدیدترین ورودیها را نشان میدهد |
-o <format>
–output=<format> |
ورودی journal را در فرمت دلخواه نمایش میدهد |
–utc | زمان را براساس ساعت جهانی تنظیم میکند |
-x
–catalog |
متن توضیح را به پیغام گزارش اضافه میکند |
-q
–quiet |
پیامهای بلااستفاده را در خروجی نشان نمیدهد |
-b [<ID> or <+-offset>]
–boot[=<ID> or <+-offset>] |
گزارشها را از بوتی خاص نشان میدهد |
-k
–dmesg |
پیامهای مربوطبه هسته سرور را نشان میدهد |
–list-boots | جدولی از شماره و شناسه بوت نشان میدهد |
-g <regex>
–grep=<regex> |
خروجی را براساس grep regex فیلتر میکند |
-S <date>, -U <date>
–since=<date>, –until=<date> |
ورودیهای جدید یا قدیمی را از تاریخی خاص نشان میدهد |
-u <unit|pattern>
–unit=<unit|pattern> |
گزارشها را براساس واحد یا الگو نمایش میدهد |
–disk-usage | میزان فضای ذخیره را نشان میدهد |
–vaccuum-size=<size> | فایل journal را براساس اندازه آرشیو میکند |
–vaccuum-time=<time> | فایل journal را براساس زمان آرشیو میکند |
دستور journalctl حکم آچارفرانسه را برای عیبیابی و رفع مشکل سیستم لینوکس دارد. گستردگی کاربرد journalctl بهگونهای است که میتوانید از سیر تا پیاز عیبیابی و بررسی لاگ و هسته سرور از آن بهره ببرید.
جمعبندی
دستور journalctl ابزاری باارزش است که برای رفع عیبیابی لینوکس و بررسی خطاهای سیستم به شما کمک خواهد کرد. در این مطلب از بلاگ پارس پک، دستور journalctl و کاربرد آن را بررسی کردیم و نحوه نمایش و کنترل و مدیریت لاگهای systemd journal را توضیح دادیم. آیا تابهحال از دستور journalctl استفاده کردهاید؟ تجربهتان را در بخش نظرات با ما در میان بگذارید.
سؤالات متداول
۱. دستور journalctl برای چه کاری استفاده میشود؟
دستور journalctl برای جستوجو و نمایش گزارشهای journald در systems استفاده میشود. سرویس systemd گزارشهای journal را در قالب باینری ذخیره میکند و سپس سینتکس journalctl آنها را میخواند.
۲. لاگ journal لینوکس در کجا قرار گرفته است؟
journal بهطورپیشفرض دادهها را در /run/log/journal/ ذخیره میکند.
۳. چگونه فایلهای systems journal را فراخوانی کنیم؟
برای خواندن لاگ systems journal، از دستور journalctl بدون هیچگونه گزینهای استفاده کنید.