[Linux] Tìm hiểu hoạt động và cấu hình Logrotate trên Linux

Tìm hiểu hoạt động và cấu hình Logrotate trên Linux

Hôm nay mình sẽ đem đến cho các bạn một bài viết khá chi tiết về chương trình “Logrotate” trên Linux.

Bài viết chia làm 3 phần (page) :
Phần 1 : Tổng quan về Logrotate (Intro)
Phần 2 : Diễn giải các giá trị cấu hình Logrotate phổ biến
Phần 3 : Hướng dẫn kiểm tra hoạt động Logrotate (chưa hoàn thành)

 

I. Tổng quan về Logrotate

– Logrotate là một công cụ chương trình hỗ trợ cho việc quản lý các file log trên hệ thống.
– Rotate ở đây có thể hiểu là tiến trình tạo ra 1 file log mới, còn file log cũ sẽ được xử lý theo các quy định cấu hình như xoá đi/nén lại/cất đi đâu đó.
– Log file là một file text nơi mà một chương trình ứng dụng sẽ xuất output chứa thông tin cần thiết hữu dụng cho các quản trị viên biết được điều gì đã và đang xảy ra đối với chương trình/hệ thống đó.
– Logrotate đơn thuần là một chương trình hoạt động theo việc xếp lịch crontab chứ không phải là một dịch vụ.

1.1  Vai trò quan trọng logrotate
– Các file log rất quan trọng đối với quản trị viên hệ thống phục vụ cho việc theo dõi tình trạng và xử lý vấn đề liên quan đến hệ thống/ứnd dụng. Không hay là nếu quá nhiều thông tin được log lại sẽ khiến cho dung lượng ổ cứng phải sử dụng nhiều cho việc chứa các file log. 
– Nếu không kiểm soát tình trạng phình to của các file log trên hệ thống, thì bỗng một ngày hệ thống của bạn sẽ hết dung lượng bất đắc dĩ, thậm chí việc file log có dung lượng lớn quá cũng ảnh hưởng đến các tiến trình xử lý backup hoặc resize của server ảo.
– Một điều cần quan tâm nữa là, nếu bạn có quá nhiều file log như cả ngàn cả tỉ file log thì sẽ rất khó để tìm kiếm các thông tin mà bạn cần. Vậy nên rất là cần thiết để kiểm soát các file log nằm trong dung lượng file quy định và cả số lượng các file log có thể giữ lại trên hệ thống.
– Chương trình “logrotate” sinh ra để giúp bạn làm những công việc đó.

1.2  Logrotate hoạt động như thế nào ?
– Chương trình logrotate sẽ chạy load file cấu hình này lên theo mặc định của script logrotate.
/etc/logrotate.conf
– Hệ thống Linux sẽ chạy chương trình logorate theo thời gian lịch crontab, mặc định là “daily”. Bạn có thể tìm thấy script chạy logrotate daily tại đường dẫn “/etc/cron.daily/logrotate”. Các file logs chỉ có thể được rotate nếu chương trình logrotate chạy, phần cấu hình sẽ chỉ là phụ trợ thêm chỉ định rõ nội dung các file tương tác.
– Như vậy bạn phải lưu ý, nếu bạn cấu hình logrotate chạy mỗi ngày nhưng mà lại để crontab logrotate vào phần cron.weekly , thì các file log sẽ được rotate theo chu kì mỗi tuần chứ không theo daily trong cấu hình.
– Nếu không có file script thực thi logrotate thì bạn có thể sử dụng nội dung script mặc định của chương trình logrotate như sau :
# vi /etc/cron.daily/logrotate
#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

