Skip to content
VDS · মনিটরিং ও পারফরম্যান্স

systemd লগ: সহজ ভাষায় journalctl

লগে সার্ভিস ব্যর্থতার কারণ কীভাবে খুঁজবেন, সময় ও লেভেল অনুযায়ী প্রয়োজনীয় অংশ ফিল্টার করবেন, এবং লগ যাতে পুরো ডিস্ক খেয়ে না ফেলে তা কীভাবে প্রতিরোধ করবেন।

আপডেট: ২৩ আগস্ট, ২০২৬

সিস্টেমে যা কিছু ঘটে, তার প্রায় সবকিছুই systemd journal-এ জমা হয়। কোনো সার্ভিস চালু হচ্ছে না, মেশিন নিজে থেকেই রিবুট হয়ে গেল, সাইট 502 ফেরত দিচ্ছে — উত্তর সাধারণত আগেই লিপিবদ্ধ থাকে, শুধু কীভাবে জিজ্ঞাসা করতে হয় সেটা জানা দরকার।

পাঁচটি কমান্ডই যথেষ্ট

journalctl -u nginx -n 50 --no-pager      # last 50 lines of one service
journalctl -u nginx -f                    # follow in real time
journalctl -p err -b                      # only errors since boot
journalctl --since "10 min ago"           # everything for the last ten minutes
journalctl -b -1 -e                       # previous boot log, end of file

শেষটি হঠাৎ রিবুটের পরে বিশেষভাবে মূল্যবান: -b -1 আগের সেশন খোলে, আর শেষে আপনি দেখতে পাবেন এটি kernel panic ছিল, OOM killer কাজ করছিল, নাকি পরিষ্কার শাটডাউন।

-p-তে লেভেলগুলো: emerg, alert, crit, err, warning, notice, info, debug। উল্লেখ করা লেভেলটি তার চেয়ে গুরুত্বপূর্ণ সবগুলোকে অন্তর্ভুক্ত করে।

ব্যর্থ সার্ভিস নির্ণয়

systemctl status myapp
journalctl -u myapp --since today -p warning

systemctl status এক্সিট কোড ও শেষ কয়েকটি লাইন দেয়, journalctl সম্পূর্ণ চিত্র দেয়। খেয়াল করুন:

  • Main process exited, code=exited, status=1 — অ্যাপ্লিকেশনটি নিজে থেকেই ত্রুটিসহ বন্ধ হয়ে গেছে, কারণ উপরের লাইনে আছে;
  • Failed to start ... Permission denied — কোনো ফাইল, ডিরেক্টরি বা 1024-এর নিচের পোর্টে অনুমতির সমস্যা;
  • কার্নেল থেকে Killed process ... (java) total-vm... — OOM killer সক্রিয় হয়েছে, পড়ুন Out of memory;
  • Start request repeated too quickly — সার্ভিসটি ক্র্যাশ-লুপে আছে, systemd এটি চালু করা বন্ধ করে দিয়েছে; কারণ ঠিক করে systemctl reset-failed myapp চালান।

সিস্টেমে নষ্ট সবকিছুর তালিকা হলো systemctl --failed।

সময় বাঁচানো ফিল্টার

journalctl --since "2026-08-22 03:00" --until "2026-08-22 04:00"
journalctl -u nginx -u php-fpm            # several services at once
journalctl _PID=1432                      # by specific process
journalctl -k                             # only kernel messages
journalctl -u sshd | grep "Failed password" | tail -20

grep-এর সাথে মিলিয়ে ব্যবহার করুন, তবে মনে রাখবেন: --no-pager ছাড়া journalctl একটি pager খোলে, q দিয়ে বেরিয়ে আসুন।

journal যাতে ডিস্ক খেয়ে না ফেলে

ডিফল্টভাবে journal পার্টিশনের 10% পর্যন্ত বাড়ে। 40 GB ডিস্কের VDS-1-এ সেটি চার গিগাবাইট — চোখে পড়ার মতো।

journalctl --disk-usage
journalctl --vacuum-size=200M
journalctl --vacuum-time=14d

স্থায়ী সীমা /etc/systemd/journald.conf-এ:

[Journal]
SystemMaxUse=300M
MaxRetentionSec=1month

তারপর systemctl restart systemd-journald।

সাধারণ ভুল

  • -u ছাড়া journal পড়া। সাধারণ স্ট্রিমটি সার্ভিসের রেকর্ডে ভরে যায়, আর আপনার প্রয়োজনীয় লাইনটি হারিয়ে যায়। সর্বদা এটি কোনো সার্ভিস বা লেভেলে সীমাবদ্ধ করুন।
  • রিবুটের পরে ইতিহাস হারানো। /var/log/journal ডিরেক্টরিটি না থাকলে journal শুধু মেমোরিতে থাকে। এটি তৈরি করুন: mkdir -p /var/log/journal && systemd-tmpfiles --create --prefix /var/log/journal।
  • সেখানে অ্যাপ্লিকেশনের ত্রুটি খোঁজা। Nginx, PostgreSQL এবং অনুরূপ সফটওয়্যারও /var/log-এ নিজেদের ফাইলে লেখে। journal খালি থাকলে সেখানে দেখুন।

ডিস্ক ভরে গেলে জায়গা খালি না হওয়া পর্যন্ত journalctl কাজ করতে অস্বীকার করতে পারে। এই পরিস্থিতি Out of disk space নিবন্ধে আলোচনা করা হয়েছে।