صبحانه کاری برای شروع رفاقت های کاری و تخصصی

معرفی دستور journalctl برای بررسی لاگ‌های Systemd در لینوکس

دستور journalctl چیست؟
Avatar
نویسنده: دریا آزادخواه
سه‌شنبه 20 تیر 1402
مطالعه: ۹ دقیقه ۰ نظر ۷۸۰ بازدید

دستور journalctl یکی از ابزارهای قدرتمند در انواع توزیع لینوکس است که اطلاعاتی درباره وضعیت سیستم، Damone‌، واحدها یا هسته (Kernel) سیستم ارائه می‌دهد. درواقع، اگر باگی در سیستم وجود داشته باشد، دستور journalctl مانند ابزار تشخیص قدرتمند آن را شناسایی می‌کند.

در این مطلب از بلاگ پارس پک، کاربرد journalctl را برای مشاهده و ویرایش و بررسی گزارش‌های سیستم لینوکس توضیح می‌دهیم. اگر قصد دارید از این دستور استفاده کنید یا برای مشاهده لاگ‌های سیستم به مشکل خورده‌اید، تا انتهای این مطلب همراه ما باشید.

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

نرم‌افزار Systemd نوعی خدمت و ابزار مدیریت سیستم لینوکس به‌شمار می‌رود. برای انجام فرایندهای مختلف در سیستم لینوکس، از ابزار و سرویس‌های (Daemon) گوناگونی استفاده می‌شود. Systemd journald راهکارهای مربوط‌ به فرایندهای هسته سیستم را به‌صورت گزارشی متمرکز به journal تحویل می‌دهد.

خرید سرویس لینوکسی از پارس پک

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

 

درواقع، Systemd journald پیام‌های خروجی از سیستم را جمع‌آوری‌ می‌کند و به‌صورت journals به‌وجود می‌آورد. دستور journalctl داده‌هایی را ویرایش و اجرا می‌کند که سرویس journals جمع‌آوری‌ کرده است. روی‌هم‌رفته، می‌توان گفت که این دستور ابزار کار مدیران سیستم لینوکس برای گزارش‌گیری و ویرایش و راهکارهای نرم‌افزار سرور Syslog است.

کاربرد دستور journalctl در لینوکس
دستور journalctl در لینوکس چه کاربردی دارد؟

 

 بررسی لاگ سیستم

یکی از ویژگی‌های مهم هر سیستم، امکان بررسی لاگ آن است. دستور journalctl را می‌توان با روش‌های مختلفی به‌کار برد. مهم‌ترین کاربرد journalctl بررسی لاگ سیستم است. برای انجام این کار، تنها کافی‌ است دستور journalctl را در ترمینال فراخوانی کنید. این کار را با فشار‌دادن هم‌زمان کلید Shift و PageUp یا Shift و PageDown می‌توانید انجام دهید.

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

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

دستور 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

فیلتر‌کردن لاگ سیستم براساس موقعیت یا مسیر فایل

اگر مسیری که قصد دارید لاگ آن را بررسی کنید، فایل است، از‌طریق مسیر یا موقعیت فایل می‌توانید این کار را انجام دهید. برای مثال، نام فایل را به‌صورت زیر در دستور 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 بدون هیچ‌گونه گزینه‌ای استفاده کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


ارسال دیدگاه در وبلاگ پارس‌پک را مطالعه کرده و آن‌ها را می‌پذیرم.