ابزار کاربر

ابزار سایت


terminal:j:how-to-use-journalctl-to-view-and-manipulate-systemd-logs

دستور Journalctl برای نمایش و ویرایش لاگ های systemd

مقدمه

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

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

ایده کلی

یکی از انگیزه های مربوط به systemd journal ، متمرکز کردن مدیریت لاگها مربوطه صرفنظر از اینکه منشاء پیام ها کجا هستند. از آنجا که بخش اعظمی از فرآیند بوت شدن و مدیریت سرویس ها توسط فرآیند systemd اداره می شود ، منطقی است که روش جمع آوری و دسترسی به لاگهای مربوطه را استاندارد سازی کنیم. journald داده ها را از کلیه منابع موجود جمع آوری می کند و آنها را در قالب باینری برای دستکاری آسان و پویا ذخیره می کند.

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

تنظیم زمان سیستم

یکی از مزایای استفاده از یک Journal باینری برای ورود به سیستم ، امکان مشاهده سوابق ورود به سیستم در UTC یا زمان محلی است. به طور پیش فرض ، systemd نتایج را به وقت محلی نشان می دهد.

به همین دلیل قبل از شروع کار با Journal ، مطمئن خواهیم شد که منطقه زمانی درست تنظیم شده باشد. مجموعه systemd در واقع با ابزاری به نام timedatectl همراه است که می تواند در این امر کمک کند.

ابتدا ، ببینید که چه محدوده های زمانی در دسترس هستند:

timedatectl list-timezones

با این کار منطقه های زمانی موجود در سیستم شما لیست می شوند. وقتی یکی از منطقه های زمانی را که مطابق سیستم یا سرور خود دیدید ، می توانید با استفاده از گزینه set-timezone آن را تنظیم کنید:

sudo timedatectl set-timezone zone

برای اطمینان از اینکه سیستم شما اکنون از زمان صحیح استفاده می کند ، از دستور timedatectl به تنهایی یا با گزینه status استفاده کنید. خروجی باید چیزی شبیه زیر باشد:

timedatectl status
               Local time: چهارشنبه 2019-10-02 13:41:44 +0330
           Universal time: چهارشنبه 2019-10-02 10:11:44 UTC
                 RTC time: چهارشنبه 2019-10-02 10:11:45
                Time zone: Asia/Tehran (+0330, +0330)
System clock synchronized: no
              NTP service: active
          RTC in local TZ: no

خط اول باید زمان صحیح را نشان دهد.مشاهده اولیه ورود به سیستم

مشاهده اولیه لاگهای سیستم

برای دیدن گزارش هایی که Journal جمع آوری کرده است ، از دستور Journalctl استفاده کنید.

هنگامی که به تنهایی استفاده می شود ، هر ورودی Journal که در سیستم است در صفحه نمایش میدهد، قدیمی ترین ها اول نمایش داده میشوند:

journalctl
-- Logs begin at Fri 2019-05-24 19:55:20 +0430, end at Wed 2019-10-02 13:46:02 >
مه 24 19:55:20 linuxsolus systemd[842]: Reached target Timers.
مه 24 19:55:20 linuxsolus systemd[842]: Starting D-Bus User Message Bus Socket.
مه 24 19:55:20 linuxsolus systemd[842]: Reached target Paths.
مه 24 19:55:20 linuxsolus systemd[842]: Listening on D-Bus User Message Bus Soc>
مه 24 19:55:20 linuxsolus systemd[842]: Reached target Sockets.
مه 24 19:55:20 linuxsolus systemd[842]: Reached target Basic System.
مه 24 19:55:20 linuxsolus systemd[842]: Starting Initialise XDG User Directorie>
مه 24 19:55:20 linuxsolus systemd[842]: Started Initialise XDG User Directories.
مه 24 19:55:20 linuxsolus systemd[842]: Reached target Default.
مه 24 19:55:20 linuxsolus systemd[842]: Startup finished in 50ms.
مه 24 19:55:20 linuxsolus systemd[842]: Started D-Bus User Message Bus.
مه 24 19:55:20 linuxsolus dbus-daemon[857]: [session uid=1000 pid=857] Activati>
مه 24 19:55:20 linuxsolus systemd[842]: Starting Virtual filesystem service...
مه 24 19:55:20 linuxsolus dbus-daemon[857]: [session uid=1000 pid=857] Successf>

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

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

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

