# บันทึก journald ใหญ่เกินไป: วิธีตรวจสอบและจำกัดขนาด Journal

บนเซิร์ฟเวอร์ Linux หลายเครื่อง systemd journal จะค่อย ๆ โตจนกลายเป็นข้อมูลที่ใหญ่ที่สุดใน /var คุณสามารถดูขนาด ตัดทอนครั้งเดียว และกำหนดขีดจำกัดให้มีขนาดเล็กอยู่เสมอ โดยไม่ต้องแตะต้องไฟล์บันทึกอื่น ๆ

## 1. ดูว่า Journal ใช้พื้นที่เท่าใด

รัน journalctl --disk-usage คำสั่งนี้จะแสดงขนาดรวมของไฟล์ journal ที่เก็บถาวรและที่กำลังใช้งาน โดยปกติไฟล์เหล่านี้อยู่ใน /var/log/journal (แบบถาวร) หรือ /run/log/journal (เก็บในหน่วยความจำเท่านั้น)
หากไม่มีไดเรกทอรี /var/log/journal ระบบของคุณอาจเก็บ journal ไว้ในหน่วยความจำเท่านั้น และขนาดที่เห็นจะถูกจำกัดด้วย RAM ไม่ใช่ดิสก์

## 2. ตัดทอนครั้งเดียว

หากต้องการให้ journal มีขนาดไม่เกินที่กำหนด ให้รัน sudo journalctl --vacuum-size=500M หากต้องการเก็บเฉพาะรายการล่าสุด ให้รัน sudo journalctl --vacuum-time=14d ทั้งสองคำสั่งจะลบไฟล์ journal เก็บถาวรเก่า และไม่สามารถกู้คืนบันทึกในไฟล์เหล่านั้นได้ภายหลัง
รัน journalctl --disk-usage อีกครั้งเพื่อยืนยัน การ vacuum จะลบไฟล์เก็บถาวรทั้งไฟล์ ผลลัพธ์จึงอาจสูงหรือต่ำกว่าเป้าหมายเล็กน้อย

## 3. กำหนดขีดจำกัดถาวร

เปิด /etc/systemd/journald.conf (หรือสร้างไฟล์ drop-in ใน /etc/systemd/journald.conf.d/) แล้วกำหนด SystemMaxUse=500M ภายใต้ส่วน [Journal] หากต้องการเว้นพื้นที่ว่างไว้ด้วย สามารถใช้ SystemKeepFree=1G ได้เช่นกัน SystemMaxUse จำกัด journal แบบถาวร ส่วน RuntimeMaxUse ทำหน้าที่เดียวกันกับ journal ในหน่วยความจำ
ใช้การตั้งค่าด้วย sudo systemctl restart systemd-journald จากนั้นตรวจสอบ journalctl --disk-usage อีกครั้งหลังผ่านไปสักพัก

## 4. ตัดสินใจว่าต้องเก็บอะไรไว้

Journal ที่เล็กลงหมายถึงประวัติสำหรับการดีบั๊กที่สั้นลง หากต้องการประวัติของบริการใดบริการหนึ่งที่ยาวนานขึ้น ให้ส่งบันทึกของบริการนั้นไปเก็บไว้ที่อื่นแทนการเก็บทุกอย่างไว้บนเซิร์ฟเวอร์
ดูว่าบริการใดเขียนบันทึกมากที่สุด: journalctl -b -p warning --no-pager | tail จะแสดงคำเตือนล่าสุด และบริการที่บันทึกหลายพันบรรทัดต่อนาทีควรได้รับการแก้ไขที่ต้นเหตุ

## FAQ

**การรัน journalctl --vacuum-size ปลอดภัยหรือไม่**

ปลอดภัยต่อตัวระบบ เพราะคำสั่งนี้ลบเฉพาะไฟล์ journal เก็บถาวรเก่า แต่ประวัติบันทึกนั้นจะหายไป ดังนั้นโปรดตรวจสอบก่อนว่าไม่จำเป็นต้องใช้ในการตรวจสอบปัญหา

**ต้องรีสตาร์ตอะไรหลังแก้ไข journald.conf หรือไม่**

รีสตาร์ต systemd-journald (sudo systemctl restart systemd-journald) ขีดจำกัดจะมีผลตั้งแต่นั้นเป็นต้นไป และไฟล์เก่าจะถูกตัดทอนเมื่อ journal หมุนเวียนไฟล์

**เหตุใดจึงไม่มี /var/log/journal**

การเก็บถาวรถูกปิดอยู่ หรือตั้งเป็น auto โดยไม่มีไดเรกทอรีนี้ journal จึงอยู่ใน /run/log/journal ในหน่วยความจำและจะหายไปเมื่อรีบูต ให้สร้าง /var/log/journal แล้วรีสตาร์ต journald เฉพาะเมื่อต้องการเก็บถาวร

Source: https://raincleaner.eu/th/guides/journald-logs-too-big-limit-journal-size