ابزار Journalctl برای مدیریت لاگ در لینوکس

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


چگونه از دستور Journalctl در لینوکس استفاده کنم؟

دستور journalctl در لینوکس برای کوئری و نمایش پیام‌ها از systemd  با سینتکس زیر استفاده می‌شود.


journalctl [arguments]

در این مثال، از دستور journalctl -b برای نمایش تمام پیام‌ها از بوت فعلی استفاده می‌کنیم که یک استفاده اساسی از دستور journalctl است.

journalctl -b

# Output:
# -- Logs begin at Mon 2024-02-04 14:08:01 UTC, end at Mon 2024-02-04 15:46:01 UTC. --
# FEB 06 14:08:01 localhost systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
# FEB 06 14:08:01 localhost systemd[1]: Reached target Paths.
# ...


شروع کار با  Journalctl

دستور journalctl یک ابزار همه کاره است که به شما امکان می‌دهد با ژورنال سیستم  systemd تعامل داشته باشید. برای مبتدیان، درک کاربرد اساسی برای باز کردن پتانسیل آن بسیار مهم است.

دستور پایه  Journalctl

اساسی‌ترین استفاده از دستور journalctl اجرای آن بدون هیچ گزینه‌ای است.

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

 

پیمایش در خروجی

وقتی journalctl را بدون هیچ گزینه ای اجرا می‌کنید، ژورنال کامل را در یک برنامه کوجکتر باز می‌کند و به شما امکان می‌دهد خروجی را پیمایش کنید. در اینجا برخی از دستورات ناوبری اولیه وجود دارد:

  • برای پیمایش خط به خط از کلیدهای جهت دار بالا و پایین استفاده کنید.
  • از کلیدهای Page Up و Page Down برای پیمایش یک صفحه در یک زمان استفاده کنید.
  • کلید Home را برای رفتن به ابتدای ژورنال و کلید End را برای رفتن به آخرین ورودیها فشار دهید.

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

ابزار Journalctl در لینوکس


بررسی عمیق‌تر Journalctl

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

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

مثال توضیحات آرگومان
journalctl -f ژورنال را دنبال و ورودی‌های جدید را با اضافه شدن نشان بده -f
journalctl -k فقط پیام‌های کرنل نمایش داده شود -k
journalctl -b -1 نمایش پیام‌ها از یک بوت خاص -b
journalctl -u apache.service پیام‌ها را توسط یک سرویس خاص فیلتر کن -u
journalctl -p err پیام‌ها را بر اساس اولویت فیلتر کن -p
journalctl --since "2024-02-05 14:08:01" نمایش پیام‌ها از یک زمان خاص --since
journalctl --until "2024-02-05 15:46:01" نمایش پیام‌ها تا زمان مشخص --until
journalctl -r خروجی را معکوس کن، ابتدا جدیدترین ورودی‌ها را نشان دهید. -r
journalctl -n 20 تعداد خطوط نشان داده شده را محدود کن. -n
journalctl --no-pager خروجی را به پیجر پایپ نکن. --no-pager

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

  • فیلتر کردن لاگ بر اساس زمان

یکی از موارد استفاده رایج برای journalctl فیلتر کردن لاگ‌ها بر اساس زمان است. برای مثال، اگر می‌خواهید همه لاگ‌های مربوط به ساعت گذشته را ببینید، می‌توانید از گزینه‌های --since و --until مانند زیر استفاده کنید:


journalctl --since "1 hour ago"

در این مثال، گزینه  --since "1 hour ago"  به journalctl می گوید که تمام لاگ‌های مربوط به ساعت گذشته را نشان دهد. زمانی که می‌خواهید مشکلی را که به تازگی رخ داده را عیب‌یابی کنید، می‌تواند بسیار مفید باشد.

  • فیلتر کردن لاگ بر اساس سرویس

یکی دیگر از ویژگی‌های پیشرفته journalctl امکان فیلتر کردن لاگ‌ها بر اساس سرویس است. به عنوان مثال، اگر می‌خواهید همه لاگ‌ها را از سرویس apache مشاهده کنید، می‌توانید از گزینه -u مانند زیر استفاده کنید:


journalctl -u apache.service

در این مثال، گزینه -u apache.service به journalctl می‌گوید که همه گزارش‌ها را از سرویس apache نشان دهد. این می تواند بسیار مفید باشد زمانی که می خواهید یک سرویس خاص را عیب یابی کنید.

  • فیلتر کردن لاگ بر اساس اولویت

دستور journalctl همچنین به شما امکان می دهد لاگ ها را بر اساس اولویت فیلتر کنید. به عنوان مثال، اگر می خواهید تمام لاگ‌های خطا را مشاهده کنید، می توانید از گزینه -p مانند زیر استفاده کنید:


journalctl -p err

در این مثال، گزینه -p err به journalctl می‌گوید که همه لاگ‌ها را با اولویت err یا بالاتر نشان دهد. این می‌تواند بسیار مفید باشد زمانی که می خواهید یک مشکل جدی را عیب یابی کنید.

 

جایگزین‌های Journalctl

در حالی که دستور journalctl یک ابزار قدرتمند برای مدیریت لاگ‌های سیستم در لینوکس است، اما تنها ابزار موجود نیست. در این بخش، برخی از دستورات جایگزین را بررسی خواهیم کرد که می‌توانند کارهای مشابهی را انجام دهند از جمله dmesg و syslog.

  • Dmesg: لاگ‌های رینگ بافر کرنل

دستور dmesg به شما امکان می‌دهد به Ring Buffer  کرنل،  یک ساختار داده ای که پیام های مربوط به عملکرد کرنل را ذخیره می کند، دسترسی پیدا کنید. این پیام ها می توانند به شما در رفع مشکلات سخت افزاری یا درایورها کمک کنند.

در اینجا یک مثال اساسی از نحوه استفاده از دستور dmesg آورده شده است:


dmesg | less

در این مثال dmesg | less خروجی dmesg را به کمتر منتقل می‌کند و به شما امکان می‌دهد در میان پیام‌ها پیمایش کنید. در حالی که dmesg یک ابزار قدرتمند است، برخلاف journalctl که دسترسی به گزارش‌های کل سیستم را فراهم می‌کند، فقط به پیام‌های کرنل دسترسی دارد.

  • Syslog: سیستم ثبت سنتی


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

در اینجا مثالی از نحوه مشاهده syslog در لینوکس آورده شده است:


cat /var/log/syslog | less

در این مثال، cat /var/log/syslog | less محتویات فایل syslog را نمایش می دهد. در حالی که syslog یک سیستم ثبت گزارش قوی است، برخی از ویژگی های جستجو و فیلتر پیشرفته journalctl را ندارد.

در نتیجه، در حالی که journalctl یک ابزار قدرتمند برای مدیریت گزارش‌های سیستم در لینوکس است، دستورات جایگزینی مانند dmesg و syslog وجود دارد که می‌تواند کارهای مشابهی را انجام دهد. انتخاب بین این ابزارها به نیازهای خاص شما و ماهیت مسائلی که عیب یابی می کنید بستگی دارد.

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


مشکلات و خطاهای Journalctl

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

Journalctl Command Not Found

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

برای حل این مشکل، باید systemd را نصب کنید که شامل ابزار journalctl است. در اینجا نحوه انجام این کار در یک سیستم مبتنی بر دبیان آمده است:


sudo apt-get update
sudo apt-get install systemd

در این مثال، ما از دستور sudo apt-get update برای به روز رسانی لیست های بسته برای ارتقاء و نصب بسته های جدید استفاده می کنیم. سپس از دستور sudo apt-get install systemd برای نصب systemd استفاده می کنیم که شامل ابزار journalctl می شود.

No Journal Files Were Found

اگر journalctl را تایپ کنید و خطای No journal files were found دریافت کنید، به این معنی است که systemd journal در سیستم شما فعال نیست. این مشکل می تواند در سیستم هایی رخ دهد که از rsyslog به جای systemd journal استفاده می شود.

برای حل این مشکل، باید systemd journal را فعال کنید. در اینجا نحوه انجام آن آمده است:

sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal

در این مثال، ما از دستور sudo mkdir -p /var/log/journal برای ایجاد دایرکتوری journal استفاده می کنیم. سپس از دستور sudo systemd-tmpfiles --create --prefix /var/log/journal برای ایجاد فایل های لازم برای systemd journal استفاده می کنیم.

خروجی Journalctl بیش از حد گویا

اگر خروجی دستور journalctl را خیلی پرمخاطب (verbose) می‌دانید، می‌توانید از گزینه‌های مختلف برای فیلتر کردن و قالب‌بندی خروجی استفاده کنید. برای مثال، می‌توانید از گزینه -p برای فیلتر کردن گزارش‌ها بر اساس اولویت، گزینه‌های --since و -until برای فیلتر کردن گزارش‌ها بر اساس زمان، یا گزینه -u برای فیلتر کردن گزارش‌ها بر اساس سرویس استفاده کنید.

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

Systemd Journal: هسته لاگ لینوکس

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

