# Log journald quá lớn: kiểm tra và giới hạn dung lượng journal

Trên nhiều máy chủ Linux, systemd journal dần dần phình to thành thứ chiếm nhiều chỗ nhất trong /var. Bạn có thể xem dung lượng của nó, dọn một lần và đặt giới hạn để nó luôn nhỏ gọn - mà không động đến các tệp log khác.

## 1. Xem journal chiếm bao nhiêu dung lượng

Chạy journalctl --disk-usage. Lệnh này in ra tổng dung lượng của các tệp journal đã lưu trữ và đang hoạt động. Các tệp này thường nằm trong /var/log/journal (lưu lâu dài) hoặc /run/log/journal (chỉ giữ trong bộ nhớ).
Nếu thư mục /var/log/journal không tồn tại, hệ thống của bạn có thể chỉ giữ journal trong bộ nhớ, và dung lượng bạn thấy bị giới hạn bởi RAM chứ không phải bởi ổ đĩa.

## 2. Dọn một lần

Để giữ journal ở mức bằng hoặc dưới một dung lượng nhất định, hãy chạy sudo journalctl --vacuum-size=500M. Để chỉ giữ các mục gần đây, hãy chạy sudo journalctl --vacuum-time=14d. Cả hai lệnh đều xóa các tệp journal đã lưu trữ cũ; sau đó không thể khôi phục các log chứa trong đó.
Chạy lại journalctl --disk-usage để xác nhận. Việc dọn sẽ xóa cả các tệp đã lưu trữ, nên kết quả có thể cao hơn hoặc thấp hơn mục tiêu một chút.

## 3. Đặt giới hạn cố định

Mở /etc/systemd/journald.conf (hoặc tạo tệp drop-in trong /etc/systemd/journald.conf.d/) và đặt SystemMaxUse=500M trong phần [Journal]. Nếu bạn cũng muốn giữ lại một ít dung lượng trống, SystemKeepFree=1G là một lựa chọn khác. SystemMaxUse giới hạn journal lưu lâu dài; RuntimeMaxUse thực hiện tương tự cho journal trong bộ nhớ.
Áp dụng bằng sudo systemctl restart systemd-journald, sau đó kiểm tra journalctl --disk-usage sau một thời gian.

## 4. Quyết định những gì cần giữ lại

Journal nhỏ hơn đồng nghĩa với lịch sử gỡ lỗi ngắn hơn. Nếu bạn cần lịch sử dài hơn của một dịch vụ, hãy chuyển log của dịch vụ đó sang nơi khác thay vì giữ mọi thứ trên máy chủ.
Xem dịch vụ nào ghi nhiều nhất: journalctl -b -p warning --no-pager | tail hiển thị các cảnh báo gần đây, và một dịch vụ ghi hàng nghìn dòng log mỗi phút thì đáng được khắc phục tận gốc.

## FAQ

**Chạy journalctl --vacuum-size có an toàn không?**

Có, đối với bản thân hệ thống: lệnh này chỉ xóa các tệp journal đã lưu trữ cũ. Bạn sẽ mất lịch sử log đó, vì vậy hãy chắc chắn rằng bạn không cần nó cho việc điều tra trước.

**Tôi có cần khởi động lại gì sau khi chỉnh sửa journald.conf không?**

Khởi động lại systemd-journald (sudo systemctl restart systemd-journald). Từ đó giới hạn sẽ được áp dụng và các tệp cũ sẽ được dọn dần khi journal xoay vòng.

**Tại sao /var/log/journal bị thiếu?**

Lưu trữ lâu dài đang tắt hoặc đặt ở chế độ auto nhưng không có thư mục này. Khi đó journal nằm trong bộ nhớ tại /run/log/journal và bị mất khi khởi động lại. Chỉ tạo /var/log/journal và khởi động lại journald nếu bạn muốn lưu lâu dài.

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