برخی از برجسته ترین مزایای استفاده از 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...
اگرچه دستیابی به چنین مجموعه بزرگی از داده ها قطعاً مفید است ، اما چنین مقدار زیادی از اطلاعات برای چک و بررسی شاید غیرممکن یا خیلی مشکل است. به همین دلیل یکی از مهمترین ویژگی های journalctl پارامترهای آن است.
اساسی ترین پارامتر که ممکن است روزانه از آن استفاده کنید پارامتر b- است. این همه ورودی های Journal را که از آخرین راه اندازی مجدد سیستم جمع آوری شده است ، به شما نمایش میدهد.
journalctl -b
این به شما کمک می کند اطلاعاتی را که مربوط به محیط فعلی شماست ، شناسایی و مدیریت کنید. در مواردی که از این ویژگی استفاده نمی کنید و میخواهید بیش از یک روز را به شما نمایش دهد، می بینید که هر وقت سیستم ریبوت میشود چیزی مانند زیر نمایش داده شده است:
-- Reboot --
این می تواند به شما کمک کند تا اطلاعات را به صورت منطقی جدا کنید.
معمولا بوت فعلی مورد بررسی قرار میگیرد ،ولی مطمئناً مواقعی وجود دارد که 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"