Hướng dẫn quản lý log trên Linux bằng công cụ Logrotate

Linux

Đối với những ai sử dụng Linux, sẽ quen với việc xem, quản lý log của các dịch vụ/ ứng dụng trên hệ thống. Tuy các file log ở dạng text nhưng nếu không quản lý, dung lượng của chúng có thể lên đến hàng GB gây lãng phí dung lượng ổ cứng.
Mặt khác nếu chúng ta không quản lý log, sẽ dẫn đến việc xem log trở nên khó khăn khi mở một file log dung lượng cao, hay tìm tới khoảng thời gian cần xem nếu không quản lý file log theo thời gian.
Bài viết này sẽ giới thiệu và hướng dẫn các bạn sử dụng công cụ Logrotate để quản lý log trên Linux

Log là gì?
Log tập tin ghi lại liên tục các thông báo về hoạt động của cả hệ thống hoặc của các dịch vụ được triển khai trên hệ thống và file tương ứng. Log file thường là các file văn bản thông thường dưới dạng “clear text” tức là bạn có thể dễ dàng đọc được nó, vì thế có thể sử dụng các trình soạn thảo văn bản (vi, vim, nano…) hoặc các trình xem văn bản thông thường (cat, tailf, head…) là có thể xem được file log.
Các file log có thể nói cho bạn bất cứ thứ gì bạn cần biết, để giải quyết các rắc rối mà bạn gặp phải miễn là bạn biết ứng dụng nào, tiến trình nào được ghi vào log nào cụ thể.
/var/log là nơi lưu lại hầu hết tất cả các log.

Giới thiệu Logrotate

LOGROTATE là một công cụ giúp đơn giản hóa việc quản lý log files trên hệ thống. Nó hỗ trợ quản lý Log theo nguyên tắc xoay vòng file log, Logrotate tự động tạo ra các file log mới theo thời gian (ngày, tuần…), theo dung lượng. Các file log cũ sẽ được xóa/nén/di chuyển theo cấu hình trước đó.

Logrotate hoạt động một cách tự động, không cần can thiệp thủ công.

Cài đặt Logrotate

Thông thường Logrotate được cài sẵn trên các bản phân phối Linux, bạn có thể kiểm tra bằng lệnh sau:

Nếu chưa được cài bạn có thể cài đặt bằng lệnh sau:

Trên hệ thống Ubuntu/Debian:

Trên hệ thống CentOS/Redhat:

Cấu hình Logrotate

Cấu hình mặc định

/etc/logrotate.conf là file cấu hình mặc định của Logrotate.

Nội dung:

Hệ thống Linux sẽ chạy Logrotate theo crontab, mặc định Logrotate sẽ chạy hàng ngày nên script chạy Logrotate sẽ được đặt ở /etc/cron.daily/logrotate:

Nếu bị mất file script trên bạn có thể tạo file mới và copy nội dung phía trên vào là được.

Cấu hình riêng cho từng dịch vụ

Để cấu hình Logrotate cho từng dịch vụ, chúng ta tạo các file tương ứng với các dịch vụ và để trong thư mục /etc/logrotate.d

Ví dụ cấu hình Logrotate của yum như sau:

Tạo file cấu hình Logrotate

Ví dụ mình có một dịch vụ gửi file có tên là send_file. Thư mục log để ở /var/log/ (/var/log/send_file.log), mình sẽ tạo cấu hình Logrotate cho send_file như sau:

Nội dung như sau:

Theo file cấu hình trên Logrotate sẽ rotate file log của dịch vụ send_file (/var/log/send_file.log) theo các option như:

  • daily: tạo file mới hàng ngày
  • rotate 4: số lượng file cũ được giữ lại là 4
  • missingok: nếu file log vì lý do gì đấy bị mất hoặc không tồn tại send_file.log thì logrotate sẽ tự động di chuyển tới phần cấu hình log của file log khác mà không cần phải xuất ra thông báo lỗi. Ngược lại sẽ là cấu hình nomissingok
  • notifempty: không rotate log nếu file log này trống
  • create 660 root root: phân quyền cho file log với quyền 660 và chỉ root mới được viết/chỉnh sửa file log