اگر می خواهید نشانگرهای زمانی را با ساعت جهانی نمایش دهید ، می توانید از پارامتر utc– استفاده کنید:

journalctl --utc
-- Logs begin at Fri 2019-05-24 15:25:20 UTC, end at Wed 2019-10-02 10:22:40 UT>
مه 24 15:25:20 linuxsolus systemd[842]: Reached target Timers.
مه 24 15:25:20 linuxsolus systemd[842]: Starting D-Bus User Message Bus Socket.
مه 24 15:25:20 linuxsolus systemd[842]: Reached target Paths.
مه 24 15:25:20 linuxsolus systemd[842]: Listening on D-Bus User Message Bus Soc>
مه 24 15:25:20 linuxsolus systemd[842]: Reached target Sockets.
مه 24 15:25:20 linuxsolus systemd[842]: Reached target Basic System.
مه 24 15:25:20 linuxsolus systemd[842]: Starting Initialise XDG User Directorie>
مه 24 15:25:20 linuxsolus systemd[842]: Started Initialise XDG User Directories.
مه 24 15:25:20 linuxsolus systemd[842]: Reached target Default.
مه 24 15:25:20 linuxsolus systemd[842]: Startup finished in 50ms.
مه 24 15:25:20 linuxsolus systemd[842]: Started D-Bus User Message Bus.
مه 24 15:25:20 linuxsolus dbus-daemon[857]: [session uid=1000 pid=857] Activati>
مه 24 15:25:20 linuxsolus systemd[842]: Starting Virtual filesystem service...

فیلتر Journal توسط Time

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

نمایش لاگ های مربوط به بوت فعلی

اساسی ترین پارامتر که ممکن است روزانه از آن استفاده کنید پارامتر b- است. این همه ورودی های Journal را که از آخرین راه اندازی مجدد سیستم جمع آوری شده است ، به شما نمایش میدهد.

journalctl -b

این به شما کمک می کند اطلاعاتی را که مربوط به محیط فعلی شماست ، شناسایی و مدیریت کنید. در مواردی که از این ویژگی استفاده نمی کنید و میخواهید بیش از یک روز را به شما نمایش دهد، می بینید که هر وقت سیستم ریبوت میشود چیزی مانند زیر نمایش داده شده است:

-- Reboot --

این می تواند به شما کمک کند تا اطلاعات را به صورت منطقی جدا کنید.

Boot های قدیمی تر

معمولا بوت فعلی مورد بررسی قرار میگیرد ،ولی مطمئناً مواقعی وجود دارد که Boot های گذشته رو هم نیاز داشته باشید. این Journal می تواند اطلاعات بسیاری از Boot های قبلی را ذخیره کند ، بنابراین می توان Journal را به شکلی تنظیم کرد تا اطلاعاتی که نیاز داریم را برای ما نمایش دهد. برخی توزیع ها بطور پیش فرض ذخیره اطلاعات بوت قبلی را فعال می کنند ، در حالی که برخی دیگر این ویژگی را غیرفعال می کنند. برای فعال کردن اطلاعات بوت بصورت مداوم ، می توانید یک دایرکتوری ایجاد کنید یا اینکه فایل کانفیگ آنرا ویرایش کنید

sudo mkdir -p /var/log/journal
یا
sudo vim /etc/systemd/journald.conf

در قسمت [Journal] جلوی پارامتر =Storage کلمه persistent را بنویسید همانند نمونه زیر:

. . .
[Journal]
Storage=persistent

هنگامی که ذخیره Boot های قبلی روی سیستم شما فعال است ، journalctl برخی دستورات را برای کمک به شما در کار با Boot ها به عنوان واحد تقسیم فراهم می کند. برای دیدن Boot هایی که journald از آن اطلاع دارد ، از گزینه list-boots– با Journalctl استفاده کنید:

journalctl --list-boots

خروجی دستور بالا

-136 e493556fa880416684a6ddcad594b0c4 Fri 2019-05-24 19:55:20 +0430—Fri 2019-05-24 22:24:51 +0430
-135 7ac1e6324a1c4fe8a9b9fb68cb3f53db Sat 2019-05-25 18:40:36 +0430—Sat 2019-05-25 22:28:24 +0430
-134 eba8a881a9f4425b9b9497140040d3c1 Sun 2019-05-26 12:25:43 +0430—Sun 2019-05-26 18:46:59 +0430
-133 62d4eb20593a44afaba920a2468ddf2d Mon 2019-05-27 13:43:01 +0430—Mon 2019-05-27 17:07:48 +0430
-132 612ada7a308148979a5dd1fb9cc4b3a9 Tue 2019-05-28 17:07:20 +0430—Tue 2019-05-28 20:54:17 +0430
-131 b2c20795ca7c4752b1373dcca0d58467 Thu 2019-05-30 18:24:55 +0430—Thu 2019-05-30 23:41:21 +0430
-130 4750a6fe9e424ebaba692ea42fdb1448 Fri 2019-05-31 09:57:59 +0430—Fri 2019-05-31 23:39:02 +0430
-129 31d6a2e3cfc443f7b3a9a5b5cac7576f Sat 2019-06-01 19:20:05 +0430—Sat 2019-06-01 22:47:11 +0430
-128 e887bfb99ce449eab6cfea32fa400512 Sun 2019-06-02 15:38:52 +0430—Sun 2019-06-02 17:29:12 +0430

این خط برای هر بوت نمایش داده می شود. ستون اول شماره ردیف بوت است که می توان به راحتی به اطلاعات همان بوت دسترسی پیدا کرد. در صورت نیاز شناسه بوت در ستون دوم است. میتوانید بوت مورد نظر خودتان را بر اساس ردیف یا شناسه ببینید. به عنوان مثال ، برای دیدن journal از بوت قبلی ، از نشانگر نسبی 134- با پارامتر b- استفاده کنید:

journalctl -b -134

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

journalctl -b eba8a881a9f4425b9b9497140040d3c1

نمایش بر اساس تاریخ

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

می توانید با استفاده از گزینه های since– و until– محدودیت زمانی دلخواه را فیلتر کنید ، که ورودی های نمایش داده شده را به ترتیب قبل یا از زمان مشخص شده محدود می کنید.

مقادیر زمانی می توانند در قالب های مختلفی به دست بیایند. به مثالهای زیر دقت کنید:

YYYY-MM-DD HH:MM:SS

به عنوان مثال ، می توانیم همه لاگهایی را که از 24 May 2019 ساعت 12:25 بعد از ظهر را مشاهده کنیم:

 journalctl --since "2019-05-24 12:25:00"

اگر مولفه های تاریخ را چیزی وارد نکنید پیش فرض آن ملاک خواهد بود. به عنوان مثال ، اگر تاریخ حذف شود ، تاریخ فعلی فرض می شود. اگر زمان را وارد نکنید ، «00:00:00» (نیمه شب) جایگزین می شود. قسمت ثانیه‌ها نیز به صورت پیش فرض در «00» قرار میگیرد:

 journalctl --since "2019-05-24 12:25:00" --until "2019-05-24 12:30"

این journal همچنین مقادیر نسبی را هم درک میکند. به عنوان مثال ، می توانید از کلمات «yesterday» ، «today» ، «tomorrow» یا «now» استفاده کنید. برای به دست آوردن اطلاعات از دیروز ، می توانید تایپ کنید:

journalctl --since yesterday

فرض کنید سیستم شما از ساعت ۹ صبح تا همین یک ساعت پیش دچار مشکل شده باشد برای دیدن لاگها از دستور زیر استفاده کنید

journalctl --since 09:00 --until "1 hour ago"
terminal/j/how-to-use-journalctl-to-view-and-manipulate-systemd-logs.txt · آخرین ویرایش: 2019/10/03 11:06 توسط phoenix