Bài 21: Logrotate và quản lý log dài hạn

Bài 21: Logrotate và quản lý log dài hạn

Bài này chi tiết hóa logrotate theo hướng dễ hiểu, có lệnh thực hành, tình huống production, checklist và bài tập.

Sau bài này anh sẽ biết:

  • Hiểu logrotate dùng để giải quyết vấn đề gì trong production.
  • Nắm các lệnh/cấu hình quan trọng.
  • Biết quy trình thực hành từng bước trong lab.
  • Có checklist kiểm tra trước khi áp dụng production.

Chốt ý nhanh

Chủ đề Điểm cần nhớ
Logrotate Giúp xoay vòng log để log không phình mãi và làm đầy ổ đĩa.
Quản lý log Không chỉ giữ log, mà phải cân bằng giữa dung lượng, thời gian lưu và khả năng điều tra sự cố.
Rủi ro Rotate sai có thể làm mất dấu lỗi hoặc khiến service không ghi log đúng nữa.

1. Bối cảnh thực tế

Logrotate không phải kiến thức lý thuyết riêng lẻ. Trong vận hành production, nó giúp giảm downtime, giảm rủi ro bảo mật và giúp hệ thống dễ khôi phục hơn khi có sự cố.

2. Các khái niệm cần nắm

  • Trạng thái hiện tại: trước khi sửa phải biết hệ thống đang chạy thế nào.
  • Thay đổi nhỏ: thay đổi từng bước để dễ rollback.
  • Log/metric: dùng để xác nhận thay đổi đúng hay sai.
  • Rollback: luôn có đường quay lại khi cấu hình lỗi.

3. Lab thực hành

Mục tiêu lab: chạy các lệnh kiểm tra, tạo thay đổi nhỏ và xác nhận kết quả.
logrotate --version
ls /etc/logrotate.d/
cat /etc/logrotate.conf
sudo logrotate -d /etc/logrotate.conf
sudo du -sh /var/log/* 2>/dev/null | sort -h

Khi thực hành, anh nên ghi lại output trước và sau. Đây là thói quen rất quan trọng của SysAdmin/DevOps.

4. Tình huống thực tế

Ứng dụng ghi log liên tục làm đầy disk. Anh cần tạo rule logrotate: xoay hằng ngày, giữ 14 bản, nén log cũ và không rotate file rỗng.

5. Quy trình triển khai an toàn

  1. Xác định mục tiêu thay đổi.
  2. Backup file cấu hình hoặc tạo snapshot nếu thay đổi rủi ro.
  3. Kiểm tra trạng thái hiện tại bằng lệnh phù hợp.
  4. Thay đổi trên lab/staging trước nếu có.
  5. Áp dụng production trong khung giờ phù hợp.
  6. Kiểm tra log, service, port, endpoint sau thay đổi.
  7. Ghi lại thay đổi và phương án rollback.

6. Lỗi thường gặp

  • Làm trực tiếp production mà không backup.
  • Sửa nhiều thứ cùng lúc nên không biết lỗi do đâu.
  • Không đọc log sau khi reload/restart service.
  • Không ghi lại command đã chạy.
Lưu ý production: Nếu thay đổi có thể làm mất kết nối, dừng service hoặc ảnh hưởng dữ liệu, hãy chuẩn bị rollback trước khi chạy lệnh.

7. Checklist

  • Đã kiểm tra trạng thái hiện tại.
  • Đã backup cấu hình/dữ liệu liên quan.
  • Đã test syntax/config nếu có.
  • Đã xác nhận service hoạt động sau thay đổi.
  • Đã ghi lại thay đổi vào tài liệu vận hành.

8. Bài tập

  1. Dựng lab nhỏ cho chủ đề này.
  2. Chạy toàn bộ lệnh kiểm tra.
  3. Tạo một lỗi nhỏ có kiểm soát và sửa lại.
  4. Viết checklist 5 bước dùng cho production.

Phần thực hành mở rộng: quản lý log dài hạn mà không tự bắn vào chân

Log là vàng trong lúc sự cố, nhưng nếu không quản lý thì chính log lại làm đầy disk và gây ra outage. Bài này nên giúp người học hiểu mối quan hệ giữa retention, nén log, rotate và quá trình điều tra sự cố.

Lab 1: Khảo sát log đang chiếm bao nhiêu dung lượng

sudo du -sh /var/log
sudo du -sh /var/log/* | sort -h | tail -20
journalctl --disk-usage

Trước khi cấu hình rotate, phải biết nơi nào đang tăng nhanh nhất: nginx, syslog, app log hay journal.

Lab 2: Đọc cấu hình logrotate hiện có

cat /etc/logrotate.conf
ls -la /etc/logrotate.d
sudo grep -R "rotate\|daily\|weekly\|compress" /etc/logrotate.d

Hãy tập đọc ý nghĩa của các directive như daily, rotate, compress, missingok, copytruncate.

Lab 3: Tạo lab logrotate cho ứng dụng giả lập

mkdir -p ~/logrotate-lab
for i in $(seq 1 2000); do echo "line $i" >> ~/logrotate-lab/app.log; done
cat <<'EOF' | sudo tee /etc/logrotate.d/app-lab
/root/logrotate-lab/app.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}
EOF

Sau đó test bằng:

sudo logrotate -d /etc/logrotate.conf
sudo logrotate -f /etc/logrotate.conf

Lab 4: Kiểm tra file sau khi rotate

ls -lah ~/logrotate-lab
zcat ~/logrotate-lab/app.log.1.gz | head -20

Không nên chỉ tin rằng rotate “đã chạy”; hãy mở file ra xem thật sự log cũ nằm ở đâu và có đọc lại được không.

Lab 5: Quản lý journald cơ bản

journalctl --disk-usage
sudo journalctl --vacuum-time=7d
sudo journalctl --vacuum-size=500M

Phần này giúp anh hiểu không phải log nào cũng nằm trong file text truyền thống.

Tình huống thực tế

Một app ghi log debug liên tục khiến ổ đĩa đầy lúc nửa đêm. Nếu logrotate cấu hình lỏng hoặc không có giới hạn journal, chỉ riêng log cũng có thể kéo theo database và web server cùng gặp sự cố.

Lỗi phổ biến

  • Giữ log quá lâu trên ổ nhỏ.
  • Dùng copytruncate mà không hiểu impact với ứng dụng ghi log tốc độ cao.
  • Rotate xong nhưng service không reopen file log.
  • Không có chính sách retention theo mức độ quan trọng của log.

Kết bài

Sau bài này, anh sẽ nhìn log không chỉ như dữ liệu chẩn đoán mà còn là tài nguyên cần quản trị. Quản lý log tốt giúp hệ thống vừa đủ dấu vết để điều tra, vừa không bị chính log bóp nghẹt. Bài tiếp theo sẽ gom nhiều kỹ năng trước đó lại thành một thứ rất quan trọng ngoài đời: quy trình troubleshooting production.

Tác giả: Mạnh Hoàng

Tôi là Hoàng Mạnh, người sáng lập blog SysadminSkills.com. Tôi viết về quản trị hệ thống, bảo mật máy chủ, DevOps và cách ứng dụng AI để tự động hóa công việc IT. Blog này là nơi tôi chia sẻ những gì đã học được từ thực tế – đơn giản, ngắn gọn và áp dụng được ngay.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *