شما برای مطالعه این مقاله فقط 9 دقیقه وقت نیاز دارید

journalctl-command-in-linux

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

5/5 - (2 امتیاز)

گزارش های سیستمی منبع مهم و حیاتی برای ادمین ها و توسعه دهندگان محسوب می شوند. چرا که با تجزیه و تحلیل این گزارشات می توانند به اطلاعات لازم برای نظارت عملکرد سیستم، عیب یابی خطاها و درک رویدادها دست پیدا کنند. اینجاست که دستور journalctl در لینوکس وارد عمل می شود.

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

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

همچنین با اینکه با خرید سرور مجازی لینوکس (Linux VPS Hosting) می توانید به سطح ایده آلی از عملکرد و امنیت دست پیدا کنید ولی استفاده از ابزار journalctl می تواند بررسی لاگ های سیستمی، تحلیل وضعیت سرور، نظارت سریع و به موقع رویدادها را برای شما بسیار راحت تر سازد و شرایط لازم برای دستیابی به حداکثر پتانسیل سرور را برای شما فراهم کند.

ما قصد داریم در این مقاله تمام اطلاعات لازم در مورد وظایف، کاربردها و نحوه استفاده از دستور journalctl در لینوکس را در اختیار شما قرار دهیم تا این قدم مهم را با یک آموزش معتبر و کامل بردارید. پس بیایید شروع کنیم:

آشنایی با دستور journalctl در لینوکس

قبل از این که دستور journalctl را بررسی کنیم، ابتدا باید با systemd و Journald آشنا شویم چون این دستور برای تعامل با ژورنال گزارشاتی استفاده می شود که توسط systemd و Journald جمع آوری شده است.

Systemd، سیستم پیش فرض مدیریت فرآیندها در توزیع های لینوکس است که یک سری سرویس ها و دیمون های لینوکس را راه اندازی می کند تا کارهای مربوط به مدیریت فرآیندها و سرویس ها، کنترل و پیگری رویدادهای سیستم، مدیریت لاگ ها و … را انجام دهند.

Journald دیمون مربوط به ثبت گزارشات و لاگ های سیستمی است و پیام ها را از هسته، initrd، سرویس های systemd و سایر منابع بازیابی و جمع آوری می کند. این گزارشات تحت یک ساختار و ایندکس مشخص ذخیره می شوند ولی با توجه به این که داده های این مجموعه گزارش یا به اصطلاح ژورنال در قالب باینری هستند، برای بازیابی، قالب بندی، تجزیه و تحلیل درست و واضح این داده ها نیاز به ابزاری به اسم Journalctl دارید. 

شما با استفاده از Journalctl و آپشن های مختلف آن می توانید گزارشات را بخوانید، آنها به صورت real time نظارت کنید، گزارش ها بر اساس زمان، سرویس و سایر پارامترها فیلتر کنید. نیازی به نگرانی نیست چون ما در این مقاله تمام اطلاعات لازم در مورد دستور Journalctl (از سینتکس گرفته تا مثال های کاربردی) در اختیار شما قرار می دهیم تا بتوانید از این ابزار به بهترین شکل ممکن استفاده کنید.

سینتکس دستور گزارش گیری Journalctl

سینتکس پایه دستور Journalctl به صورت زیر است:

journalctl [options] [matches]

ولی این دستور هم مثل اکثر دستورات لینوکسی دیگر، دارای آپشن های مختلفی است که هر کدام برای اهداف خاصی به کار می روند. بیایید با اصلی ترین و پرکاربرد ترین آپشن های دستور Journalctl آشنا شویم:

b: نمایش پیام های مربوط به یک بوت خاص 

c: شروع نمایش گزارشات مجله از مکان مشخص شده توسط مکان نما یا همان cursor

r: نمایش خروجی به صورت برعکس (قرار دادن گزارشات جدیدتر در ابتدای لیست)

n: تعیین تعداد گزارشات اخیر برای نمایش در خروجی

k: نمایش پیام های کرنل یا هسته

u: نمایش پیام های مربوط به یک unit یا واحد systemd خاص یا واحد های مطابق با الگوی موردنظر

since و until: تعیین محدوده زمانی برای نمایش گزارشات

