Vấn đề : Bạn đã bao giờ gặp log lên đến hàng GB? Log của bạn được sinh ra để debug lỗi khi chương trình chạy, giờ lại làm server chết toi vì đầy ổ cứng?
Hay bạn khó tìm được log của bạn nó nằm ở đâu? Nếu vậy hãy dành vài phút để đọc về logrotate, nó có thể giúp bạn chút ít đấy :D.
Bài viết dành cho những quản trị viên có kiến thức cơ bản về linux.
logrotate là gì?
logrotate là công cụ quay vòng, nén và gửi log hệ thống.
logratote được thiết kế để giảm tải cho việc quản trị số lượng lớn files log. Nó tự động quay vòng, nén, xóa và gửi email files log. Mỗi file log có thể được xử lý hàng ngày, hàng tuần hoặc hàng tháng hoặc khi log trở nên quá lớn.
logrotate hoạt động như thế nào
logrotate được cài mặc định với centos, bạn có thể kiểm tra bằng cách gõ lệnh
[root@shopbay httpd]# logrotate logrotate 3.8.6 - Copyright (C) 1995-2001 Red Hat, Inc. This may be freely redistributed under the terms of the GNU Public License Usage: logrotate [-dfv?] [-d|--debug] [-f|--force] [-m|--mail command] [-s|--state statefile] [-v|--verbose] [-l|--log STRING] [--version] [-?|--help] [--usage] [OPTION...] <configfile>
logrotate được chạy hàng ngày qua cronjob. Bạn có thể kiểm tra bằng cách gõ lệnh
crontab -e
hoặc không :D. Thật ra thì logrotate được chạy bằng cronjob nhưng cài thẳng vào hệ thống tại đường dẫn /etc/cron.daily/logrotate cơ. Bạn có thể gõ lệnh cat /etc/cron.daily/logrotate để xem xem hệ thống chạy logrotate như thế nào.
Logrotate khi chạy bằng cronjob hoặc khi chạy bằng tay, sẽ đọc từ file config từ trong thư mục và thực thi quá trình tự chuyển biến log của nó.
/etc/logrotate.d/
Cấu hình logrotate cho apache
Mặc định khi apache được cài thì hệ thống đã tự tạo file cấu hình logrotate cho apache rồi, nhưng có thể cấu hình không được như ta mong muốn.
#/etc/logrotate.d/httpd
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
delaycompress
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}
Như bạn đã thấy ở trên, mặc định logrotate đã xử lý log của apache theo những tùy chọn sau đây :
- /var/log/httpd/*log : Toàn bộ file đặt trong thư mục /var/log/httpd với đuôi file là log sẽ được xử lý.
- missingok : Không có log file cũng không sao.
- notifempty : Not if empty, log rỗng thì không làm gì cả.
- sharedscripts : Bình thường, những câu lệnh prerotate, postrorate sẽ được thực thi mỗi khi logrotate xử lý 1 file log mà match tên file ở trên. Tuy nhiên nếu sử dụng option này thì dù có bao nhiêu file log thỏa mãn, postrotate và prerotate command sẽ chỉ được thực hiện 1 lần.
- postrotate/endscript : Câu lệnh được thực hiện sau khi rotate thực hiện xong.
- delaycompress : Đưa file log cũ vào hàng chờ nén. Nó chỉ được thực hiện khi compress được đưa vào danh sách option thôi.
Tôi sẽ thay đổi file cấu hình log một chút như sau :
/var/log/httpd/*log {
daily
rotate 30
missingok
notifempty
sharedscripts
compress
delaycompress
postrotate
/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
endscript
}
Ở đây tôi sẽ thêm thắt một chút cho logrotate :
- daily : xử lý log mỗi ngày
- rotate 30 : quay vòng 30 ngày, ngày 31 thì xóa log đi
- compress : nén log cũ lại
Ok, test thử xem nào :
logrotate -d /etc/logrotate.d/httpd
Bạn sẽ thấy logrotate sẽ hiển thị những gì nó Định làm. -d ở đây là tham số debug, logrotate sẽ không làm gì với log của bạn cả. Nếu bạn ưng, hãy chạy logrotate không thôi.
Kết luận
Logrotate là công cụ không thể bỏ qua nếu bạn phải quản trị log một cách thủ công. Để biết thêm các option của logrotate hãy truy cập : https://linux.die.net/man/8/logrotate
Để biết thêm chi tiết, vui lòng comment tại đây hoặc liên hệ : quanbka.cntt@gmail.com để trao đổi thêm.
Xin cảm ơn!









(3 lượt thả tim)