Kiểm tra cấu hình Logrotate

Để kiểm tra cấu hình của Logrotate đúng hay sai, chúng ta sử dụng lệnh logrotate -d. Ví dụ kiểm tra cấu hình của send_file:

Output:

Một số cấu hình thông dụng

Lựa chọn Log file được rotate

Bạn có thể chỉ định cụ thể một hay nhiều file log với đường dẫn tuyệt đối của file log đó, phân biệt danh sách các log file cụ thể bằng khoảng trắng. Ví dụ:

Rotate theo thời gian

Có 4 giá trị cấu hình theo thời gian tương ứng như sau:

  • Daily: mỗi ngày
  • Weekly: mỗi đầu tuần
  • Monthly: mỗi đầu tháng
  • Yearly: mỗi năm

Rotate theo dung lượng file log

Chúng ta có thể cấu hình rotate dựa vào dung lượng file, ví dụ nếu file đó đạt dung lượng 1GB thì tiến hành rotate tạo file log mới. Các đơn vị kích thước file có thể sử dụng là K, M, G.

  • size 1k
  • size 10M
  • size 1G

Log file trống

  • missingok: Nếu không tồn tại file log, logrotate sẽ tự động di chuyển tới phần cấu hình log của file log khác mà không cần phải xuất ra thông báo lỗi.
  • nomissingok: ngược lại missingok
  • Notifempty: không rotate file log trống.

Số lượng Log file

  • rotate [number]

Ví dụ: rotate 4 sẽ giữ lại 4 file log cũ.

Nén Log file

  • Compress: Logrotate sẽ nén tất cả các file log lại sau khi đã được rotate, mặc định bằng gzip.
  • Compresscmd zip: Nếu bạn muốn sử dụng công cụ nén khác gzip thì sẽ dụng option Compresscmd kèm tên công cụ muốn sử dụng.
  • Delaycompress: trì hoãn việc nén file tới lần rotate kế tiếp (bắt buộc phải có option compress)
  • nocompress: không nén file log cũ

Phân quyền

  • create 660 root root

File log mới được tạo với quyền 660 và chỉ root mới có quyền tạo và chỉnh sửa file log.

Định dạng hậu tố theo thời gian

  • Dateext: File log cũ sẽ có hậu tố định dạng yyyymmdd.Mặc định giá trị hậu tố là các con số 1,2,3…

Thực thi lệnh trước hoặc sau khi rotate

LogRotate có thể chạy các lệnh trước hay sau quá trình rotate. Điều này thường được áp dụng để khởi động lại dịch vụ sử dụng file log nhằm không làm gián đoạn quá trình ghi log.

Để chạy một số lệnh trước khi quá trình rotate bắt đầu, ta đặt lệnh thực thi nằm giữa prerotate và endscript. Ví dụ:

Để chạy lệnh sau khi quá trình rotate kết thúc, ta đặt lệnh thực thi nằm giữa postrotate và endscript. Ví dụ:

sharedscripts: Script postrotate sẽ được chạy sau khi toàn bộ các file logs được rotate. Nếu không có tùy chọn này, postrotate script sẽ được chạy sau mỗi log file được rotate.

Chạy LogRotate thủ công

Trong trường hợp bạn muốn chạy ngay LogRotate, hãy dùng lệnh bên dưới:

Trong đó:

  • -v verbose hiển thị thêm thông tin so với thông thường, có ích khi bạn muốn dò lỗi logrotate
  • -f bắt buộc rotate ngay lập tức

Chúc các bạn thành công.

Nguồn:
https://hocvps.com/
https://cuongquach.com/

Share: