Cách khắc phục lỗi nhật ký systemd đầy

11 phút đọc - 20 tháng 5, 2026

hero section cover
Mục lục
  • Cách khắc phục tình trạng nhật ký systemd đầy
  • Chẩn đoán vấn đề
  • Xóa nhật ký một cách an toàn
  • Cấu hình giới hạn kích thước Journald
  • Tự động hóa việc duy trì nhật ký
  • Kết luận
Chia sẻ

Chẩn đoán và khắc phục sự cố nhật ký systemd đầy bằng các lệnh vacuum, giới hạn kích thước journald.conf, bộ hẹn giờ dọn dẹp tự động và chuyển tiếp nhật ký.

Cách khắc phục tình trạng nhật ký systemd đầy

Nhật ký systemd lưu trữ mọi thông báo nhật ký mà máy chủ của bạn tạo ra, và trên một VPS có phân vùng gốc nhỏ, nó có thể âm thầm chiếm dụng hết dung lượng đĩa trống của bạn. Khi điều đó xảy ra, các dịch vụ không thể khởi động, việc ghi dữ liệu bị đình trệ và bạn sẽ mất đi chính những thông tin chẩn đoán cần thiết để tìm ra nguyên nhân sự cố. Hướng dẫn này sẽ giải thích cách chẩn đoán vấn đề, giải phóng dung lượng ngay lập tức và cấu hình journald để sự cố này không lặp lại.


 

Chẩn đoán vấn đề

Bắt đầu bằng cách kiểm tra dung lượng mà nhật ký đang sử dụng:

journalctl --disk-usage

Báo cáo này cho biết tổng dung lượng của tất cả các tệp nhật ký đang hoạt động và đã lưu trữ. So sánh con số đó với dung lượng đĩa trống của bạn bằng df -h. Trên phân vùng gốc 20 GB, ngay cả 2 GB nhật ký cũng chiếm hơn 10% tổng dung lượng đĩa, đủ để gây ra sự cố.

Tiếp theo, tìm hiểu xem dịch vụ nào đang tạo ra nhiều thông báo nhất. Dòng lệnh này xếp hạng 10 nguồn nhật ký hàng đầu trong 24 giờ qua:

journalctl --since "24 hours ago" | awk '{print $5}' | cut -d'[' -f1 | sort | uniq -c | sort -rn | head -10

Lọc các lỗi cụ thể bằng journalctl -p err -b để xem liệu có dịch vụ nào bị kẹt trong vòng lặp sập hệ thống và làm ngập nhật ký hay không. Bạn cũng có thể kiểm tra xem journald có đang giới hạn tốc độ của bất kỳ dịch vụ nào không:

journalctl -u systemd-journald | grep -i "suppressed"

Các thông báo bị ẩn có nghĩa là một dịch vụ đã vượt quá ngưỡng mặc định là 10.000 mục trong vòng 30 giây. Đó chính là thủ phạm.

Một số vấn đề đặc biệt phổ biến trên các máy chủ VPS. Nếu Storage=auto được thiết lập và /var/log/journal/ tồn tại, journald sẽ sử dụng bộ nhớ lưu trữ vĩnh viễn với giới hạn mặc định khoảng 4 GB. Trên một phân vùng gốc nhỏ, dung lượng này sẽ nhanh chóng bị lấp đầy. Việc tắt máy không đúng cách cũng có thể để lại các tệp nhật ký bị hỏng với hậu tố .journal~ . Các tệp này không được xoay vòng bình thường và tiếp tục chiếm dụng dung lượng.

Xóa nhật ký một cách an toàn

Trước khi xóa bất kỳ thứ gì, hãy xoay vòng tệp nhật ký đang hoạt động để lưu giữ các nhật ký hiện tại:

journalctl --rotate

Sau đó, xóa các nhật ký đã lưu trữ. Bạn có thể chọn theo thời gian, kích thước hoặc số lượng tệp:

sudo journalctl --vacuum-time=1d
sudo journalctl --vacuum-size=100M
sudo journalctl --vacuum-files=5

Lệnh đầu tiên xóa các nhật ký cũ hơn 24 giờ. Lệnh thứ hai thu nhỏ tổng kích thước nhật ký xuống còn 100 MB. Lệnh thứ ba chỉ giữ lại năm tệp lưu trữ gần đây nhất. Hãy chọn lệnh phù hợp với tình huống của bạn.

Nếu đĩa đã đầy hoàn toàn và các lệnh journalctl không phản hồi, bạn có thể cần xóa các tệp nhật ký thủ công:

sudo rm -rf /var/log/journal/*
sudo systemd-tmpfiles --create --prefix /var/log/journal

Đây là phương án cuối cùng. Nó sẽ xóa tất cả các nhật ký đã lưu trữ và tạo lại thư mục với các quyền truy cập chính xác. Sau khi dọn dẹp xong, hãy khởi động lại daemon và xác minh:

sudo systemctl restart systemd-journald
journalctl --disk-usage

Cấu hình giới hạn kích thước Journald

Các cài đặt mặc định của journald khá rộng rãi. Trên VPS, chúng quá rộng rãi. Chỉnh sửa cấu hình để đặt giới hạn cứng cho bộ nhớ lưu trữ nhật ký. Tạo một tệp ghi đè thay vì chỉnh sửa trực tiếp cấu hình chính, để các thay đổi của bạn vẫn được giữ nguyên sau khi cập nhật gói:

sudo mkdir -p /etc/systemd/journald.conf.d/
sudo nano /etc/systemd/journald.conf.d/size-limits.conf

Các chỉ thị chính:

Tham sốVPS (đĩa 20-40 GB)Máy chủ chuyên dụngChức năng
SystemMaxUse500M đến 1G2G đến 5GGiới hạn cứng về tổng dung lượng nhật ký
Dung lượng trống hệ thống1G10% dung lượng đĩaDung lượng trống dành riêng cho hệ điều hành
Thời gian lưu trữ tối đa7 ngày đến 14 ngày30 ngày đến 90 ngàyTự động xóa các bản ghi cũ hơn thời gian này
Kích thước tệp tối đa của hệ thống20M đến 50M100MKích thước tối đa cho mỗi tệp nhật ký

Cài đặt cả hai SystemMaxUseSystemKeepFree sẽ mang lại cho bạn một phương pháp an toàn kép: nhật ký được giới hạn ở một kích thước cố định, và hệ thống luôn có không gian trống bất kể có gì khác trên đĩa.

Lưu trữ bền vững so với lưu trữ tạm thời

Lệnh Storage= điều khiển vị trí lưu trữ nhật ký. Đặt Storage=persistent để ghi nhật ký vào /var/log/journal/ trên đĩa. Đây là lựa chọn phù hợp cho các máy chủ sản xuất, vì nhật ký sẽ tồn tại sau khi khởi động lại và bạn có thể điều tra các sự cố sau đó. Nếu thư mục không tồn tại, hãy tạo nó:

sudo mkdir -p /var/log/journal

Tùy chọn thay thế, Storage=volatile, lưu trữ nhật ký trong RAM tại /run/log/journal/. Nhật ký sẽ biến mất khi khởi động lại. Điều này phù hợp với các container tạm thời hoặc các máy chủ chuyển tiếp tất cả nhật ký đến một hệ thống bên ngoài.

Tắt tính năng nén trên các máy chủ có lưu lượng truy cập cao

Journald nén các đối tượng dữ liệu lớn hơn 512 byte theo mặc định. Trên các máy chủ xử lý lưu lượng nhật ký lớn, điều này làm tăng tải CPU. Đặt Compress=no nếu bạn đang chuyển tiếp nhật ký ra bên ngoài và không cần tối ưu hóa dung lượng lưu trữ cục bộ. Cũng nên thiết lập ForwardToConsole=no trong môi trường sản xuất. Việc chuyển tiếp console là đồng bộ, và một console nối tiếp ảo bị treo có thể chặn hoàn toàn daemon journald.

Sau bất kỳ thay đổi cấu hình nào, hãy khởi động lại dịch vụ:

sudo systemctl restart systemd-journald

Tự động hóa việc duy trì nhật ký

Việc dọn dẹp thủ công không thể mở rộng quy mô. Tạo bộ hẹn giờ systemd để dọn dẹp nhật ký theo lịch trình. Thiết lập một đơn vị dịch vụ tại /etc/systemd/system/journal-vacuum.service:

[Unit]
Description=Vacuum old journal logs
 
[Service]
Type=oneshot
ExecStart=/usr/bin/journalctl --vacuum-time=7d --vacuum-size=500M

Sau đó, tạo một bộ hẹn giờ phù hợp tại /etc/systemd/system/journal-vacuum.timer:

[Unit]
Description=Weekly journal vacuum
 
[Timer]
OnCalendar=Sun 02:00
Persistent=true
 
[Install]
WantedBy=timers.target

Kích hoạt nó bằng sudo systemctl enable --now journal-vacuum.timer. Bộ hẹn giờ chạy vào lúc 2 giờ sáng mỗi Chủ nhật và áp dụng cả lưu trữ dựa trên thời gian và kích thước trong một lần.

Một điều mà bộ hẹn giờ sẽ không phát hiện được: các tệp nhật ký bị hỏng. Sau khi tắt máy không đúng cách, journald sẽ cách ly các tệp bị hỏng bằng cách thêm ~ vào tên tệp. Các .journal~ vẫn được tính vào dung lượng đĩa nhưng sẽ không được dọn dẹp tự động. Hãy kiểm tra và xóa các tệp cũ định kỳ:

find /var/log/journal/ -name "*.journal~" -mtime +30 -delete

Chuyển tiếp nhật ký ra bên ngoài

Đối với các máy chủ mà bạn cần lưu trữ lâu dài mà không làm tăng dung lượng lưu trữ cục bộ, hãy chuyển tiếp nhật ký đến một hệ thống tập trung. Cách đơn giản nhất là bật tính năng chuyển tiếp syslog trong journald.conf:

ForwardToSyslog=yes

Đối với nhật ký có cấu trúc kèm theo siêu dữ liệu đầy đủ (PID, UID, tên đơn vị), hãy sử dụng systemd-journal-remote để gửi các mục định dạng JSON đến nền tảng quản lý nhật ký. Lưu trữ nhật ký bên ngoài cũng bảo vệ bản ghi kiểm toán của bạn nếu đĩa cục bộ bị hỏng hoặc máy chủ bị xâm phạm.

Kết luận

Vấn đề về nhật ký systemd đầy là dễ khắc phục và dễ phòng ngừa. Các bước chính:

  • Kiểm tra mức sử dụng bằng journalctl --disk-usage và xác định các dịch vụ gây nhiễu.
  • Giải phóng dung lượng ngay lập tức bằng journalctl --rotate sau đó --vacuum-size hoặc --vacuum-time.
  • Đặt giới hạn kích thước cụ thể trong tệp ghi đè journald.conf.
  • Tự động hóa việc dọn dẹp bằng bộ hẹn giờ systemd.
  • Chuyển tiếp nhật ký ra bên ngoài để lưu trữ lâu dài.

Các gói VPSmáy chủ chuyên dụng của FDC cung cấp I/O đĩa và dung lượng lưu trữ cần thiết cho khối lượng công việc nhật ký sản xuất.

Blog

Nổi bật trong tuần

Các bài viết khác
Các quy trình zombie trong Linux: Tìm kiếm, loại bỏ và ngăn chặn

Các quy trình zombie trong Linux: Tìm kiếm, loại bỏ và ngăn chặn

Tìm hiểu cách xác định, loại bỏ và ngăn chặn các tiến trình zombie trong Linux. Các lệnh, cách sửa lỗi mã và mẹo giám sát dành cho quản trị viên máy chủ.

15 phút đọc - 19 tháng 5, 2026

Danh sách kiểm tra tăng cường bảo mật máy chủ Linux

15 phút đọc - 8 tháng 5, 2026

Các bài viết khác
background image

Bạn có thắc mắc hoặc cần giải pháp tùy chỉnh?

icon

Các tùy chọn linh hoạt

icon

Phạm vi toàn cầu

icon

Triển khai ngay lập tức

icon

Các tùy chọn linh hoạt

icon

Phạm vi toàn cầu

icon

Triển khai ngay lập tức