– Cấu hình custom logrotate cho từng loại file log (tương ứng khi bạn muốn cấu hình cho từng loại dịch vụ riêng) thì sẽ được nằm trong thư mục “/etc/logrotate.d/” . Do trong file /etc/logrotate.conf , có quy định giá trị “include /etc/logrotate.d” nhằm load các file cấu hình khác nếu có, phục vụ cho việc quản lý các quy định xử lý file log của Quản Trị Viên. Ví dụ list trong directory đó như sau.
– Như vậy nếu bạn muốn thêm một hoạt động logrotate đối với file log của dịch vụ mới thì hãy tạo một file cấu hình logrotate trong thư mục “/etc/logrotate.d”.
# ll /etc/logrotate.d
total 24
-rw-r--r--. 1 root root 139 Jul 24  2015 dracut
-rw-r--r--  1 root root 185 Jan 22 15:59 httpd
-rw-r--r--  1 root root 267 Jul 24  2015 mcelog
-rw-r--r--  1 root root 789 Feb 18 07:05 mysql
-rw-r--r--. 1 root root 210 Dec 10  2014 syslog
-rw-r--r--. 1 root root  87 Jul 24  2015 yum

– Nếu bạn muốn tìm kiếm thông tin thêm về chương trình logorate ngay trên hệ thống thì có thể xài chương trình lệnh “man”. 
# man logrotate

– Xem trạng thái hoạt động cơ bản đối với các loại file log nào đang được logrotate tương tác.
# cat /var/lib/logrotate.status 
logrotate state -- version 2
"/var/log/yum.log" 2016-3-10
"/var/log/dracut.log" 2016-3-10
"/var/log/httpd/*log" 2016-3-10
"/var/lib/mysql/mysqld.log" 2016-3-10
"/var/log/wtmp" 2016-3-10
"/var/log/spooler" 2016-3-20
"/var/log/btmp" 2016-3-10
"/var/log/maillog" 2016-3-20
"/var/log/secure" 2016-3-20
"/var/log/mcelog" 2016-3-10
"/var/log/messages" 2016-3-20
"/var/log/cron" 2016-3-20

File cấu hình mẫu riêng lẻ
Mẫu 1 :
# cat /etc/logrotate.d/mail
/var/log/exim_mainlog {
    weekly
    rotate 5
    compress
    compresscmd xz
    create 0644 postfix postfix
}
Diễn giải :
– Với nội dung trên hoạt động cơ thể diễn giải như sau : file log của dịch vụ mail sẽ được lưu file log cũ tối đa 5 bản, thời gian thực thi rotate là 1 tuần 1 lần. Các file log cũ sẽ được nén bằng chương trình lệnh “xz”, hoạt động rotate thì logrotate sẽ tạo ra 1 file log mới cùng tên “exim_mainlog” và phân quyền 0644 với user postfix và group postfix.

Mẫu 2
:
# cat /etc/logrotate.d/httpd
/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}
Diễn giải :
– Logrotate sẽ kiểm tra tất cả file nằm trong direcotry /var/log/httpd/ có tên kết thúc đuôi bằng “log” và tiến hành rotate chúng nếu những file này không rỗng. Nếu chương trình kiểm tra directory httpd và không tìm thấy bất kì file nào tương ứng mẫu tên “log” thì sẽ không xuất thông báo error.
– Sau cùng sẽ thực thi chương trình lệnh nằm giữa “postrotate/endscript” (trong cấu hình mẫu trên là lệnh khởi động lại chương trình web server Apache).

[nextpage title=”Diễn giải các giá trị cấu hình Logrotate phổ biến”]

II . Diễn giải các giá trị cấu hình Logrotate phổ biến

– Các bạn đã có xem qua phần cấu hình file mẫu phía trên sẽ nhận thấy cấu trúc khá đơn giản với việc chỉ định đường dẫn tuyệt đối file log và 1 block { … } cấu hình kèm theo phía sau.
– Sau đây chúng ta sẽ đi rõ hơn một số lựa chọn cấu hình phổ biến nhất thường sử dụng, ở đây sẽ không liệt kê hết tất cả các lựa chọn cấu hình.

