در RHEL 7 همراه با systemd سرویسی به نام Journald ارائه شد که در کنار rsyslogd، وظیفه مدیریت لاگها را بر عهده دارد. به طور دقیق تر، این سرویس با ایجاد فایلهای باینری، جمع اوری و ذخیره لاگهای تولید شده توسط کرنل، پروسسهای کاربران، سرویسها و … را بر عهده دارد.
برای مشاهده وضیعت جاری این سرویس، می توان از دستور زیر استفاده کرد:
[root@ol7 ~]# systemctl status systemd-journald.service
Active: active (running) since Mon 2018-04-02 12:17:13 EDT; 9min ago
همچنین برای مشاهده لاگهایی که توسط این سرویس جمع اوری شده اند، از دستور journalctl استفاده می شود خروجی این دستور، تشابه زیادی با محتوای فایل messages و سرویس rsyslogd دارد. در زیر قسمتی از خروجی هر دو سرویس را می بینید:
[root@ol7 ~]# journalctl -n 10
Apr 02 12:37:56 ol7 root[3041]: i am usefzadeh
[root@ol7 ~]# grep usefzadeh /var/log/messages
Apr 2 12:37:56 localhost root: i am usefzadeh
همانطور که می بینید، تفاوت چندانی بین خروجی دستور journalctl و فایل messages برای یک پیام مشخص وجود ندارد ولی دستور journalctl ویژگی های ممتازی دارد که ان را از محتوای فایل messages متمایز می کند به طور مثال، این سرویس، خطاها را به صورت هایلایت و با رنگ قرمز نمایش می دهد و همچنین در صورت نیاز، همه اطلاعات بعد از boot شدن سیستم را نشان خواهد داد حتی اگر rotate صورت گرفته باشد.
از دیگر ویژگی این دستور، سوییچ و پارامترهای متنوعی هستند که مدیریت و نمایش لاگها را در سطوح مختلف اسان تر خواهند کرد. در ادامه به توضیح تعدادی از این سوییچها خواهیم پرداخت.
سوییچ n: نمایش چند خط انتهایی خروجی این ستور:
journalctl -n 5
سوییچ f: نمایش ده خط انتهایی به همراه مانیتورینگ انلاین پیامهای جدید:
journalctl -f
فیلد _SYSTEMD_UNIT: نمایش پیامهای ایجاد شده برای یک یونیت مشخص:
journalctl _SYSTEMD_UNIT=sshd.service -f
سوییچ p: نمایش لاگها بر اساس اولویت انها(debug, info, notice, warning, err, crit, alert, emerg):
journalctl –p err
فیلد since: نمایش و فیلتر لاگ ها بر اساس زمان:
journalctl -p err —since=”2018-3-20 00:44:09″ –f
journalctl -p err —since=’2 hours ago’ –f
journalctl —since=today
همچنین می توان سوییچهای زیر را هم به این مجموعه اضافه کرد:
سوییچ k: مشاهده لاگهای مربوط به کرنل
فیلد _PID: مشاهده پیامهای تولید شده توسط یک PID مشخص
سوییچ o به همراه عبارت verbose: نمایش متاداده مربوط به لاگها
فایل پیکربندی مربوط به سرویس journald، در مسیر /etc/systemd/ قرار دارد و برای هر گونه اعمال تغییرات در پیکربندی این سرویس، باید فایل journald.conf را تغییر داد.
برای مثال، در بعضی از توزیع ها، به صورت پیش فرض، لاگهای مربوط به سرویس journald در مسیر /run/log/journal ذخیره شده و بعد از reboot ماشین یا سرور، از بین خواهند رفت برای ذخیره پایدار لاگهای journal در این توزیع ها، می توان از این فایل پیکربندی استفاده کرد و پارامترهای زیر را به ان اضافه نمود:
Storage=persistent
SystemMaxUse=50M
برای اعمال تغییرات، باید سرویس را restart کرد:
systemctl restart systemd-journald
البته با تنظیم پارامتر Storage به volatile، لاگها تنها در سطح حافظه ذخیره خواهند شد و به دیسک منتقل نمی شوند.
برای تعیین میزان حجم مصرفی دیسک توسط این نوع از لاگها، می توان از دستور زیر استفاده کرد:
journalctl —disk-usage
این کار با دستور زیر هم قابل انجام است:
ls -lh /var/run/log/journal/*
پ.ن: برای مشاهده لاگها سرویس journal توسط کاربران معمولی سیستم(کاربرانی که مدیر نیستند)، باید انها را در یکی از گروهای ‘adm’, ‘systemd-journal’, ‘wheel’ قرار داد:
[root@amad1 ~]# usermod -a -G adm usef
بسیار عالی .
جناب اقای مهندس
بسیار ممنون از توضیحات خوبتان
اما سوالی که داشتم این است که ایا مراجعه به
journalctl
تمامی نیازها به دانستن لاگ را برطرف می کند؟ و نیاز به ابزار دیگری علاوه بر ان نیست؟