คำตอบสั้น ๆ: ใช้ journalctl ดู Log ของ Service ตามช่วงเวลา ระดับความรุนแรง และรอบการบูต ติดตาม Log แบบสด และจำกัดพื้นที่ที่ journal ใช้บนดิสก์
คู่มือนี้อธิบาย journalctl ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
บน Linux ที่ใช้ systemd ข้อความจาก Kernel และ Service ทุกตัวจะถูกเก็บรวมไว้ใน journal ซึ่งอ่านได้ด้วยคำสั่ง journalctl ข้อดีคือกรองได้ละเอียดกว่าการ grep ไฟล์ข้อความ เช่น ดูเฉพาะ Log ของ Nginx ในชั่วโมงที่ผ่านมา หรือดูเฉพาะ Error ตั้งแต่บูตครั้งก่อน ซึ่งมีประโยชน์มากเมื่อต้องหาสาเหตุว่าทำไม Service ล้มหรือทำไมเครื่องรีบูตเอง
บทความนี้ใช้ได้กับ Ubuntu 22.04/24.04 และ AlmaLinux/Rocky Linux 8-9 ส่วน Log ของโปรแกรมที่เขียนลงไฟล์เองโดยตรง เช่น Access Log ของ Nginx จะไม่อยู่ใน journal ให้อ่านจากไฟล์ใน /var/log/ ตามปกติ
สิ่งที่ต้องเตรียม
- เซิร์ฟเวอร์ Linux ที่ใช้ systemd และเข้าผ่าน SSH ได้
- สิทธิ์ sudo หรือเป็นสมาชิกกลุ่ม
systemd-journalหรือadm(ผู้ใช้ทั่วไปจะเห็นเฉพาะ Log ของตัวเอง) - รู้ชื่อ Service ที่ต้องการดู (ดูวิธีหาชื่อใน จัดการ Service บน Linux ด้วย systemctl)
ขั้นตอนที่ 1: ดู Log ล่าสุดและติดตามแบบสด
sudo journalctl -n 50
sudo journalctl -f
sudo journalctl -e
-n 50 แสดง 50 บรรทัดล่าสุด -f แสดงบรรทัดใหม่ต่อเนื่องจนกว่าจะกด Ctrl+C และ -e เปิดตัวอ่านแล้วกระโดดไปท้ายสุด ถ้ารัน journalctl เฉย ๆ จะเริ่มจาก Log เก่าที่สุด ซึ่งอาจยาวหลายแสนบรรทัด
ตัวอ่านที่ใช้คือ less เลื่อนด้วยลูกศร ค้นหาด้วย /คำค้น กด G ไปท้ายสุด และ q เพื่อออก ถ้าต้องการผลลัพธ์ต่อเข้าคำสั่งอื่นหรือบันทึกเป็นไฟล์ ให้ใส่ --no-pager
ขั้นตอนที่ 2: กรองตาม Service
sudo journalctl -u nginx
sudo journalctl -u nginx -n 100 --no-pager
sudo journalctl -u php8.3-fpm -u nginx -f
-u เลือก Unit ใส่ได้หลายตัวเพื่อดู Log ของ Nginx และ PHP-FPM สลับกันตามเวลา ซึ่งช่วยจับคู่เหตุการณ์ได้ง่าย เช่น เห็นว่า PHP-FPM ถึงขีดจำกัด max_children ในวินาทีเดียวกับที่ Nginx เริ่มตอบ 502
ถ้าไม่ได้ต้องการกรองตาม Unit แต่ตามโปรแกรม ใช้ Field ของ journal ได้ เช่น ดู Log จากโปรแกรม sshd ทั้งหมด
sudo journalctl _COMM=sshd --since today
ขั้นตอนที่ 3: กรองตามช่วงเวลา
sudo journalctl --since "1 hour ago"
sudo journalctl --since today
sudo journalctl --since "2026-09-18 09:00" --until "2026-09-18 10:30"
sudo journalctl -u mariadb --since yesterday --until today
รูปแบบเวลาใช้ได้ทั้ง YYYY-MM-DD HH:MM:SS และคำอย่าง today, yesterday, "30 min ago" เวลาที่แสดงใช้ Timezone ของเครื่อง ถ้าเครื่องยังเป็น UTC เวลาจะช้ากว่าเวลาไทย 7 ชั่วโมง ตั้งค่าได้ตาม ตั้งค่า Timezone และซิงก์เวลาอัตโนมัติบน Linux Server หรือใส่ --utc เพื่อดูเวลาแบบ UTC
ขั้นตอนที่ 4: กรองตามระดับความรุนแรง
sudo journalctl -p err -b
sudo journalctl -p warning --since today
-p แสดงระดับที่กำหนดและรุนแรงกว่า ระดับเรียงจากรุนแรงมากไปน้อยคือ emerg (0), alert (1), crit (2), err (3), warning (4), notice (5), info (6) และ debug (7) คำสั่ง journalctl -p err -b จึงเป็นวิธีเร็วที่สุดในการดูว่าตั้งแต่บูตครั้งนี้มี Error อะไรบ้าง
ขั้นตอนที่ 5: ดู Log ตามรอบการบูต
sudo journalctl --list-boots
sudo journalctl -b
sudo journalctl -b -1 -n 100
sudo journalctl -k -b
-b คือรอบบูตปัจจุบัน -b -1 คือรอบก่อนหน้า ใช้หาสาเหตุเมื่อเครื่องรีบูตเองหรือค้าง โดยดูบรรทัดท้าย ๆ ของรอบก่อนหน้า ส่วน -k แสดงเฉพาะข้อความจาก Kernel คล้าย dmesg ใช้หาปัญหาดิสก์ หน่วยความจำ หรือ OOM Killer เช่น
sudo journalctl -k | grep -i "out of memory"
ถ้าพบบรรทัด Out of memory: Killed process แปลว่า RAM ไม่พอจนระบบต้องฆ่า Process ทิ้ง ดูแนวทางใน เพิ่ม Swap File บน Linux Server และ ตรวจสอบ CPU, RAM และ Load Average