systemd জার্নাল এবং journalctl লগিং-এ পরিচিতি
systemd-এর সবচেয়ে আকর্ষণীয় সুবিধাগুলোর মধ্যে রয়েছে প্রসেস এবং সিস্টেম লগিং-এ 이ব革命। অন্যান্য টুল ব্যবহার করার সময়, লগগুলো সাধারণত সিস্টেমের সর্বত্র ছড়িয়ে থাকে, ভিন্ন ডিমন এবং প্রসেস দ্বারা হ্যান্ডেল হয়, এবং একাধিক অ্যাপ্লিকেশন জুড়ে ফেলা হলে সেগুলো ইন্টারপ্রেট করা কঠিন হয়। systemd এই সমস্যাগুলো সমাধান করার জন্য কernel এবং ইউজারল্যান্ড প্রসেসের সকল লগের সেন্ট্রালাইজ্ড ম্যানেজমেন্ট সমাধান প্রদান করে। লগ সংগ্রহ এবং ম্যানেজমেন্ট করার এই সিস্টেমকে জার্নাল বলা হয়।
জার্নালটি journald ডিমন দ্বারা ইমপ্লিমেন্ট করা হয়, যা কernel, initrd, সার্ভিসেস ইত্যাদি দ্বারা উত্পন্ন সকল মেসেজ হ্যান্ডেল করে। এই গাইডে আমরা journalctl ইউটিলিটি কীভাবে ব্যবহার করবেন তা আলোচনা করব, যা জার্নালের মধ্যে থাকা ডেটা অ্যাক্সেস এবং ম্যানিপুলেট করতে ব্যবহার করা হয়।
এই আর্টিকেলে আপনি শিখবেন কিভাবে journalctl কমান্ড-লাইন টুল ব্যবহার করে systemd জার্নাল থেকে লগ ডেটা অ্যাক্সেস এবং ফিল্টার করবেন। আমরা কভার করব কিভাবে নির্দিষ্ট বুট বা টাইম রেঞ্জ থেকে লগ দেখতে হয়, সিস্টেম ইউনিট, ইউজার, বা প্রায়োরিটি লেভেল অনুযায়ী ফিল্টার করতে হয়, এবং JSON মতো ফরম্যাটে লগ আউটপুট করে অন্যান্য টুলের সাথে ইন্টিগ্রেট করতে হয়। আপনি রিয়েল-টাইম ইভেন্ট মনিটরিং, ডিস্ক ইউজ ম্যানেজমেন্ট, পারসিস্টেন্ট লগিং কনফিগারেশন, এবং সাধারণ সমস্যা যেমন মিসিং লগ বা পারমিশন এরর সমাধান করার পদ্ধতিও শিখবেন। সার্ভিস ফেইল্যার ডিবাগ করা হোক বা সেন্ট্রালাইজড লগ কলেকশন সেটআপ করা হোক—journalctl আপনার ওয়ার্কফ্লো সুবিধাজনক बनाने کے लिए নমনীয়তা এবং নির্ভুলতা প্রদান করে।
মূল পয়েন্টসমূহ
systemdজার্নাল একটি ইউনিফাইড লগিং সিস্টেম প্রদান করে যা কernel, সার্ভিসেস, এবং ইউজার অ্যাপ্লিকেশন থেকে মেসেজ এক কেন্দ্রীয়, ইনডেক্সড লগে সংগ্রহ করে।journalctlকমান্ড আপনাকে বুট সেশন, টাইম রেঞ্জ, systemd ইউনিট, প্রসেস আইডি, ইউজার আইডি, গ্রুপ আইডি, এবং আরও অনেক কিছু অনুযায়ী লগ ফিল্টার করতে দেয়, যা প্রাসঙ্গিক ইভেন্ট চিহ্নিত করা সহজ করে।- আপনি
--since,--until, বা রিলেটিভ এক্সপ্রেশন যেন"1 hour ago"বা"yesterday"ব্যবহার করে নির্দিষ্ট টাইম উইন্ডো থেকে লগ রিট্রিভ করতে পারেন। - লগগুলো ভিন্ন ভিন্ন ফরম্যাটে ডিসপ্লে করা যায় যেন প্লেইন টেক্সট, JSON, এবং ভার্বোস মোড, যা এক্সটার্নাল টুলের সাথে ইন্টিগ্রেশন বা বিশ্লেষণের জন্য পার্সিং সহজ করে।
journalctl -fব্যবহার করে আপনি লাইভ লগ মেসেজ ফলো করতে পারেন যেমন সেগুলো লেখা হচ্ছে,tail -f-এর মতো, যা সিস্টেম অ্যাক্টিভিটি বা সার্ভিস বিহেভিয়ার রিয়েল-টাইম মনিটরিং-এ উপকারী।- ডিফল্টভাবে লগ মেমরিতে স্টোর হতে পারে এবং রিবুটে হারিয়ে যেতে পারে। আপনি
/var/log/journalতৈরি করে এবংjournald.confকনফিগার করে পারসিস্টেন্ট লগিং ইনেবল করতে পারেন। - জার্নালের স্টোরেজ ফুটপ্রিন্ট
--disk-usage,--vacuum-size, এবং--vacuum-timeকমান্ড এবং কনফিগারেশন অপশন দিয়ে ম্যানেজ করা যায় যেন ম্যাক্সিমাম সাইজ এবং রিটেনশন কন্ট্রোল করা যায়। journalctlসার্ভিস ডিবাগিং সহজ করে তোলে বুট এবং ইউনিট জুড়ে লগ এগরিগেট করে, যা ফেইলার চিহ্নিত করা, SSH অ্যাক্সেস ট্র্যাক করা, এবং বিস্তারিত কন্টেক্সট সহ সমস্যা ইনভেস্টিগেট করা সহজ করে।
systemd জার্নাল কীভাবে কাজ করে এবং কেন এটি গুরুত্বপূর্ণ
systemd জার্নালের পেছনে একটি প্রধান উদ্দেশ্য হল লগের ম্যানেজমেন্ট সেন্ট্রালাইজ করা যেন মেসেজ কোথা থেকে আসছে সেটি بغض کیا যায়। যেহেতু বুট প্রসেস এবং সার্ভিস ম্যানেজমেন্টের অনেকাংশ systemd প্রসেস দ্বারা হ্যান্ডেল হয়, তাই লগ কীভাবে সংগ্রহ এবং অ্যাক্সেস করা হবে সেটি স্ট্যান্ডার্ডাইজ করা যৌক্তিক। journald ডিমন সব উপলব্ধ সোর্স থেকে ডেটা সংগ্রহ করে এবং বাইনারি ফরম্যাটে স্টোর করে সহজ এবং ডাইনামিক ম্যানিপুলেশনের জন্য।
এটি আমাদের অনেক বড় সুবিধা দেয়। একটি সিঙ্গল ইউটিলিটি ব্যবহার করে ডেটার সাথে ইন্টারঅ্যাক্ট করলে, অ্যাডমিনিস্ট্রেটররা তাদের প্রয়োজন অনুযায়ী ডাইনামিক্যালি লগ ডেটা ডিসপ্লে করতে পারেন। এটি যেন তিনটি বুট আগের বুট ডেটা দেখার মতো সহজ হতে পারে, বা দুটি সম্পর্কিত সার্ভিস থেকে লগ এন্ট্রি ক্রোনোলজিক্যালি কম্বাইন করা যাতে কমিউনিকেশন ইস্যু ডিবাগ করা যায়।
লগ ডেটা বাইনারি ফরম্যাটে স্টোর থাকা মানে ডেটা আপনার ওই মুহূর্তের প্রয়োজন অনুযায়ী আপনন কিছু আউটপুট ফরম্যাটে ডিসপ্লে করা যায়। উদাহরণস্বরূপ, দৈনন্দিন লগ ম্যানেজমেন্টের জন্য আপনি স্ট্যান্ডার্ড syslog ফরম্যাটে লগ দেখতে অভ্যস্ত থাকতে পারেন, কিন্তু যদি পরে সার্ভিস ইন্টারাপশন গ্রাফ করতে চান, তবে আপনি প্রতিটি এন্ট্রিকে JSON অবজেক্ট আউটপুট করতে পারেন যাতে আপনার গ্রাফিং সার্ভিস সেটি কনসাম করতে পারে। যেহেতু ডেটা প্লেইন টেক্সটে ডিস্কে লেখা হয় না, আপনি যখন অন্য ফরম্যাট চান তখন কোনো কনভারশন দরকার নেই।
systemd জার্নাল যেকোনো এক্সিস্টিং syslog ইমপ্লিমেন্টেশনের সাথে ব্যবহার করা যায়, অথবা syslog ফাংশনালিটি রিপ্লেস করতে পারে, আপনার প্রয়োজন অনুযায়ী। systemd জার্নাল অধিকাংশ অ্যাডমিনিস্ট্রেটরের লগিং প্রয়োজন পূরণ করবে, তবে এটি এক্সিস্টিং লগিং মেকানিজমের পূরকও হতে পারে। উদাহরণস্বরূপ, আপনার একটি সেন্ট্রালাইজড syslog সার্ভার থাকতে পারে যেটি একাধিক সার্ভার থেকে ডেটা কম্পাইল করে, কিন্তু আপনি একটি সিঙ্গল সিস্টেমে একাধিক সার্ভিসের লগ systemd জার্নাল দিয়ে ইন্টারলিভ করতে চাইতে পারেন। আপনি উভয় টেকনোলজি কম্বাইন করে এই দুটোই করতে পারেন।
timedatectl ব্যবহার করে সঠিক সিস্টেম টাইম সেট করা
বাইনারি জার্নাল ব্যবহার করে লগিং-এর একটি সুবিধা হল লগ রেকর্ড UTC বা লোকাল টাইমে যেকোনো সময় দেখতে পাওয়া যায়। ডিফল্টভাবে, systemd রেজাল্ট লোকাল টাইমে দেখায়।
এই কারণেই, জার্নাল দিয়ে শুরু করার আগে, আমরা টাইমজোন সঠিকভাবে সেট আপ আছে কিনা নিশ্চিত করব। systemd স্যুটে আসলে timedatectl নামে একটি টুল থাকে যা এই কাজে সাহায্য করে।
প্রথমে, `list-timezones` অপশন দিয়ে উপলব্ধ টাইমজোনগুলো দেখুন:
timedatectl list-timezones
এটি আপনার সিস্টেমে উপলব্ধ টাইমজোনগুলো লিস্ট করবে। আপনার সার্ভারের লোকেশন সাথে মিলে যাওয়া টাইমজোন পাওয়ার পর, `set-timezone` অপশন দিয়ে সেট করুন:
sudo timedatectl set-timezone zone
আপনার মেশিন সঠিক টাইম ব্যবহার করছে কিনা নিশ্চিত করতে, `timedatectl` কমান্ড একা বা `status` অপশন দিয়ে ব্যবহার করুন। ডিসপ্লে একই হবে:
timedatectl status
Local time: Fri 2021-07-09 14:44:30 EDT Universal time: Fri 2021-07-09 18:44:30 UTC RTC time: Fri 2021-07-09 18:44:31 Time zone: America/New_York (EDT, -0400) System clock synchronized: yes NTP service: active RTC in local TZ: no
প্রথম লাইনে সঠিক টাইম ডিসপ্লে হওয়া উচিত।
journalctl ব্যবহার করে লগ দেখা
journald ডিমন দ্বারা সংগ্রহ করা লগ দেখতে, journalctl কমান্ড ব্যবহার করুন।
যখন একা ব্যবহার করা হয়, সিস্টেমে থাকা প্রতিটি জার্নাল এন্ট্রি একটি পেজার (সাধারণত less) এ ডিসপ্লে হবে ব্রাউজ করার জন্য। পুরনো এন্ট্রিগুলো উপরে থাকবে:
journalctl
-- Logs begin at Tue 2015-02-03 21:48:52 UTC, end at Tue 2015-02-03 22:29:38 UTC. -- Feb 03 21:48:52 localhost.localdomain systemd-journal[243]: Runtime journal is using 6.2M (max allowed 49. Feb 03 21:48:52 localhost.localdomain systemd-journal[243]: Runtime journal is using 6.2M (max allowed 49. Feb 03 21:48:52 localhost.localdomain systemd-journald[139]: Received SIGTERM from PID 1 (systemd). Feb 03 21:48:52 localhost.localdomain kernel: audit: type=1404 audit(1423000132.274:2): enforcing=1 old_en Feb 03 21:48:52 localhost.localdomain kernel: SELinux: 2048 avtab hash slots, 104131 rules. Feb 03 21:48:52 localhost.localdomain kernel: SELinux: 2048 avtab hash slots, 104131 rules. Feb 03 21:48:52 localhost.localdomain kernel: input: ImExPS/2 Generic Explorer Mouse as /devices/platform/ Feb 03 21:48:52 localhost.localdomain kernel: SELinux: 8 users, 102 roles, 4976 types, 294 bools, 1 sens, Feb 03 21:48:52 localhost.localdomain kernel: SELinux: 83 classes, 104131 rules . . .
আপনার সম্ভবত পেজ পর পেজ ডেটা স্ক্রল করতে হবে, যা হাজার হাজার লাইন লম্বা হতে পারে যদি systemd długo সময় থেকে আপনার সিস্টেমে থাকে। এটি জার্নাল ডাটাবেসে কতটুকু ডেটা উপলব্ধ সেটি প্রদর্শন করে।
ফরম্যাটটি স্ট্যান্ডার্ড syslog লগিংয়ে অভ্যস্তদের কাছে পরিচিত হবে। তবে, এটি আসলে ট্রাডিশনাল syslog ইমপ্লিমেন্টেশন থেকে বেশি সোর্স থেকে ডেটা সংগ্রহ করে। এর মধ্যে অর্লি বুট প্রসেস, কernel, initrd, এবং অ্যাপ্লিকেশন স্ট্যান্ডার্ড এরর এবং আউটপুটের লগ অন্তর্ভুক্ত। এসব সব জার্নালে উপলব্ধ।
আপনি লক্ষ্য করবেন সব টাইমস্ট্যাম্প লোকাল টাইমে দেখাচ্ছে। এখন যেহেতু আমাদের সিস্টেমে লোকাল টাইম সঠিকভাবে সেট করা আছে, তাই প্রতিটি লগ এন্ট্রি এই তথ্য ব্যবহার করছে।
আপনি যদি টাইমস্ট্যাম্প UTC-তে দেখতে চান, তবে --utc ফ্ল্যাগ ব্যবহার করুন:
journalctl --utc
journalctl ব্যবহার করে systemd লগ টাইম অনুযায়ী ফিল্টার করা
যদিও এত বড় ডেটা কালেকশনে অ্যাক্সেস থাকা নিঃসন্দেহে উপকারী, এত বেশি ইনফরমেশন ম্যানুয়ালি ইনসপেক্ট এবং প্রসেস করা কঠিন বা অসম্ভব। এই কারণেই journalctl-এর সবচেয়ে গুরুত্বপূর্ণ ফিচার হল এর ফিল্টারিং অপশন।
journalctl দিয়ে কারেন্ট বুট সেশন থেকে লগ দেখানো
এমন মৌলিক ফিল্টারের মধ্যে যা আপনি দৈনন্দিন ব্যবহার করতে পারেন, সেটি হল -b ফ্ল্যাগ। এটি সাম্প্রতিক রিবুটের পর থেকে সংগ্রহ করা সকল জার্নাল এন্ট্রি দেখাবে।
journalctl -b
এটি আপনার বর্তমান এনভায়রনমেন্টের সাথে সম্পর্কিত ইনফরমেশন চিহ্নিত এবং ম্যানেজ করতে সাহায্য করবে।
যদি আপনি এই ফিচার ব্যবহার না করে একদিনের বেশি বুট ডিসপ্লে করেন, তবে আপনি দেখবেন journalctl যখন সিস্টেম ডাউন হয়ে যায় তখন একটি লাইন ইনসার্ট করে যেটি দেখায়:
. . . -- Reboot -- . . .
এটি ইনফরমেশনকে বুট সেশন অনুযায়ী লজিক্যালি আলাদা করতে সাহায্য করে।
journalctl ব্যবহার করে প্রিভিয়াস বুট থেকে লগ অ্যাক্সেস করা
যদিও আপনি সাধারণত কারেন্ট বুট থেকে ইনফরমেশন দেখতে চান, তবে прошের বুটগুলোর ইনফরমেশনও কাজে লাগতে পারে। জার্নাল অনেক প্রিভিয়াস বুট থেকে ইনফরমেশন সংরক্ষণ করতে পারে, তাই journalctl সহজে সেগুলো ডিসপ্লে করতে পারে।
কিছু ডিস্ট্রিবিউশন ডিফল্টভাবে প্রিভিয়াস বুট ইনফরমেশন সংরক্ষণ করে, অন্যগুলো এই ফিচার ডিজেবল করে রাখে। পারসিস্টেন্ট বুট ইনফরমেশন ইনেবল করতে, আপনি হয় জার্নাল স্টোর করার ডিরেক্টরি তৈরি করতে পারেন:
sudo mkdir -p /var/log/journal
অথবা জার্নাল কনফিগারেশন ফাইল এডিট করতে পারেন:
sudo nano /etc/systemd/journald.conf
[Journal] সেকশনে, Storage= অপশনকে "persistent" সেট করে পারসিস্টেন্ট লগিং ইনেবল করুন:
/etc/systemd/journald.conf
. . . [Journal] Storage=persistent
যখন আপনার সার্ভারে প্রিভিয়াস বুট সংরক্ষণ করা ইনেবল থাকে, journalctl বুটকে একক ইউনিট হিসেবে কাজ করার জন্য কিছু কমান্ড দেয়। journald যে বুটগুলো জানে সেগুলো দেখতে, journalctl এর সাথে --list-boots অপশন ব্যবহার করুন:
journalctl --list-boots
-2 caf0524a1d394ce0bdbcff75b94444fe Tue 2015-02-03 21:48:52 UTC—Tue 2015-02-03 22:17:00 UTC -1 13883d180dc0420db0abcb5fa26d6198 Tue 2015-02-03 22:17:03 UTC—Tue 2015-02-03 22:19:08 UTC 0 bed718b17a73415fade0e4e7f4bea609 Tue 2015-02-03 22:19:12 UTC—Tue 2015-02-03 23:01:01 UTC
এটি প্রতিটি বুটের জন্য একটি লাইন ডিসপ্লে করবে। প্রথম কলাম হল বুটের অফসেট যেটি journalctl-এ বুট সহজে রেফারেন্স করার জন্য ব্যবহার করা যায়। আপসোলিউট রেফারেন্স দরকার হলে, বুট আইডি দ্বিতীয় কলামে থাকে। বুট সেশন কোন টাইমকে রেফার করে সেটি শেষের দুটি টাইম স্পেসিফিকেশন থেকে জানা যায়।
এই বুটগুলো থেকে ইনফরমেশন ডিসপ্লে করতে, আপনি প্রথম বা দ্বিতীয় কলামের ইনফরমেশন ব্যবহার করতে পারেন।
উদাহরণস্বরূপ, প্রিভিয়াস বুট থেকে জার্নাল দেখতে, -b ফ্ল্যাগের সাথে -1 রিলেটিভ পয়েন্টার ব্যবহার করুন:
journalctl -b -1
আপনি বুট আইডি ব্যবহার করেও একটি বুট থেকে ডেটা কল করতে পারেন:
journalctl -b caf0524a1d394ce0bdbcff75b94444fe
কাস্টম ডেট এবং টাইম রেঞ্জ অনুযায়ী journalctl লগ ফিল্টার করা
বুট অনুযায়ী লগ এন্ট্রি দেখা খুব উপকারী হলেও, প্রায়ই আপনি এমন টাইম উইন্ডো চান যা সিস্টেম বুটের সাথে ভালোভাবে এলাইন না করে। এটি বিশেষত লম্বা আপটাইম 가진 সার্ভারের ক্ষেত্রে সত্য।
আপনি আর্বিট্রারি টাইম লিমিট ব্যবহার করে --since এবং --until অপশন দিয়ে ফিল্টার করতে পারেন, যা যথাক্রমে দেওয়া টাইমের পর এবং আগের এন্ট্রি দেখাবে।
টাইম ভ্যালু বিভিন্ন ফরম্যাটে আসতে পারে। অ্যাবসোলিউট টাইম ভ্যালুর জন্য নিচের ফরম্যাট ব্যবহার করুন:
YYYY-MM-DD HH:MM:SS
উদাহরণস্বরূপ, ২০১৫ সালের জানুয়ারি ১০ তারিখ ৫:১৫ PM থেকে সব এন্ট্রি দেখতে চাইলে লিখুন:
journalctl --since "2015-01-10 17:15:00"
উপরের ফরম্যাটের কম্পোনেন্ট dacă ছেড়ে দেওয়া হয়, কিছু ডিফল্ট অ্যাপ্লাই হবে। উদাহরণস্বরূপ, যদি ডেট ছেড়ে দেওয়া হয়, কারেন্ট ডেট অনুমান করা হবে। যদি টাইম কম্পোনেন্ট না থাকে, "00:00:00" (মিডনাইট) সাবস্টিটিউট করা হবে। সেকেন্ড ফিল্ডও ছেড়ে দেওয়া যায় "00" ডিফল্ট করার জন্য:
journalctl --since "2015-01-10" --until "2015-01-11 03:00"
জার্নাল কিছু রিলেটিভ ভ্যালু এবং নেমড শর্টকাটও বুঝতে পারে। উদাহরণস্বরূপ, আপনি "yesterday", "today", "tomorrow", বা "now" শব্দগুলো ব্যবহার করতে পারেন। রিলেটিভ টাইমের জন্য নম্বর প্রিফিক্স হিসেবে "-" বা "+" ব্যবহার করতে পারেন বা "ago" শব্দ ব্যবহার করে সেন্টেন্স কন্সট্রাকশন করতে পারেন।
গতকালের ডেটা পেতে, লিখুন:
journalctl --since yesterday
যদি আপনি সকাল ৯:০০ बजে থেকে এক ঘন্টা আগে পর্যন্ত সার্ভিস ইন্টারাপশন রিপোর্ট পান, তবে লিখুন:
journalctl --since 09:00 --until "1 hour ago"
আপনি দেখতে পাচ্ছেন, লগ এন্ট্রি ফিল্টার করার জন্য ফ্লেক্সিবল টাইম উইন্ডো ডিফাইন করা যথাক্রমে সহজ।
সার্ভিস, PID, বা ইউজার অনুযায়ী systemd জার্নাল লগ ফিল্টার করা
উপরে, আমরা টাইম কনস্ট্রেইন্ট ব্যবহার করে জার্নাল ডেটা ফিল্টার করার কিছু পদ্ধতি শিখলাম। এই সেকশনে আমরা চर्चা করব কীভাবে আপনি যে সার্ভিস বা কম্পোনেন্টে আগ্রহী সেটি বেস করে ফিল্টার করতে পারেন। systemd জার্নাল এটি করার জন্য বিভিন্ন পদ্ধতি প্রদান করে।
Systemd সার্ভিস ইউনিট অনুযায়ী লগ দেখানো
হয়তো সবচেয়ে উপকারী ফিল্টারিং পদ্ধতি হল আপনি যে ইউনিটে আগ্রহী সেটি বেস করে। আমরা -u অপশন ব্যবহার করে এটি করতে পারি।
উদাহরণস্বরূপ, আমাদের সিস্টেমে একটি Nginx ইউনিট থেকে সকল লগ দেখতে চাইলে, লিখুন:
journalctl -u nginx.service
সাধারণত, আপনি টাইম অনুযাওও ফিল্টার করতে চাইবেন যাতে আপনি যে লাইনগুলোতে আগ্রহী সেগুলো ডিসপ্লে হয়। উদাহরণস্বরূপ, সার্ভিস আজ কীভাবে চলছে সেটি চেক করতে চাইলে লিখুন:
journalctl -u nginx.service --since today
এই ধরনের ফোকাস অত্যন্ত সহায়ক হয় যখন আপনি জার্নালের একাধিক ইউনিট থেকে রেকর্ড ইন্টারলিভ করার ক্ষমতা ব্যবহার করেন। উদাহরণস্বরূপ, আপনার Nginx প্রসেস যদি PHP-FPM ইউনিটের সাথে কানেক্টেড থাকে ডাইনামিক কন্টেন্ট প্রসেস করার জন্য, আপনি উভয় ইউনিট স্পেসিফাই করে উভয়ের এন্ট্রি ক্রোনোলজিক্যাল অর্ডারে মার্জ করতে পারেন:
journalctl -u nginx.service -u php-fpm.service --since today
এটি আলাদা প্রসেসের বদলে সিস্টেম ডিবাগ করতে সাহায্য করে কারণ এটি ভিন্ন প্রোগ্রামের ইন্টারঅ্যাকশন স্পট করা সহজ করে।
PID, UID, বা GID অনুযায়ী systemd লগ ফিল্টার করা
কিছু সার্ভিস কাজ করার জন্য বিভিন্ন চাইল্ড প্রসেস স্পন করে। আপনি যদি যে প্রসেসে আগ্রহী তার সঠিক PID খুঁজে পান, তবে সেটিও ফিল্টার করতে পারেন।
এটি করতে _PID ফিল্ড স্পেসিফাই করুন। উদাহরণস্বরূপ, যদি আগ্রহী PID ৮০৮৮ হয়, তবে লিখুন:
journalctl _PID=8088
অন্যান্য সময়, আপনি একটি নির্দিষ্ট ইউজার বা গ্রুপ থেকে লগ করা সকল এন্ট্রি দেখাতে চাইতে পারেন। এটি _UID বা _GID ফিল্টার দিয়ে করা যায়। উদাহরণস্বরূপ, আপনার ওয়েব সার্ভার যদি www-data ইউজার আন্ডারে চলে, তবে ইউজার আইডি খুঁজে বের করতে লিখুন:
id -u www-data
33
এরপর, রিটার্ন করা আইডি ব্যবহার করে জার্নাল রেজাল্ট ফিল্টার করুন:
journalctl _UID=33 --since today
systemd জার্নালে ফিল্টারিং এর জন্য অনেক ফিল্ড থাকে। 그중 কিছু লগ করা প্রসেস থেকে পাস করা হয় এবং কিছু journald দ্বারা সিস্টেম থেকে সংগ্রহ করা ইনফরমেশন ব্যবহার করে অ্যাপ্লাই করা হয়।
লিডিং আন্ডারস্কোর ইঙ্গিত দেয় যে _PID ফিল্ড দ্বিতীয় টাইপের। জার্নাল অটোমেটিক্যালি লগ করার প্রসেসের PID রেকর্ড এবং ইনডেক্স করে পরে ফিল্টার করার জন্য। আপনি সব উপলব্ধ জার্নাল ফিল্ড সম্পর্কে জানতে পারেন লিখে:
man systemd.journal-fields
এই গাইডে আমরা কিছুই ডিসকাস করব। কিন্তু এখন, ফিল্টারিং এর সাথে সম্পর্কিত একটি আরেকটি উপকারী অপশন নিয়ে আলোচনা করব। -F অপশন ব্যবহার করে একটি দiber জার্নাল ফিল্ডের সকল উপলব্ধ ভ্যালু দেখানো যায়।
উদাহরণস্বরূপ, systemd জার্নালে কোন গ্রুপ আইডিগুলোর এন্ট্রি আছে সেটি দেখতে লিখুন:
journalctl -F _GID
32 99 102 133 81 84 100 0 124 87
এটি গ্রুপ আইডি ফিল্ডের জন্য জার্নালে সংরক্ষিত সকল ভ্যালু দেখাবে। এটি আপনার ফিল্টার কনস্ট্রাক্ট করতে সাহায্য করবে।
এক্সিকিউটেবল পাথ অনুযায়ী লগ দেখানো
আমরা পাথ লোকেশন দিয়ে ফিল্টার করতে পারি।
যদি পাথটি এক্সিকিউটেবলের দিকে নিয়ে যায়, journalctl ওই এক্সিকিউটেবেল জড়িত সকল এন্ট্রি ডিসপ্লে করবে। উদাহরণস্বরূপ, bash এক্সিকিউটেবেল জড়িত এন্ট্রি খুঁজতে লিখুন:
journalctl /usr/bin/bash
সাধারণত, যদি এক্সিকিউটেবেলের জন্য ইউনিট উপলব্ধ থাকে, সেই পদ্ধতিটি ক্লিনার এবং ভালো ইনফো দেয় (এসোসিয়েটেড চাইল্ড প্রসেস থেকে এন্ট্রি ইত্যাদি)। কিন্তু কখনো কখনো এটি সম্ভব নয়।
journalctl -k ব্যবহার করে কার্নেল লগ দেখানো
কার্নেল মেসেজ, যেগুলো সাধারণত dmesg আউটপুটে পাওয়া যায়, সেগুলো জার্নাল থেকেও রিট্রিভ করা যায়।
শুধু এই মেসেজগুলো ডিসপ্লে করতে, আমরা -k বা --dmesg ফ্ল্যাগ যোগ করতে পারি:
journalctl -k
ডিফল্টভাবে, এটি কারেন্ট বুট থেকে কার্নেল মেসেজ দেখাবে। আপনি পূর্বে আলোচনা করা বুট সিলেকশন ফ্ল্যাগ ব্যবহার করে অন্য বুট স্পেসিফাই করতে পারেন। উদাহরণস্বরূপ, পাঁচটি বুট আগের মেসেজ পেতে লিখুন:
journalctl -k -b -5
journalctl -p ব্যবহার করে সেভারিটি লেভেল অনুযায়ী লগ ফিল্টার করা
সিস্টেম অ্যাডমিনিস্ট্রেটররা প্রায়শই যে ফিল্টারে আগ্রহী থাকেন সেটি হল মেসেজ প্রায়োরিটি। খুব ভার্বোস লেভেলে ইনফরমেশন লগ করা উপকারী হলেও, আসলে ইনফরমেশন ডাইজেস্ট করার সময় লো প্রায়োরিটি লগ ডিস্ট্র্যাক্টিং এবং কনফিউজিং হতে পারে।
আপনি journalctl ব্যবহার করে শুধু নির্দিষ্ট প্রায়োরিটি বা তার উপরের মেসেজ ডিসপ্লে করতে পারেন -p অপশন ব্যবহার করে। এটি লোয়ার প্রায়োরিটি মেসেজ ফিল্টার আউট করে।
উদাহরণস্বরূপ, শুধু error লেভেল বা তার উপরের এন্ট্রি দেখতে চাইলে লিখুন:
journalctl -p err -b
এটি error, critical, alert, বা emergency মার্ক করা সকল মেসেজ দেখাবে। জার্নাল স্ট্যান্ডার্ড syslog মেসেজ লেভেল ইমপ্লিমেন্ট করে। আপনি প্রায়োরিটি নাম বা এর করেসপন্ডিং নিউমেরিক ভ্যালু যেকোনোটি ব্যবহার করতে পারেন। হাইএস্ট থেকে লোয়ারেস্ট প্রায়োরিটির ক্রমে এগুলো হল:
- 0: emerg
- 1: alert
- 2: crit
- 3: err
- 4: warning
- 5: notice
- 6: info
- 7: debug
উপরের নম্বর বা নাম -p অপশনের সাথে ইন্টারচেন্জেবলি ব্যবহার করা যায়। একটি প্রায়োরিটি সিলেক্ট করলে নির্দিষ্ট লেভেল এবং তার উপরের লেভেলগুলোতে মার্ক করা মেসেজ ডিসপ্লে হবে।
journalctl লগ আউটপুট ডিসপ্লে কাস্টমাইজ করা
উপরে, আমরা ফিল্টারিং ব্যবহার করে এন্ট্রি সিলেকশন প্রদর্শন করেছি। আউটপুট মডিফাই করার অন্যান্য পদ্ধতিও আছে। আমরা journalctl ডিসপ্লে বিভিন্ন প্রয়োজনে ফিট করার জন্য অ্যাডজাস্ট করতে পারি।
journalctl-এ আউটপুট লেন্থ এবং ফরম্যাটিং কন্ট্রোল করা
আমরা journalctl কীভাবে ডেটা ডিসপ্লে করে সেটি বলে দিয়ে অ্যাডজাস্ট করতে পারি আউটপুট ছোট বা বড় করার জন্য।
ডিফল্টভাবে, journalctl পেজারে পুরো এন্ট্রি দেখাবে, এন্ট্রিগুলো স্ক্রিনের ডান দিকে ট্রেইল করতে দেবে। এই ইনফো ডান অ্যারো কী চাপলে অ্যাক্সেস করা যায়।
আপনি যদি আউটপুট ট্রানকেটেড দেখাতে চান, যেখানে ইনফো রিমুভ করা হয়েছে সেখানে এলিপসিস ইনসার্ট করতে চান, তবে --no-full অপশন ব্যবহার করুন:
journalctl --no-full
. . . Feb 04 20:54:13 journalme sshd[937]: Failed password for root from 83.234.207.60...h2 Feb 04 20:54:13 journalme sshd[937]: Connection closed by 83.234.207.60 [preauth] Feb 04 20:54:13 journalme sshd[937]: PAM 2 more authentication failures; logname...ot
আপনি এর বিপরীতও করতে পারেন, journalctl-কে বলে দিয়ে সকল ইনফো ডিসপ্লে করতে, আপনপ্রিন্টেবল ক্যারেক্টার থাকা সত্ত্বেও। এটি -a ফ্ল্যাগ দিয়ে করা যায়:
journalctl -a
journalctl আউটপুটে পেজার ডিজেবল করা
ডিফল্টভাবে, journalctl আউটপুট পেজারে ডিসপ্লে করে সহজ কনসাম্পশনের জন্য। কিন্তু আপনি যদি ডেটা টেক্সট ম্যানিপুলেশন টুল দিয়ে প্রসেস করার পরিকল্পনা করেন, তবে স্ট্যান্ডার্ড আউটপুটে আউটপুট করার ক্ষমতা দরকার।
এটি --no-pager অপশন দিয়ে করা যায়:
journalctl --no-pager
এটি অবিলম্বে একটি প্রসেসিং ইউটিলিটিতে পাইপ করা যায় বা ডিস্কে একটি ফাইলে রিডাইরেক্ট করা যায়, আপনার প্রয়োজন অনুযায়ী।
journalctl-এ ভিন্ন আউটপুট ফরম্যাট
আপনি যদি উপরে উল্লেখ করা মতো জার্নাল এন্ট্রি প্রসেস করেন, তবে ডেটা আরও কনসামেবল ফরম্যাটে থাকলে পার্স করা সহজ হবে। خوشবশত, জার্নাল প্রয়োজন অনুযায়ী ভিন্ন ভিন্ন ফরম্যাটে ডিসপ্লে করা যায়। এটি -o অপশন এবং একটি ফরম্যাট স্পেসিফায়ার দিয়ে করা যায়।
উদাহরণস্বরূপ, জার্নাল এন্ট্রি JSON-এ আউটপুট করতে লিখুন:
journalctl -b -u nginx -o json
{ "__CURSOR" : "s=13a21661cf4948289c63075db6c25c00;i=116f1;b=81b58db8fd9046ab9f847ddb82a2fa2d;m=19f0daa;t=50e33c33587ae;x=e307daadb4858635", "__REALTIME_TIMESTAMP" : "1422990364739502", "__MONOTONIC_TIMESTAMP" : "27200938", "_BOOT_ID" : "81b58db8fd9046ab9f847ddb82a2fa2d", "PRIORITY" : "6", "_UID" : "0", "_GID" : "0", "_CAP_EFFECTIVE" : "3fffffffff", "_MACHINE_ID" : "752737531a9d1a9c1e3cb52a4ab967ee", "_HOSTNAME" : "desktop", "SYSLOG_FACILITY" : "3", "CODE_FILE" : "src/core/unit.c", "CODE_LINE" : "1402", "CODE_FUNCTION" : "unit_status_log_starting_stopping_reloading", "SYSLOG_IDENTIFIER" : "systemd", "MESSAGE_ID" : "7d4958e842da4a758f6c1cdc7b36dcc5", "_TRANSPORT" : "journal", "_PID" : "1", "_COMM" : "systemd", "_EXE" : "/usr/lib/systemd/systemd", "_CMDLINE" : "/usr/lib/systemd/systemd", "_SYSTEMD_CGROUP" : "/", "UNIT" : "nginx.service", "MESSAGE" : "Starting A high performance web server and a reverse proxy server...", "_SOURCE_REALTIME_TIMESTAMP" : "1422990364737973" } . . .
এটি ইউটিলিটির সাথে পার্স করার জন্য উপকারী। আপনি json-pretty ফরম্যাট ব্যবহার করে ডেটা স্ট্রাকচার ভালোভাবে বুঝতে পারেন JSON কনসামারকে পাস করার আগে:
journalctl -b -u nginx -o json-pretty
{ "__CURSOR" : "s=13a21661cf4948289c63075db6c25c00;i=116f1;b=81b58db8fd9046ab9f847ddb82a2fa2d;m=19f0daa;t=50e33c33587ae;x=e307daadb4858635", "__REALTIME_TIMESTAMP" : "1422990364739502", "__MONOTONIC_TIMESTAMP" : "27200938", "_BOOT_ID" : "81b58db8fd9046ab9f847ddb82a2fa2d", "PRIORITY" : "6", "_UID" : "0", "_GID" : "0", "_CAP_EFFECTIVE" : "3fffffffff", "_MACHINE_ID" : "752737531a9d1a9c1e3cb52a4ab967ee", "_HOSTNAME" : "desktop", "SYSLOG_FACILITY" : "3", "CODE_FILE" : "src/core/unit.c", "CODE_LINE" : "1402", "CODE_FUNCTION" : "unit_status_log_starting_stopping_reloading", "SYSLOG_IDENTIFIER" : "systemd", "MESSAGE_ID" : "7d4958e842da4a758f6c1cdc7b36dcc5", "_TRANSPORT" : "journal", "_PID" : "1", "_COMM" : "systemd", "_EXE" : "/usr/lib/systemd/systemd", "_CMDLINE" : "/usr/lib/systemd/systemd", "_SYSTEMD_CGROUP" : "/", "UNIT" : "nginx.service", "MESSAGE" : "Starting A high performance web server and a reverse proxy server...", "_SOURCE_REALTIME_TIMESTAMP" : "1422990364737973" } . . .
নিচের ফরম্যাটগুলো ডিসপ্লে করার জন্য ব্যবহার করা যায়:
- cat: শুধু মেসেজ ফিল্ডই ডিসপ্লে করে।
- export: ট্রান্সফার বা ব্যাকআপের জন্য উপযুক্ত বাইনারি ফরম্যাট।
- json: স্ট্যান্ডার্ড JSON, প্রতি লাইনে একটি এন্ট্রি।
- json-pretty: মানব-पাঠযোগ্যতার জন্য ফরম্যাটেড JSON।
- json-sse: সার্ভার-সেন্ট ইভেন্ট কম্প্যাটিবল করার জন্য র্যাপ করা JSON আউটপুট।
- short: ডিফল্ট
syslogস্টাইল আউটপুট। - short-iso: ISO 8601 ওয়ালক্লক টাইমস্ট্যাম্প সহ ডিফল্ট ফরম্যাট।
- short-monotonic: মনোটনিক টাইমস্ট্যাম্প সহ ডিফল্ট ফরম্যাট।
- short-precise: মাইক্রোসেকেন্ড প্রিসিশন সহ ডিফল্ট ফরম্যাট।
- verbose: এন্ট্রির জন্য সব উপলব্ধ জার্নাল ফিল্ড দেখায়, যেগুলো সাধারণত ইন্টারনালি হিডেন থাকে।
এই অপশনগুলো আপনাকে জার্নাল এন্ট্রি যে ফরম্যাটে আপনার বর্তমান প্রয়োজন সেটি মোতাবেক ডিসপ্লে করতে দেয়।
journalctl ব্যবহার করে লাইভ systemd লগ মনিটর করা
journalctl কমান্ড имиটেট করে যে পদ্ধতিতে অনেক অ্যাডমিনিস্ট্রেটর tail ব্যবহার করে এক্টিভ বা সাম্প্রতিক অ্যাক্টিভিটি মনিটর করে। এই ফাংশনালিটি journalctl-এ বিল্ট-ইন, যা অন্য টুলে পাইপ ছাড়া এই ফিচার অ্যাক্সেস করতে দেয়।
journalctl -n ব্যবহার করে সাম্প্রতিক লগ এন্ট্রি দেখানো
একটি নির্দিষ্ট পরিমাণ রেকর্ড ডিসপ্লে করতে, আপনি -n অপশন ব্যবহার করতে পারেন, যা এক্স্যাক্টলি tail -n-এর মতো কাজ করে।
ডিফল্টভাবে, এটি সাম্প্রতিক ১০টি এন্ট্রি দেখাবে:
journalctl -n
আপনি কতগুলো এন্ট্রি দেখতে চান সেটি নম্বর দিয়ে স্পেসিফাই করতে পারেন -n-এর পর:
journalctl -n 20
journalctl -f ব্যবহার করে রিয়েল-টাইম লগ ফলো করা
লগ যেভাবে লেখা হচ্ছে সেটি এক্টিভলি ফলো করতে, আপনি -f ফ্ল্যাগ ব্যবহার করতে পারেন। আবার, এটি আপনার প্রত্যাশা অনুযায়ী কাজ করে যদি আপনার tail -f ব্যবহারের অভিজ্ঞতা থাকে:
journalctl -f
এই কমান্ড থেকে বের হতে, টাইপ করুন CTRL+C।
systemd জার্নাল লগ ম্যানেজ এবং ক্লিন আপ করা
আপনি হয়তো আমরা 이제 পর্যন্ত যে সকল ডেটা দেখেছি সেগুলো স্টোর করার কস্ট সম্পর্কে চিন্তা করছেন। மேலும், আপনি পুরনো লগ ক্লিন আপ করে স্পেস ফ্রি করার আগ্রহী হতে পারেন।
journalctl --disk-usage ব্যবহার করে systemd লগের ডিস্ক ইউজ চেক করা
আপনি জার্নাল বর্তমানে ডিস্কে কতটুকু স্পেস অকুপাই করছে সেটি --disk-usage ফ্ল্যাগ ব্যবহার করে জানতে পারেন:
journalctl --disk-usage
Archived and active journals take up 8.0M in the file system.
journalctl --vacuum-size এবং --vacuum-time ব্যবহার করে পুরনো লগ ডিলিট করা
আপনি যদি আপনার জার্নাল ছোট করতে চান, তবে আপনি দুটি ভিন্ন পদ্ধতিতে এটি করতে পারেন (systemd ভার্সন ২১৮ এবং পরবর্তীতে উপলব্ধ)।
আপনি যদি --vacuum-size অপশন ব্যবহার করেন, আপনি একটি সাইজ ইনডিকেট করে আপনার জার্নাল ছোট করতে পারেন। এটি পুরনো এন্ট্রি রিমুভ করবে যতক্ষণ না টোটাল জার্নাল স্পেস ডিস্কে রিকোয়েস্ট করা সাইজে আসে:
sudo journalctl --vacuum-size=1G
জার্নাল ছোট করার আরেকটি পদ্ধতি হল --vacuum-time অপশন দিয়ে একটি কাট-অফ টাইম দেওয়া। সেই টাইমের পরে যে এন্ট্রিগুলো আছে সেগুলো ডিলিট হবে। এটি আপনাকে নির্দিষ্ট টাইমের পর সৃষ্টি হওয়া এন্ট্রিগুলো রাখতে দেয়।
উদাহরণস্বরূপ, গত এক বছরের এন্ট্রি রাখতে চাইলে লিখুন:
sudo journalctl --vacuum-time=1years
Journald লগের জন্য ডিস্ক স্পেস লিমিট কনফিগার করা
আপনি আপনার সার্ভার কনফিগার করতে পারেন যাতে জার্নাল কতটুকু স্পেস নিতে পারে সেটির লিমিট থাকে। এটি /etc/systemd/journald.conf ফাইল এডিট করে করা যায়।
নিচের আইটেমগুলো জার্নাল গ্রোথ লিমিট করতে ব্যবহার করা যায়:
SystemMaxUse=: পারসিস্টেন্ট স্টোরেজে জার্নাল যে ম্যাক্সিমাম ডিস্ক স্পেস ব্যবহার করতে পারে সেটি স্পেসিফাই করে।SystemKeepFree=: পারসিস্টেন্ট স্টোরেজে জার্নাল এন্ট্রি যোগ করার সময় যে পরিমাণ স্পেস ফ্রি রাখতে হবে সেটি স্পেসিফাই করে।SystemMaxFileSize=: পারসিস্টেন্ট স্টোরেজে একটি একক জার্নাল ফাইল কত বড় হতে পারে সেটি কন্ট্রোল করে রোটেশনের আগে।RuntimeMaxUse=: ভোলেটাইল স্টোরেজে (যা/runফাইলসিস্টেমের মধ্যে) যে ম্যাক্সিমাম ডিস্ক স্পেস ব্যবহার করা যাবে সেটি স্পেসিফাই করে।RuntimeKeepFree=: ভোলেটাইল স্টোরেজে ডেটা লেখার সময় অন্যান্য ব্যবহারের জন্য যে পরিমাণ স্পেস রিজার্ভ রাখতে হবে সেটি স্পেসিফাই করে।RuntimeMaxFileSize=: ভোলেটাইল স্টোরেজে একটি একক জার্নাল ফাইল কতটুকু স্পেস নিতে পারে সেটি স্পেসিফাই করে রোটেশনের আগে।
এই ভ্যালুগুলো সেট করে, আপনি কন্ট্রোল করতে পারেন journald আপনার সার্ভারে কীভাবে স্পেস কনসাম এবং প্রিজার্ভ করবে। মনে রাখবেন SystemMaxFileSize এবং RuntimeMaxFileSize আর্কাইভড ফাইলকে টার্গেট করে স্টেটেড লিমিটে পৌঁছাতে। এটি ভ্যাকুম অপারেশনের পর ফাইল কাউন্ট ইন্টারপ্রেট করার সময় মনে রাখা গুরুত্বপূর্ণ।
সাধারণ journalctl এবং systemd জার্নাল ইস্যু ট্রাবলশুটিং
১. কেন journalctl লগ দেখাচ্ছে না?
কিছু ক্ষেত্রে, আপনি journalctl কমান্ড রান করলে লগ আউটপুট আশা করলেও ব্লাঙ্ক স্ক্রিন বা কোনো মেনিংফুল রেজাল্ট পাবেন না। এই পরিস্থিতি বিভ্রান্তিকারী হতে পারে, বিশেষ করে যদি আপনি কোনো ইস্যু ট্রাবলশুট করছেন বা সাম্প্রতিক সিস্টেম অ্যাক্টিভিটি খুঁজছেন। सौভাগ্যক্রমে, এটি ডিমিস্টিফাই করার জন্য কিছু সাধারণ ব্যাখ্যা রয়েছে।
জার্নাল ডাটাবেস খালি বা অনুপস্থিত
আউটপুট না দেখার সবচেয়ে সহজ কারণ হল জার্নাল খালি। এটি নতুন ইনস্টল করা সিস্টেম, মিনিমাল কন্টেইনার এনভায়রনমেন্ট, বা সার্ভার যেখানে সিস্টেম লগিং এখনো কোনো এন্ট্রি জেনারেট করেনি সেখানে হতে পারে। এটির ওপরérieure, আপনার সিস্টেম কনফিগার করা থাকতে পারে শুধু মেমরিতে (ভোলেটাইল স্টোরেজ) লগ স্টোর করার জন্য, যার মানে রিবুটে সব লগ মুছে যায়। পারসিস্টেন্ট লগিং ইনেবল আছে কিনা চেক করতে, journal ডিরেক্টরির প্রেজেন্স চেক করুন:
ls /var/log/journal
যদি এই ডিরেক্টরি না থাকে, বা খালি থাকে, তাহলে বোঝা যায় আপনার লগ বুটের মধ্যে সংরক্ষণ হচ্ছে না। আপনি ডিরেক্টরি তৈরি করে এবং journald সার্ভিস রিস্টার্ট করে এটি সমাধান করতে পারেন:
sudo mkdir -p /var/log/journal sudo systemd-tmpfiles --create --prefix /var/log/journal sudo systemctl restart systemd-journald
একবার পারসিস্টেন্ট লগিং ইনেবল হলে, ভবিষ্যতের লগ ডিস্কে লেখা হবে এবং রিবুট জুড়ে সংরক্ষিত থাকবে।
লগিং সার্ভিস চলছে না
একটি অন্য সম্ভাবনা হল লগিং সার্ভিস নিজে একটি এরর مواجه করেছে বা стар্ট হতে ব্যর্থ করেছে। systemd-journald সার্ভিস লগ ডেটা সংগ্রহ এবং ম্যানেজ করার জন্য দায়ী। যদি এটি রান না করে, জার্নাল স্বাভাবিকভাবে খালি থাকবে। এর স্ট্যাটাস চেক করতে:
systemctl status systemd-journald
যদি সার্ভিস ইনঅ্যাক্টিভ বা ফেইলড থাকে, এটি রিস্টার্ট করলে লগ কলেকশন ফাংশনালিটি রিস্টোর হবে।
ফিল্টার খুব নারো হতে পারে
কখনো কখনো, সমস্যা লগগুলোতে নয়, বরং আপনি কীভাবে সেগুলো অ্যাক্সেস করার চেষ্টা করছেন সেটিতে। নারো ফিল্টার ব্যবহার করা, যেন নন-ইক্সিস্টেন্ট ইউনিট নাম বা ওভারলি স্পেসিফিক টাইম রেঞ্জ, রেজাল্ট দিতে পারে না এমনকি রিলেভান্ট ডেটা থাকলেও। প্রায়শই journalctl কোনো ফ্ল্যাগ ছাড়া রান করে লগ কালেক্ট হচ্ছে কিনা কনফার্ম করা সহায়ক, তারপর প্রগ্রেসিভলি ফিল্টার অ্যাপ্লাই করা।
লগ রোটেট বা ডিলিট হয়ে গেছে
অবশেষে, মনে রাখবেন জার্নাল লগ সাইজ এবং টাইম-ভিত্তিক রিটেনশন পলিসির অধীন। পুরনো লগ যদি systemd-journald দ্বারা ভ্যাকুম হয়ে যায়, সেগুলো আর অ্যাক্সেসযোগ্য থাকবে না। আপনি জার্নাল বর্তমানে কতটুকু স্পেস ব্যবহার করছে সেটি ইনস্পেক্ট করতে পারেন:
journalctl --disk-usage
যদি আপনি আপনার সিস্টেমে জার্নাল সাইজ агреসিভলি লিমিট করে কনফিগার করে থাকেন, বা আপনি gầnে ম্যানুয়ালি ভ্যাকুম কমান্ড রান করেছেন, তবে লগ ডাটাবেস থেকে পার্জ হয়ে গেছে।
২. journalctl ব্যবহার করার সময় পারমিশন ডিনাইড
যদি আপনি রেগুলার ইউজার হিসেবে journalctl রান করলে "permission denied" মেসেজ পান, তবে আপনি একলা নন। ডিফল্টভাবে, সিস্টেম লগে অ্যাক্সেস root ইউজার এবং systemd-journal গ্রুপের সদস্যদের জন্য সীমাবদ্ধ। এই রিস্ট্রিকশন সম্ভাব্য সেনসিটিভ লগ ডেটা রক্ষা করার জন্য ডিজাইন করা, যাতে ইউজার অ্যাক্টিভিটি, সিস্টেম প্রসেস, এবং সার্ভিস ফেইল্যার সম্পর্কে ইনফো থাকতে পারে।
sudo দিয়ে journalctl রান করা
সবচেয়ে সহজ এবং সাধারণ সমাধান হল কমান্ড sudo দিয়ে রান করা। এটি কমান্ডের সময়কালের জন্য আপনার প্রিভিলেজ এলিভেট করে এবং আপনাকে সকল সিস্টেম লগ দেখতে দেয়:
sudo journalctl
যদি আপনি স্ক্রিপ্টিং বা ফ্রিকোয়েন্টলি লগ ইনস্পেক্ট করেন, বারবার sudo টাইপ করা ক্লান্তিকর হতে পারে। সেক্ষেত্রে, আপনার ইউজারকে পারমানেন্টলি জার্নাল অ্যাক্সেস দেওয়া আরও প্র্যাকটিক্যাল।
গ্রুপ মেম্বারশিপ দিয়ে ইউজার অ্যাক্সেস দেওয়া
sudo এড়াতে, আপনি আপনার ইউজারকে systemd-journal গ্রুপে যোগ করতে পারেন। এই গ্রুপ специальি নন-রুট ইউজারকে জার্নাল লগ পড়তে দেওয়ার জন্য ডিজাইন করা। আপনার ইউজারকে গ্রুপে যোগ করতে নিচের কমান্ড ব্যবহার করুন:
sudo usermod -aG systemd-journal yourusername
yourusername-কে আপনার একচুয়াল লগইন নাম দিয়ে রিপ্লেস করতে ভুলবেন না। ইউজারকে গ্রুপে যোগ করার পর, আপনাকে লগ আউট এবং লগ ইন করা আবশ্যক যাতে পরিবর্তনটি ইফেক্টিভ হয়। একবার হলে, আপনাকে journalctl এলিভেটেড প্রিভিলেজ ছাড়া রান করতে পারবেন।
জার্নাল পারমিশন ভেরিফাই করা
যদি গ্রুপ মেম্বারশিপ সমস্যা সমাধান না করে, তবে ফাইল বা ডিরেক্টরি পারমিশনে সমস্যা থাকতে পারে। /var/log/journal ডিরেক্টরিটি root অনার্ড এবং systemd-journal গ্রুপের অধীনে থাকা উচিত। গ্রুপ রিড পারমিশন সঠিকভাবে সেট থাকতে হবে, অন্যথায় সঠিক গ্রুপে থাকলেও অ্যাক্সেস ডিনাইড হবে। এটি ফিক্স করতে:
sudo chown root:systemd-journal /var/log/journal sudo chmod 2755 /var/log/journal
এই পারমিশন এবং সঠিক গ্রুপ মেম্বারশিপ থাকলে, নন-রুট ইউজার সুরক্ষিতভাবে লগ অ্যাক্সেস করতে পারবে।
৩. রিবুটের পর লগ পারসিস্ট 하지 않ছে
আপনি যদি লক্ষ্য করেন যে প্রতিবার সার্ভার রিবুট করলে লগ মুছে যাচ্ছে, তবে আপনার সিস্টেম সম্ভবত ভোলেটাইল মেমরি-এ লগ স্টোর করার জন্য কনফিগার করা, যা মেশিন পাওয়ার অফ হলে হারিয়ে যায়। এটি অনেক লিনাক্স ডিস্ট্রিবিউশন এবং কন্টেইনার এনভায়রনমেন্টে সাধারণ ডিফল্ট, বিশেষ করে যেগুলো লো ডিস্ক ইউজের জন্য অপ্টিমাইজ করা।
পারসিস্টেন্ট লগিং ইনেবল করা
রিবুট জুড়ে লগ রাখতে, আপনাকে journald কনফিগার করতে হবে পারসিস্টেন্ট স্টোরেজ ব্যবহার করার জন্য। এতে জার্নাল যে পাথে ডিস্কে লগ লিখবে সেটি তৈরি করা দরকার। পাথ /var/log/journal এই উদ্দেশ্যে ব্যবহৃত হয়। যদি এটি না থাকে, তবে তৈরি করে লগিং ডিমন রিস্টার্ট করুন:
sudo mkdir -p /var/log/journal sudo systemd-tmpfiles --create --prefix /var/log/journal sudo systemctl restart systemd-journald
এটি হলে, ভবিষ্যতের সকল লগ ডিস্কে লেখা হবে এবং সিস্টেম রিবুটেও বাঁচবে।
journald কনফিগারেশন ভেরিফাই করা
যদি ডিরেক্টরি থাকে কিন্তু লগ পারসিস্ট না করে, তবে journald কনফিগারেশন ফাইল ইনস্পেক্ট করা উচিত:
sudo nano /etc/systemd/journald.conf
এই ফাইলে, [Journal] সেকশনের অধীনে Storage= ডিরেক্টিভ খুঁজুন। যদি এটি volatile সেট করা থাকে, তবে এটিকে persistent করে দিন:
[Journal] Storage=persistent
ফাইল সেভ করে সার্ভিস রিস্টার্ট করুন পরিবর্তন অ্যাপ্লাই করার জন্য। এটা নিশ্চিত করে যে সিস্টেম এখন থেকে RAM-এর বদলে ডিস্কে লগ লিখবে।
৪. ফেইলড systemd সার্ভিস ডিবাগ করা
যখন একটি systemd-ম্যানেজড সার্ভিস স্টার্ট হতে ব্যর্থ করে বা অপ্রত্যাশিতভাবে ক্র্যাশ করে, journalctl রুট কজ চিহ্নিত করার জন্য অপরিহার্য টুল। একাধিক লগ ফাইল সার্চ করার বদলে, জার্নাল একটি সার্ভিস সংক্রান্ত সকল মেসেজ এক জায়গায় সংগ্রহ করে, মেটাডেটা, টাইমস্ট্যাম্প, এবং প্রায়োরিটি লেভেলসহ।
সার্ভিস স্ট্যাটস রিভিউ করা
ট্রাবলশুটিং-এ প্রথম ধাপ হল সার্ভিস স্ট্যাটস পরীক্ষা করা। systemctl status কমান্ড সার্ভিসের বর্তমান অবস্থার একটি স্ন্যাপশট দেয়, সাম্প্রতিক লগ এন্ট্রসহ। উদাহরণস্বরূপ:
systemctl status nginx.service
এই আউটপुट প্রায়ই তাত্ক্ষণিক সমস্যা প্রকাশ করে যেন মিসকনফিগার্ড পাথ, পারমিশন সমস্যা, বা এক্সিট কোড। এক্সিট কোড এবং সিগন্যাল ইনফো, যদি থাকে, সার্ভিস নিজে ফেইল করেছে কিনা বা সিস্টেম দ্বারা কিল করা হয়েছে সেটি নির্ধারণ করতে খুব সাহায্য করে।
পূর্ণ লগ হিস্টরি দেখানো
ফেইলড সার্ভিস সংক্রান্ত সকল লগ দেখতে, journalctl -u ফ্ল্যাগ দিয়ে ব্যবহার করুন:
journalctl -u nginx.service
এটি সার্ভিস দ্বারা জেনারেটেড মেসেজের একটি ক্রোনোলজিক্যাল ভিউ দেয়। আপনি যদি লাস্ট সিস্টেম বুটের সময় ঘটা ফেইল্যার ডায়াগনোজ করতে চান, আউটপুট শুধু সেই সেশনের জন্য লিমিট করা উপকারী:
journalctl -u nginx.service -b
ফেইল্যার কন্টেক্সট ইনভেস্টিগেট করা
আপনি প্রায়শই ফেইল্যারের আগে এবং পরে কয়েক মিনিটের লগ এন্ট্রি পড়ে সমস্যার হৃদয়ে পৌঁছাতে পারেন। টাইম-ভিত্তিক ফিল্টার ব্যবহার করে ফোকাস 좁ান করুন:
journalctl -u nginx.service --since "10 minutes ago"
এটি চিহ্নিত করতে সাহায্য করতে পারে যে সমস্যা আইসোলেটেড ছিল কিনা বা বড় সিস্টেম ইস্যুর অংশ ছিল।
গভীর বিশ্লেষণের জন্য, আপনি ভার্বোস আউটপুট বা এক্সটেনডেড এরর মেসেজ ইনেবল করতে পারেন:
journalctl -xe
এই কমান্ড প্রায়োরিটি মেসেজ এবং সাম্প্রতিক ফেইলার হাইলাইট করে, যা উপকারী হয় যখন একটি সার্ভিস স্ট্যান্ডার্ড আউটপুটে স্পষ্ট ক্লু ছেড়ে যায় না।
৫. SSH লগইন অটেম্পট মনিটর করা
SSH অধিকাংশ লিনাক্স সার্ভারের জন্য প্রাইমারি অ্যাক্সেস মেথড, যা এটিকে ব্রুট-ফোর্স অ্যাটাক, অনঅথরাইজড অ্যাক্সেস অটেম্পট, বা সাধারণ ऑডিটের জন্য একটি সাধারণ ভেক্টর বানায়। خوشবশত, journalctl সকল SSH-সংক্রান্ত অ্যাক্টিভিটি সহজে মনিটর করতে দেয়।
SSH লগ দেখানো
Systemd SSH অ্যাক্টিভিটি sshd বা ssh ইউনিটের অধীনে ট্র্যাক করে, আপনার ডিস্ট্রিবিউশনের উপর নির্ভর করে। SSH সংক্রান্ত সকল এন্ট্রি দেখতে:
journalctl -u ssh.service
বা, কিছু সিস্টেমে:
journalctl -u sshd.service
এই লগগুলোতে লগইন অটেম্পট, অথেনটিকেশন ফেইল্যার, সেশন ক্লোজার, এবং কি নেগোশिएশন মেসেজ থাকে। সার্ভার কে অ্যাক্সেস করেছে এবং কখন সেটি ভেরিফাই করার জন্য এটি চমৎকার ফাস্ট Стеপ।
রিয়েল-টাইমে SSH অ্যাক্টিভিটি ফলো করা
রিয়েল-টাইম মনিটরিং-এর জন্য, আপনি journalctl ফলো মোডে ব্যবহার করতে পারেন। এটি বিশেষত উপকারী যদি আপনি ইন্ট্রুশন সাস্পেক্ট করেন বা এক্টিভ লগইন অটেম্পটের ওপর নজর রাখতে চান:
journalctl -f -u ssh.service
প্রতিটি নতুন লগইন ইভেন্ট লাইভ olarak প্রিন্ট হবে, যা ফেইলড লগইন বা র্যাপিড কানেকশন অটেম্পট স্পট করা সহজ করে যেন ম্যালিশিয়াস বিহেভিয়ার ইন্ডিকেট করতে পারে।
লগইন ইভেন্ট অনুযায়ী ফিল্টার করা
আপনি যদি স্পেসিফিক লগইন মেসেজ খুঁজেন, যেন ফেইলড পাসওয়ার্ড বা অ্যাকসেপ্টেড কানেকশন, তবে কিওয়ার্ড ম্যাচ ব্যবহার করে জার্নাল আউটপুট ফিল্টার করতে পারেন:
journalctl -u ssh.service | grep "Failed password" journalctl -u ssh.service | grep "Accepted password"
এই মেসেজগুলো ইন্ডিকেট করে লগইন সফল হয়েছে কিনা এবং কোন ইউজার অটেম্পট করেছে। আপনি এগুলো টাইম ফিল্টার সাথে কম্বাইন করতে পারেন নির্দিষ্ট উইন্ডোতে সার্চ ন্যারো করার জন্য:
journalctl -u ssh.service --since "1 hour ago"
এটি সিকিউরিটি অডিট বা ফরেনসিক ইনভেস্টিগেশন চলাকালীন অত্যন্ত সহায়ক হতে পারে।
প্রশ্নোত্তর (FAQ)
১. journalctl কেন রুট অ্যাক্সেস চায়?
ডিফল্টভাবে, journalctl রুট অ্যাক্সেস চায় কারণ এটি সিস্টেম সার্ভিস, কernel মেসেজ, ইউজার সেশন, এবং ব্যাকগ্রাউন্ড ডিমন থেকে সংগ্রহিত সেনসিটিভ ইনফো এক্সপোজ করতে পারে। এই লগগুলোতে ইউজারনেম, এনভায়রনমেন্ট ভেরিয়েবল, এরর ট্রেস, অথেনটিকেশন অটেম্পট, এবং অন্যান্য ডিটেইল থাকতে পারে যা অনঅথরাইজড ইউজার অ্যাক্সেস করলে সিকিউরিটি রিস্ক সৃষ্টি করতে পারে।
এই ডেটা সফeguard করার জন্য, systemd সিস্টেম জার্নালে অ্যাক্সেস রিস্ট্রিক্ট করে। তবে, আপনাকে সবসময় sudo ব্যবহার করতে হয় না। নন-রুট ইউজার লগ পড়তে পারেন যদি তারা systemd-journal গ্রুপের সদস্য হয়। আপনার ইউজারকে এই গ্রুপে যোগ করতে পারেন:
sudo usermod -aG systemd-journal yourusername
লগ আউট এবং লগ ইন করার পর, আপনাকে এলিভেটেড প্রিভিলেজ ছাড়া লগ অ্যাক্সেস করতে পারবেন, যতক্ষণ না জার্নাল ডিরেক্টরির ফাইল পারমিশন সঠিকভাবে কনফিগার করা থাকে।
২. লগ রিবুট জুড়ে পারসিস্টেন্ট করার উপায়?
রিবুটের পর লগ সংরক্ষণ করতে, আপনাকে systemd-journald কনফিগার করতে হবে পারসিস্টেন্ট স্টোরেজ ব্যবহার করার জন্য ভোলেটাইল মেমরির বদলে। ডিফল্টভাবে, কিছু ডিস্ট্রিবিউশন লগ /run/log/journal-এ স্টোর করে, একটি টেম্পোরারি ডিরেক্টরি যা শাটডাউনে ক্লিয়ার হয়ে যায়। পারসিস্টেন্ট লগিং ইনেবল করতে:
পারসিস্টেন্ট জার্নাল ডিরেক্টরি তৈরি করুন:
sudo mkdir -p /var/log/journalপ্রয়োজনে পারমিশন সেট করুন:
sudo systemd-tmpfiles --create --prefix /var/log/journalজার্নাল ডিমন রিস্টার্ট করুন:
sudo systemctl restart systemd-journaldঐচ্ছিক: কনফিগারেশন ভেরিফাই বা এডিট করুন:
/etc/systemd/journald.confখুলুন এবং নিচের লাইনটি সেট করা আছে কিনা নিশ্চিত করুন:Storage=persistent
এই কনফিগারেশন নিশ্চিত করে আপনার সিস্টেম রিবুট জুড়ে লগ ডেটা সংরক্ষণ করে, যা ইতিহাসগত ইস্যু অডিট এবং ডিবাগ করা সহজ করে।
৩. journalctl লগ কি ক্লিয়ার করা যায়?
হ্যাঁ, journalctl আপনাকে systemd-journald দ্বারা প্রদত্ত --vacuum-* অপশন ব্যবহার করে লগ ক্লিয়ার করতে দেয়। এই কমান্ডগুলো পুরনো বা অতিরিক্ত লগ ডেটা ডিলিট করে ডিস্ক ইউজ কমাতে সাহায্য করে।
জার্নাল লগ ক্লিয়ার বা সংকুচিত করার সাধারণ পদ্ধতিগুলো:
নির্দিষ্ট টাইমের পুরনো লগ রিমুভ করুন:
sudo journalctl --vacuum-time=2weeksসকল লগের জন্য টোটাল ডিস্ক ইউজ লিমিট করুন:
sudo journalctl --vacuum-size=500Mরাখা জার্নাল ফাইল সংখ্যা লিমিট করুন:
sudo journalctl --vacuum-files=10
এই কমান্ডগুলো করেন্ট বা সাম্প্রতিক লগ মুছে দেয় না যদি না সেগুলো ডিফাইন করা থ্রেশহোল্ড অতিক্রম করে। সকল লগ ফুলি রিমুভ করতে, আপনি ম্যানুয়ালি জার্নাল ফাইল ডিলিট করতে পারেন /var/log/journal- থেকে, কিন্তু এটি hyvin দুর্লভভাবে প্রয়োজন হয় এবং প্রোডাকশন সিস্টেমের জন্য সাধারণত রিকমেন্ড করা হয় না।
৪. systemd লগ কীভাবে অ্যাক্সেস করব?
আপনি journalctl কমান্ড ব্যবহার করে systemd লগ অ্যাক্সেস করতে পারেন, যা সরাসরি systemd জার্নালের সাথে ইন্টারফেস করে। systemd দ্বারা ম্যানেজড সার্ভিসেস 관련된 সকল লগ, যেন বুট মেসেজ, ইউনিট ফেইল্যার, এবং রানটাইম এরর, জার্নালে সংরক্ষিত থাকে।
সাধারণ অ্যাক্সেসের জন্য:
journalctl
নির্দিষ্ট systemd সার্ভিসের লগ देखने জন্য, যেন nginx, ব্যবহার করুন:
journalctl -u nginx.service
আপনি বুট সেশন, প্রায়োরিটি লেভেল, টাইম রেঞ্জ, বা একাধিক সার্ভিস কম্বাইন করে আরও গভীর ইনসাইট পেতে পারেন। ট্রাডিশনাল লগ ফাইলের বিপরীতে, journalctl এক यুনিফাইড, ইনডেক্সড ভিউ প্রদান করে একাধিক সোর্স থেকে লগ মেসেজের।
৫. systemd লগ देखने জন্য কোন কমান্ড ব্যবহার করা হয়?
systemd লগ দেখার জন্য প্রাইমারি কমান্ড হল:
journalctl
এই টুল systemd-এর সাথে ইনক্লুডেড থাকে এবং systemd-journald সার্ভিস দ্বারা সংগ্রহিত সকল লগে অ্যাক্সেস দেয়, যার মধ্যে কernel মেসেজ, আর্লি বুট লগ, সিস্টেম সার্ভিসেস, এবং ইউজার সেশন।
আপনি বিভিন্ন অপশন দিয়ে কমান্ড টেইলর করতে পারেন:
নির্দিষ্ট সার্ভিসের লগ দেখুন:
journalctl -u ssh.serviceপ্রায়োরিটি অনুযায়ী লগ ফিল্টার করুন:
journalctl -p errরিয়েল-টাইমে লগ ডিসপ্লে করুন:
journalctl -f
এটি journalctl-কে systemd-সংক্রান্ত লগ দেখার জন্য সবচেয়ে ভার্সাটাইল এবং কমপ্রিহেনসিভ ইউটিলিটি বানায়।
৬. journalctl দিয়ে কার্নেল লগ কীভাবে দেখব?
কার্নেল মেসেজ, যেগুলো ট্রাডিশনালি dmesg ব্যবহার করে দেখা হতো, সেগুলো systemd জার্নালেও উপলব্ধ। journalctl ব্যবহার করে শুধু কার্নেল মেসেজ দেখতে, -k ফ্ল্যাগ ব্যবহার করুন:
journalctl -k
এই কমান্ড আউটপুটটি শুধু কার্নেল থেকে উদ্ভূত মেসেজ অন্তর্ভুক্ত করার জন্য ফিল্টার করে। এটি হার্ডওয়্যার ইস্যু, কernel মডিউল সমস্যা, বা বুট-টাইম এরর ডায়াগনোজ করার জন্য বিশেষভাবে উপকারী। আপনি -b অপশনও ব্যবহার করতে পারেন কারেন্ট বা প্রিভিয়াস বুট থেকে মেসেজ देखने জন্য:
journalctl -k -b -1
এটি আপনাকে কার্নেল লগে কনসিস্টেন্ট অ্যাক্সেস দেয়, অন্যান্য সার্ভিসের লগের সাথে ইন্টিগ্রেটেড থাকায় আরও ভালো কন্টেক্সচুয়াল বোঝাপড়া যায়।
৭. dmesg এবং journalctl-এর পার্থক্য কী?
যদিও dmesg এবং journalctl উভয়ই কার্নেল লগ দেখাতে পারে, তারা ভিন্ন উদ্দেশ্যে সার্ভ করে এবং ভিন্ন মেকানিজমের অধীনে অপারেট করে।
| ফিচার | dmesg |
journalctl |
|---|---|---|
| স্কোপ | কার্নেল রিং বাফার মাত্র | কার্নেল + সিস্টেম + ইউজারল্যান্ড লগ |
| পারসিস্টেন্স | রিবুট বা বাফার ফুল হলে ক্লিয়ার | পারসিস্টেন্ট (ইনেবল থাকলে) |
| মেটাডেটা | স্ট্রাকচারড মেটাডেটা নেই | সমৃদ্ধ মেটাডেটা (ইউনিট, PID, UID, ইত্যাদি) |
| ফিল্টারিং | সীমিত | ব্যাপক ফিল্টারিং ক্যাপাবিলিটি |
| আউটপুট ফরম্যাট | র, সিম্পল | JSON, এক্সপোর্ট, শর্ট, ভার্বোস, ইত্যাদি |
| পারমিশন | ফুল আউটপুটের জন্য sudo দরকার |
রুট বা গ্রুপ মেম্বারশিপ দরকার |
সংক্ষেপে, dmesg রিয়েল-টাইমে লো-লেভেল কার্নেল লগে সীমাবদ্ধ, যখন journalctl একটি আরও কমপ্লিট, স্ট্রাকচারড, এবং পারসিস্টেন্ট লগিং ইন্টারফেস অফার করে যা পুরো সিস্টেমকে কভার করে।
উপসংহার
আপনি দেখতে পাচ্ছেন, systemd জার্নাল আপনার সিস্টেম এবং অ্যাপ্লিকেশন ডেটা সংগ্রহ এবং ম্যানেজ করার জন্য অত্যন্ত উপকারী। এর অধিকাংশ নমনীয়তা অটোমেটিক্যালি রেকর্ড হওয়া ব্যাপক মেটাডেটা এবং লগের সেন্ট্রালাইজড প্রকৃতির কারণে আসে।
এই গাইডে, আমরা বেসিক লগ ভিউইং, টাইম-ভিত্তিক এবং ফিল্ড-ভিত্তিক ফিল্টারিং, কার্নেল এবং সার্ভিস লগ মনিটরিং, আউটপুট ফরম্যাটিং, এবং রিয়েল-টাইম লগ ট্র্যাকিং কভার করেছি। আমরা জার্নাল মেইনটেন্যান্স, স্টোরেজ লিমিট, এবং সাধারণ সমস্যা যেন মিসিং লগ বা পারমিশন এরর সমাধানও ডিসকাস করেছি।
journalctl কমান্ড জার্নালের উন্নত ফিচারগুলো সুবিধা নেওয়া এবং ভিন্ন অ্যাপ্লিকেশন কম্পোনেন্টের এক্সটেনসিভ অ্যানালিসিস এবং রিলেশনাল ডিবাগিং করা সহজ করে তোলে। journalctl মাস্টার করে, আপনি আপনার পুরো সিস্টেম জুড়ে ডিবাগিং, মনিটরিং, এবং অডিটিং-এর জন্য একটি ভার্সাটাইল, ইউনিফাইড লগিং ইন্টারফেস পাবেন।
লিনাক্স সিস্টেমে লগিং এবং ট্রাবলশুটিং সম্পর্কে আরও বিস্তারিত জানতে, নিচের রিলেটেড টিউটোরিয়ালগুলো এক্সপ্লোর করুন:
- How To Troubleshoot Common Apache Errors
- How To Centralize Logs With Journald on Debian 10
- How To Centralize Logs With Journald on Ubuntu 20.04
এই কাজ Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License-এর অধীনে লাইসেন্সড।