نقش systemd journal

 systemd journal نقش مهمی در مدیریت گزارش های سیستم ایفا می کند. پیام‌ها را از تمام منابع موجود جمع‌آوری می‌کند و آنها را در یک مکان مرکزی ذخیره می‌کند و یک سیستم ثبت یکپارچه را ارائه می‌دهد. این رویکرد متمرکز برای ورود به سیستم، عیب‌یابی مشکلات و نظارت بر فعالیت سیستم را آسان‌تر می‌کند.

systemd journal باینری است و در /run/log/journal/ برای لاگ‌های  volatile و /var/log/journal/ برای گزارش‌های مداوم ذخیره می‌شود. گزارش‌های باینری مزایای متعددی نسبت به گزارش‌های مبتنی بر متن (text-based) دارند، از جمله عملکرد بهتر، مهرهای زمانی دقیق‌تر و توانایی ذخیره داده‌های ساخت‌یافته.

نحوه تعامل Journalctl با Systemd Journal

دستور journalctl ابزار اصلی برای تعامل با systemd journal است  که امکان می دهد تا لاگ‌های جمع آوری شده توسط systemd journal را جستجو و نمایش دهید. در اینجا مثالی از نحوه استفاده از journalctl برای نمایش همه گزارش‌ها از بوت فعلی آورده شده است:


journalctl -b

# Output:
# -- Logs begin at Mon 2021-05-24 14:08:01 PDT, end at Mon 2021-05-24 15:46:01 PDT. --
# FEB 5 14:08:01 localhost systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
# FEB 5 24 14:08:01 localhost systemd[1]: Reached target Paths.
# ...

در این مثال، گزینه -b به journalctl می‌گوید که همه گزارش‌ها را از بوت فعلی نمایش دهد. خروجی شامل یک timestamp ، نام میزبان سیستم، فرآیند تولید پیام و خود پیام است.

توضیحات تکمیلی درباره  Systemd Journal

در حالی که systemd journal و فرمان journalctl ابزارهای قدرتمندی برای مدیریت لاگ‌های سیستم هستند، اما تنها بخشی از اکوسیستم لاگ لینوکس گسترده‌تر هستند. ابزارهای دیگر مانند syslog و dmesg نیز نقش مهمی در جمع آوری و مدیریت لاگ ها دارند. انتخاب ابزار به نیازهای خاص شما و ماهیت گزارش هایی که با آنها کار می کنید بستگی دارد.

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

استفاده از Journalctl در موارد دیگر

دستور journalctl اگرچه به خودی خود قدرتمند است، می‌تواند بخشی جدایی ناپذیر از اسکریپت‌ها یا پروژه‌های بزرگ‌تر باشد و بینش‌های ارزشمندی در مورد رویدادهای سیستم ارائه دهد و به عیب‌یابی کمک کند.

ادغام Journalctl در اسکریپت ها

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


#!/bin/bash

# Check for error messages in the last hour
errors=$(journalctl --since "1 hour ago" -p err)

# If there are any errors, send an alert
if [[ -n $errors ]]; then
    echo "Error Alert: $errors" | mail -s "System Error Detected" admin@example.com
fi


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

دستورات تکمیلی

علاوه بر journalctl، چندین دستور دیگر وجود دارد که اغلب در موارد استفاده معمولی آن را همراهی می‌کنند. به عنوان مثال، دستور systemctl که برای کنترل سیستم systemd و مدیر سرویس استفاده می شود، اغلب همراه با journalctl برای مدیریت خدمات سیستم استفاده می شود.
در اینجا نمونه ای از نحوه استفاده از systemctl و journalctl با هم برای راه اندازی مجدد یک سرویس و بررسی گزارش های آن آورده شده است:

# Restart the apache service
sudo systemctl restart apache.service

# Check the apache service logs
journalctl -u apache.service

در این مثال ابتدا از دستور systemctl restart apache.service برای راه اندازی مجدد سرویس apache استفاده می کنیم. سپس، از دستور journalctl -u apache.service برای بررسی گزارش‌های سرویس apache استفاده می‌کنیم.


جمع بندی

در این راهنمای جامع، دستور journalctl را در لینوکس، ابزاری ضروری برای مدیریت گزارش‌های سیستم، بررسی کرده‌ایم.

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

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

در اینجا یک مقایسه سریع از روش هایی که در مورد آن بحث کردیم آورده شده است:

متد مزایا معایب
journalctl     قدرتمند، همه کاره، از بسیاری از فیلترها پشتیبانی می‌کند می‌تواند پرحرف(verbose) باشد، برای تسلط به تمرین نیاز دارد
dmesg     دسترسی به پیام‌های کرنل فقط پیام‌های کرنل را ارائه می‌دهد
syslog     قوی، به طور گسترده استفاده می‌شود فاقد ویژگی‌های کوئری و فیلتر پیشرفته است


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

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