p: فیلتر سازی گزارشات بر اساس سطح اولویت

o: سفارشی سازی فرمت خروجی 

  • cat – نمایش فیلد متنی گزارشات
  • short – نمایش گزارشات با استایل پیش فرض syslog 
  • verbose – نمایش تمام فیلدهای گزارش به صورت کامل
  • export – سریال سازی ژورنال گزارشات به صورت باینری (مناسب برای پشتیبان گیری و انتقال شبکه)
  • json – ساختار بندی داده به صورت json  برای افزایش خوانایی
  • json-pretty – فرمت بندی داده های json در چند خط برای خوانایی بیشتر

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

نحوه نصب Journalctl در توزیع های مختلف لینوکس

 با اینکه ابزار Journalctl به طور پیش فرض همراه با systemd نصب می شود و نیازی به نصب جداگانه آن نیست. ولی اگر از توزیعی استفاده می کنید که از systemd برخودار نیست، برای استفاده از Journalctl حتماً باید نسبت به نصب systemd اقدام کنید تا ابزار systemd هم به طور خودکار کنار آن نصب شود:

نصب دستور journalctl در اوبونتو/دبیان

sudo apt-get install systemd

نصب journalctl در فدورا

sudo apt-get install systemd

نصب journalctl در Centos/RHEL

sudo yum install systemd

حالا که از نصب Journalctl در سیستم لینوکسی خود مطمئن هستید دیگر وقت آن است که مثال های کاربردی این دستور را بررسی کنیم.

* لطفاً توجه داشته باشید که برای دسترسی به برخی از گزارشات و رویدادها نیاز به دسترسی روت دارید که برای این کار بهتر است دستورات زیر را با sudo اجرا کنید. 

مثال های کاربردی از دستور journalctl در لینوکس

با بررسی این مثال ها می توانید نحوه کار با دستور journalctl را یاد بگیرید.

نمایش تمام گزارشات

اگر می خواهید به تمام داده های موجود در ژورنال گزارشی دست پیدا کنید و نیازی به ایجاد تغییر در قالب یا ساختار این داده نمی بینید، کافیست دستور Journalctl را بدون هیچ آپشن خاصی اجرا کنید:

journalctl

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

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

بیایید با چند مورد از این کلیدها آشنا شویم:

کلید های جهتی -> حرکت روی خطوط

کلید space -> حرکت به سمت پایین صفحه

b -> حرکت به سمت بالای صفحه

g -> رفتن به خط اول

G -> رفتن به خط آخر

‍100g -> رفتن به خطر ۱۰۰ام

string/ -> جستجوی یک رشته متنی خاص از موقعیت فعلی مکان نما

n/N -> رفتن به جستجوی بعدی یا قبلی

q -> خروج از گزارشات

اگر نمی خواهید گزارشات موردنظر شما در این فرمت نمایش داده شوند می توانید از آپشن  no-page استفاده کنید:

journalctl --no-pager

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

البته احتمالاً چون این دستور با میلیون ها گزارشات همراه می شود، بهتر است آپشن های خاصی را هم وارد عمل کنید تا گزارشاتی که واقعا به آنها نیاز دارید را ببینید.

نمایش گزارشات به صورت بر عکس (از جدید به قدیم)

اگر گزارشات اخیر سیستم برای شما اهمیت زیادی دارد و نمی خواهید به سمت پایین اسکرول کنید تا به جدیدترین گزارشات برسید، می توانید از آپشن r استفاده کنید:

journalctl -r

محدود سازی تعداد گزارشات با استفاده از journalctl در لینوکس

اگر می خواهید تعداد گزارشات را فیلتر کنید، می توانید از آپشن n که برای تعیین تعداد خطوطی نمایشی است، استفاده کنید:

journalctl -n 2

فیلتر سازی گزارشات بر اساس کلمه کلیدی

گزارشات systemd از منابع و سرویس های مختلفی جمع آوری می شوند که اگر از بین این گزارشات، فقط به گزارشات حاوی کلمه کلیدی خاصی نیاز دارید، می توانید دستور grep را با دستور journalctl ترکیب کنید تا گزارشات مرتبط با آن کلمه کلیدی نمایش داده شوند:

journalctl | grep Centaur

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

نمایش گزارشات به صورت realtime

sudo journalctl –f

نمایش اطلاعات مربوط به session های بوت قبلی 

journalctl --list-boots

با استفاده از خروجی این دستور می توانید از آپشن b که برای نمایش گزارشات مربوط به یک بوت خاص بود، استفاده کنید. برای این کار کافیست شماره بوت موردنظر را در دستور لحاظ کنید:

journalctl -b -1

اگر هم می خواهید گزارشات بوت جاری را مشاهده کنید، کافیست فقط آپشن b را در دستور قرار دهید:

journalctl -b

تعیین محدوده زمانی برای نمایش گزارشات 

برای این کار کافیست از آپشن های since و until استفاده کنید.

کلیک کنید  نحوه لیست کردن برنامه ها و فرایندهای در حال اجرا در لینوکس

برای مثال، اگر می خواهید گزارشات سپتامبر ۲۰۲۳ به بعد را ببینید، کافیست دستور زیر را اجرا کنید:

journalctl --since="2023-09-01 12:17:16"

یا می توانید این فیلتر را به صورت واضح تر مشخص کنید:

گزارشات دیروز

journalctl --since "yesterday"

گزارشات ۲۰ دقیقه پیش

journalctl --since "20 min ago"

گزاراشات ۲ ساعت پیش

journalctl --since "2 hour ago"

همانطور که می بینید، آپشن since برای شروع محدودیت زمانی است. اگر می خواهید برای پایان این محدوده زمان هم تاریخ، روز یا زمان خاصی را مشخص کنید، باید از until استفاده کنید:

برای مثال، برای نمایش گزارشات تا ۱۲ اکتبر سال ۲۰۲۳ می توانید از دستور زیر استفاده کنید:

journalctl --until "2023-10-12 12:00:00"

برای تعیین تاریخ شروع و پایان گزارشات هم باید این دو آپشن را در یک دستور لحاظ کنید:

journalctl --since "2023-10-12 00:00:00" --until "2023-10-15 12:00:00"

نمایش خروجی در فرمت json

این فرمت برای عملیات parse در بسیاری از برنامه ها مفید است و اگر می خواهید گزارشات خود را با فرمت json ببینید، کافیست دستور زیر را اجرا کنید:

journalctl -o json

یا اگر می خواهید تمام المان های json مربوط به یک گزارش در خطوط جداگانه نمایش داده شوند تا جلوه مرتب تری داشته باشند، می توانید از آپشن json-pretty استفاده کنید:

journalctl -o json-pretty

نمایش گزارشات بر اساس unit

برای اینکه گزارشات مربوط به یک واحد یا سرویس خاصی را مشاهده کنید، می توانید از آپشن u استفاده کنید:

journalctl -u nginx.service

یا اگر چند سرویس را مدنظر دارید، می توانید همه آنها را با هم در یک دستور لحاظ کنید:

journalctl -u nginx.service -u mysql.service

فیلتر گزارشات بر اساس سطح اولویت از طریق journalctl

Systemd گزارشات را بر اساس پارامترهای خاصی اولویت بندی می کند که ترتیب زیر از اولویت بالا به اولویت پایین مرتب شده است:

0 – پیام های فوری و اضطراری (emerge)

1 – پیام های اخطار (alert)

2 – پیام های بحرانی (crit)

3 – پیام های خطا (err)

4 – پیام های هشدار (warning)

5 – پیام های قابل توجه (notice)

6 – پیام های اطلاعاتی (info)

7 – پیام های اشکال زدایی (debug)

اگر می خواهید این سطح اولویت ها را در نمایش گزارشات لحاظ کنید، باید از آپشن p در دستور journalctl استفاده کنید. به عنوان مثال برای نمایش تمام گزارشات با سطح اهمیت warning می توانید از دستور زیر استفاده کنید:

journalctl -p warning

برای انتخاب چند سطح هم می توانید دستور بالا را به صورت زیر تغییر دهید:

journalctl -p info -p err

نمایش گزارشات بر اساس UTC

گزارشات سیستم به طور پیش فرض بر اساس زمان محلی سیستم نمایش داده می شوند. حالا اگر سیستم شما روی زمانی به غیر از UTC تنظیم شده است، با اجرای دستور زیر می توانید این گزارشات را بر اساس UTC ببینید:

journalctl --utc

فیلتر گزارشات بر اساس UID، GID و PID

بعضی از سرویس ها فرآيندهای فرزند دیگری را ایجاد یا به اصطلاح fork می کنند که اگر به خاطر دیباگ یک مسئله یا هر دلیل دیگر، قصد دارید گزارشات مربوط به یک فرآیند خاص را بررسی کنید، باید PID آن را در دستور لحاظ کنید:

journalctl _PID=1234

در مواقع دیگر، ممکن است بخواهید تمام گزارشات ثبت شده توسط یک کاربر یا گروه خاص را مشاهده کنید که در این صورت هم باید از فیلترهای UID یا GID استفاده کنید. به عنوان مثال اگر وب سرور شما توسط کاربر user_1 اجرا می شود، می توانید با استفاده از دستور زیر شناسه کاربر را پیدا کنید:

id -u www-data

بعد آن را در دستور journalctl لحاظ کنید:

journalctl _UID=33 --since today

اگر از کاربران و گروه هایی که در گزارشات مربوط به آنها در systemd اطلاع ندارید، می توانید از آپشن F استفاده کنید تا تمام کاربران یا گروه ها را به شما نمایش داده شود:

journalctl -F _GID

journalctl -F _UID

نمایش گزارشات مربوط به یک مسیر مشخص

اگر می خواهید مسیر یک فایل اجرایی در دستور journalctl لحاظ کنید تا تمام ورودی ها و گزارشات مربوط به آن را ببینید، باید مسیر آن فایل را در دستور قرار دهید. به عنوان مثال برای دسترسی به تمام گزارشاتی که شامل فایل اجرای bash هستند، می توانید از دستور زیر استفاده کنید:

journalctl /usr/bin/bash

اطلاع از میزان فضای مصرفی توسط گزارشات

با استفاده از آپشن یا فلگ disk-usage می توانید از میزان فضای مصرفی ژورنال فعلی اطلاع پیدا کنید:

journalctl --disk-usage

حالا اگر می خواهید مقداری از این فضا را آزاد کنید، باید از آپشن vacuum-size استفاده کنید. در واقع، این آپشن ورودی ها قدیمی را حذف می کند که برای این کار هم از دو روش استفاده می کند.

۱) مقدار فضای درخواستی را آزاد می کند:

 journalctl --vacuum-size=1G

۲) ورودی هایی که از یک زمان خاص ایجاد شده را حذف کند (مثال ورودی های یک سال پیش):

 journalctl --vacuum-time=1years

حذف هشدارها و پیام های اطلاعاتی نامربوط از گزارشات

اگر فقط می خواهید پیام های اصلی را مشاهده کنید و نیازی به هشدارهای نامربوط ندارید، کافیست آپشن q و quiet را در دستور journalctl لحاظ کنید:

journalctl --quiet

* سعی کنید این آپشن ها را در دستور journalctl ترکیب کنید تا اینکه خروجی را شکل دلخواه خود سفارشی سازی کنید.

برای آشنایی با آپشن های دیگر هم می توانید از دستور زیر استفاده کنید:

journalctl --help

سخن آخر

دستور journalctl در لینوکس یکی از بهترین جایگزین ها برای دستور syslog است که با استفاده از آن می توانید گزارشات جمع آوری شده از منابع و سرویس های مختلف سیستم را بررسی و تجزیه و تحلیل کنید. ما سعی کردیم در این مقاله تمام آپشن های لازم برای فیلتر یا سفارشی سازی خروجی گزارشات را در اختیار شما قرار دهیم تا از این دستور به طور موثر استفاده کنید. امیداوریم که با استفاده از ویژگی های پیشرفته دستورjournalctl، تمام مسائل سیستم یا سرور لینوکسی خود را در سریع ترین حالت ممکن شناسایی و برطرف کنید.

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

مطالب مشابهی که شاید علاقمند باشید

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

دیدگاه های شما

برای دریافت این مقاله لطفا ایمیلتان را وارد کنید

می توانید مقاله را دانلود کنید یا پرینت بگیرید