+ Log file
– Ta sẽ chỉ định cụ thể một hoặc nhiều file log với đường dẫn tuyệt đối của file log đó.
– Bạn cũng có thể sử dụng “wildcard name” đối với mẫu chung các tên file log. Vd như “/var/log/nginx/*.log” .
– Bạn cũng có thể phân biệt danh sách các log file cụ thể bằng khoảng trắng.
– Hoàn toàn có thể kết hợp cả “wildcard name” của file log và khoảng trắng phân biệt log file khác.
– Ví dụ :
/var/log/*.log /var/log/log.txt {
       ...
       ...
}

+ Số file log giữ lại
rotate [count]
rotate 4
– Số lượng file log cũ đã được rotate giữ lại. Giả sử “count” = 4 , tức giữ lại 4 file log cũ, trường hợp đã có đủ 4 file log cũ thì file cũ nhất sẽ bị xoá đi để chứa file log mới đã được rotate.

+ Thời gian xoay vòng
Có 4 giá trị thời gian tương ứng như sau.
daily
weekly
monthly
yearly

Chú thích :
daily : mỗi ngày
weekly : mỗi đầu tuần.
monthly : mỗi đầu tháng.
yearly : mỗi năm.

Với mỗi giá trị cấu hình mà bạn chọn, log sẽ được rotate với khoảng thời gian tương ứng.

+ Rotate file log dựa vào dung lượng file
– Bên cạnh đó ta còn có thể quy định tiến trình rotate dựa vào dung lượng của file, ví dụ như nếu file đó đạt dung lượng lớn hơn hoặc bằng 100M sau khi kiểm tra thì sẽ bị rotate. Các đơn vị kích thước file có thể sử dụng là “k” , “M”, “G”.
– Phần cấu hình rotate dựa vào dung lượng file được ưu tiên cao hơn rotate dựa vào thời gian (daily/weekly/…). Khi đó nếu 1 file log bị rotate theo cấu hình dung lượng file quy định thì thời gian rotate sẽ được khởi động lại mới.
Ví dụ cho sự ưu tiên : nếu 1 file log được cấu hình rotate theo tuần “weekly” và theo size file quy định, nhưng rồi đến giữa tuần file log đó bị rotate do đạt dung lượng cấu hình quy định cho file log. Lúc này, logrotate sẽ phải đợi sang tuần kế tiếp để thực hiện rotate log, do việc rotate theo size đã bypass luôn thời gian của tuần này, điều đó cũng tương tự với “daily”.
size [value]
size 100k 
size 100M
size 100G

+ Nén file log
compress
– Nếu ta chỉ định giá trị cấu hình “compress” thì chương trình logrotate sẽ nén tất cả các file log lại sau khi đã được rotate.
– Nếu chỉ định giá trị cấu hình này ở phần cấu hình toàn cục (global) thì tất cả các file log cũ sẽ bị nén.

 

nocompress
– Trong trường hợp bạn không muốn sử dụng tính năng nén file log cũ thì bạn nên sử dụng option “nocompress”.

 

compresscmd xz
– Mặc định, chương trình logrotate sử dụng chương trình “gzip” để nén các file log lại. Còn bạn muốn sử dụng chương trình nén khác như “bzip2”, “xz” hoặc “zip” thì hãy đặt tên chương trình đó thành biến sau giá trị cấu hình “compresscmd”.

 

delaycompress
– Cấu hình này sẽ hữu dụng trong trường hợp bạn không muốn file log cũ phải nén ngay sau khi vừa được rotate. Thay vào đó công việc nén sẽ được “delay” trễ hơn bằng việc sẽ nén file log cũ đó vào lần chạy logrotate đối với file log ở lần kế tiếp.
– Lưu ý là giá trị này, chỉ có thể cấu hình hoạt động khi kèm với chức năng “compress” trong file cấu hình của bạn.

+ Kiểm soát phân quyền file log tạo mới
– Chúng ta có thể chỉ định khi logrotate xử lý file log cũ xong theo quy định cấu hình thì kế tiếp sẽ tạo ra file log mới có tên tương ứng để thay thế file log hiện tại.
– Giá trị cấu hình “create” sẽ quy định việc file tạo ra file log mới đó.
– Trong một số trường hợp, chương trình dịch vụ khác của hệ thống bạn yêu cầu có sự phân quyền phù hợp để có thể đọc và tương tác với file log của dịch vụ thì sau khi rotate log bạn cần phải đảm bảo đúng phân quyền cho file log mới.
– Hoạt động tạo file này sẽ chạy trước script “postrotate”.
– Cấu trúc cấu hình lúc này sẽ là : create [mode] [owner] [group]
Ví dụ
create [mode] [owner] [group]
create 0600 root root

 

– Nếu bạn không muốn tự động tạo file log mới thì sử dụng option “nocreate”.
nocreate

+ Các giá trị cấu hình khác
missingok
– Nếu file log vì lý do gì đấy bị mất hoặc không tồn tại thì lograte 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 cấu hình sẽ là “nomissingok”.

 

noifempty
– Không rotate log, nếu file log này rỗng.

 

dateext
– Thêm giá trị hậu tố vào các file log cũ, các giá trị hậu tố này là phần mở rộng về thời gian theo cấu trúc “YYYYMMDD” thay vì add vào giá trị hậu tố là các con số 1,2,3,… 

 

sharedscripts
– Bình thường logrotate sẽ chạy postrotate scripts với mỗi một file log được rotate. Tức có nghĩa là nếu bạn cấu hình “wildcard name” hoặc các đường dẫn file log sử dụng chung 1 block cấu hình logrotate thì sẽ phải chạy “postrotate” cho mỗi log file nếu có cấu hình.
– Giá trị cấu hình này sẽ chỉ định chương trình logrotate hãy đợi cho đến khi kiểm tra hết tất cả các file log nằm trong block cấu hình thì kế đến mới hãy chạy nội dung script postrotate.
– Nếu một hay nhiều file log được rotate, thì lúc này postrotate script chỉ cần chạy 1 lần sau cùng là được. Ngược lại nếu không file log nào được rotate thì postrotate cũng sẽ không hoạt động.
Ví dụ: trong trường hợp web server cấu hình rotate cả access_log và error_log thì lúc này sau khi rotate cả 2 file thì phải chạy postrotate 2 lần (lệnh khởi động lại dịch vụ web server), tức web server phải restart dịch vụ 2 lần.
 

+ Thực thi chương trình lệnh
– Chương trình logrotate có thể chạy các lệnh do quản trị viên trước hay sau qúa trình rotate. 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 chương trình lệnh trước khi quá trình rotate bắt đầu ta tuân theo cấu trúc sau với lệnh thực thi sẽ nằm giữa “prerotate” và “endscript” :
prerotate
    touch /var/www/html/stop.txt
endscript

 

– Để chạy chương trình lệnh sau khi quá trình rotate bắt đầu ta tuân theo cấu trúc sau với lệnh thực thi sẽ nằm giữa “prerotate” và “endscript“:
postrotate
     /etc/init.d/httpd restart
endscript

Như vậy chúng ta đã bước qua phần 2 về việc giới thiệu ý nghĩa sử dụng các giá trị cấu hình phổ biến nhất khi sử dụng chương trình Logrotate.Tiếp đến về phần 3, chúng ta sẽ được tìm hiểu về cách kiểm tra hoạt động của logrotate và debug nếu có vấn đề phát sinh với hoạt động cấu hình logrotate cụ thể nào đó.

 
Previous article[Firewall ASA] – Bài 4 : Static Route Lab
Next article[Firewall ASA] – Bài 5 : The Open Shortest Path First (OSPF) Lab
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !