Cấu hình logrotate trong Linux Image Cấu hình logrotate trong Linux

Bài viết này giới thiệu các bạn về cách cấu hình logrotate trên hệ điều hành Linux.

1. Logrotate

Logrotate là một công cụ chương trình hổ trợ cho việc quản lý file log trên hệ thống, bao gồm xoay vòng các file log, di chuyển, nén, gửi tự động,.. .

Rotate xoay vòng được thực hiện như tiến trình xữ lý các file log cũ theo một quy định như xoá, nén hoặc move và tạo ra file log mới theo thời gian (ngày, tuần…), theo dung lượng.

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

2. Các tệp cấu hình của Logrotate

Logrotate được cài đặt mặc định trên hầu hết các bản phân phối Linux. Chúng ta có thể kiểm tra bằng lệnh sau:

[root@test1 ~]# logrotate
logrotate 3.8.6 - Copyright (C) 1995-2001 Red Hat, Inc.

Nếu chưa được cài đặt, chúng ta cập nhật system packages và tiến hành cài đặt logrotate

Đối với hệ thống Debian:

apt-get update
apt-get install logrotate

Đối với hệ thống CentOS:

yum update
yum install logrotate

Các thông số thường gặp trong các tệp tin chính của logrotate

Thông sốChức năng
dailyMỗi ngày
weeklyMỗi tuần
monthlyMỗi tháng
yearlyMỗi năm
missingokNếu file log bị mất hoặc không có tồn tại *.log thì logrotate sẽ di chuyển tới phần cấu hình log của file log khác mà không phải xuất ra thông báo lỗi
nomissingokNgược lại so với cấu hình missingok
notifemptyKhông rotate log nếu file log này trống
rotatesố lượng file log cũ đã được giữ lại sau khi rotate
compressLogrotate sẽ nén tất cả các file log lại sau khi đã được rotate mặc định bằng gzip
compresscmdKhi sử dụng chương trình nén như bzip2, xz hoặc zip
delaycompressĐược sử dụng khi không muốn file log cũ phải nén ngay sau khi vừa được rotate
nocompressKhông sử dụng tính năng nén đối với file log cũ
createPhân quyền cho file log mới sau khi rotate
copytruncateFile log cũ được sao chép vào một tệp lưu trữ, và sau đó nó xóa các dòng log cũ
postrotate [command] endscriptĐể chạy lệnh sau khi quá trình rotate kết thúc, chúng ta đặt lệnh thực thi nằm giữa postrotate và endscript
prerotate [command] endscriptĐể chạy lệnh trước khi quá trình rotate bắt đầu, chúng ta đặt lệnh thực thi nằm giữa prerotate và endscript

Các tệp tin chính của logrotate:

  • Tập lệnh shell thực thi các lệnh logrotate hàng ngày được lưu tại /etc/cron.daily/logrotate

    [root@test1 ~]# cat /etc/cron.daily/logrotate
    #!/bin/sh
    
    /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /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 Logrotate được lưu tại /etc/logrotate.conf có chứa các thông tin thiết lập toàn bộ file log mà Logrotate quản lý, bao gồm chu kì lặp, dung lượng file log, nén file,...

    [root@test1 ~]# cat /etc/logrotate.conf
    # see "man logrotate" for details
    # rotate log files weekly
    weekly
    
    # keep 4 weeks worth of backlogs
    rotate 4
    
    # create new (empty) log files after rotating old ones
    create
    
    # use date as a suffix of the rotated file
    dateext
    
    # uncomment this if you want your log files compressed
    #compress
    
    # RPM packages drop log rotation information into this directory
    include /etc/logrotate.d
    
    # no packages own wtmp and btmp -- we'll rotate them here
    /var/log/wtmp {
        monthly
        create 0664 root utmp
        minsize 1M
        rotate 1
    }
    
    /var/log/btmp {
        missingok
        monthly
        create 0600 root utmp
        rotate 1
    }
    
    # system-specific logs may be also be configured here.
    

    Nội dung file /etc/logrotate.conf thể hiện file log được rotate hàng tuần, dữ liệu của file log được lưu trữ trong vòng 4 file, file log mới sẽ được tạo sau khi rotate file cũ.

  • Thông tin cấu hình của file log các ứng dụng được lưu trữ tại /etc/logrotate.d

    👉 Ví dụ 1: Xem thông tin cấu hình của gói bootlog

    [root@test1 etc]# cat /etc/logrotate.d/bootlog
    /var/log/boot.log
    {
        missingok
        daily
        copytruncate
        rotate 7
        notifempty
    }
    

    Qua ví dụ 1 các thông số cấu hình có ý nghĩa là:

    • missingok: Nếu file log bị mất hoặc không tồn tại *.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
    • daily: Được rotate mỗi ngày
    • copytruncate: File bootlog cũ được sao chép vào một tệp lưu trữ, và sau đó nó xóa các dòng log cũ
    • rotate 7: Giữ lại 7 file log cũ sau khi rotate
    • notifempty: Không rotate log nếu file bootlog này trống

    👉 Ví dụ 2: Xem thông tin cấu hình của gói syslog

    [root@test1 etc]# cat /etc/logrotate.d/syslog
    /var/log/cron
    /var/log/maillog
    /var/log/messages
    /var/log/secure
    /var/log/spooler
    {
        missingok
        notifempty
        sharedscripts
        postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
        endscript
    }
    

    Khi logrotate chạy, nó sẽ kiểm tra bất kỳ tệp nào ở /var/log/cron, /var/log/maillog, /var/log/messages, /var/log/secure, /var/log/spooler và rotate chúng, nếu chúng không trống. Nếu nó kiểm tra thư mục cron, maillog, messages, secure, spooler và không tìm thấy bất kỳ tệp nhật ký nào, nó sẽ không phát sinh lỗi. Sau đó, nó chạy lệnh trong postrotate/endscript khối (trong trường hợp này là lệnh yêu cầu gán /var/run/syslogd.pid vào /dev/null), nhưng chỉ thực hiện sau khi nó xử lý tất cả các bản ghi đã chỉ định.

Trong tệp cấu hình Logrotate với cấu trúc đơn giản gồm đường dẫn file log và thiết lập các cấu hình trong dấu {}.

3. Rotate theo dung lượng file log

Chúng ta có thể quy định tiến trình rotate dựa vào dung lượng file. Với /var/log/wtmp khi size 1M sẽ tạo tệp mới:

[root@test1 etc]# cat logrotate.conf
/var/log/wtmp {
	size 1M
    create 0664 root utmp
    rotate 1
}

Ví dụ trên các tùy chọn có ý nghĩa như sau:

  • size 1M: Logrotate chỉ chạy nếu kích thước tệp bằng (hoặc lớn hơn) kích thước này.
  • create: Rotate tệp gốc và tạo tệp mới với sự cho phép người dùng và nhóm được chỉ định.
  • rotate: Giới hạn số vòng quay của fle log. Vì vậy, điều này sẽ chỉ giữ lại 1 file log được rotate gần nhất.

4. Tùy chọn sao chép logrotate

Tiếp tục ghi thông tin nhật ký vào tệp vừa tạo sau khi xoay tệp nhật ký cũ.

[root@test1 etc]# cat logrotate.conf
/var/log/wtmp {
	size 1M
    copytruncate 
    rotate 1
}

Tùy chọn copytruncate hướng dẫn logrotate tạo bản sao của tệp gốc và cắt tệp gốc có kích thước 0 byte. Điều này giúp dịch vụ tương ứng thuộc về file log đó có thể ghi vào tệp thích hợp.

5. Tuỳ chọn nén

Logrotate sẽ nén tất cả các file log khi được rotate và mặc định sẽ sử dụng chương trình nén bằng gzip sử dụng tuỳ chọn sau: compress.

Chúng ta cũng có thể sử dụng các chương trình nén khác như xz, bzip2, zip bằng các sử dụng tùy chọn: compresscmd [Chương trình nén].

Ví dụ: Nén các tệp đã được rotate với gzip chúng ta thực hiện như sau:

[root@test1 etc]# cat logrotate.conf
/var/log/wtmp {
	size 1M
    create 0664 root utmp
    rotate 1
    compress
}

6. Tùy chọn logextate dateext

Rotate file log cũ có ngày trong tên file

[root@test1 etc]# cat logrotate.conf
/var/log/wtmp {
	size 1M
    create 0664 root utmp
    dateext 
    rotate 1
    compress
}

Cú pháp này sẽ chỉ làm việc một lần trong một ngày. Bởi vì khi nó rotate lần sau vào cùng ngày, tệp được xoay trước đó sẽ có cùng tên tệp. Vì vậy, logrotate sẽ không thành công sau lần chạy đầu tiên cùng ngày.

7. Tùy chọn đăng nhập hàng tháng, hàng ngày, hàng tuần

Rotate file log hàng tuần/hàng ngày/hàng tháng

👉 Để thực hiện hàng tháng một lần:

[root@test1 etc]# cat logrotate.conf
/var/log/wtmp {
	monthly
    copytruncate
    rotate 1
    compress
}

👉 Để thực hiện hàng tuần thực hiện như sau:

[root@test1 etc]# cat logrotate.conf
/var/log/wtmp {
	weekly
    copytruncate
    rotate 1
    compress
}

👉 Để thực hiện hàng ngày thực hiện như sau:

[root@test1 etc]# cat logrotate.conf
/var/log/wtmp {
	daily
    copytruncate
    rotate 1
    compress
}

8. Tùy chọn kết thúc postrotate postrotate:

Logrotate cho phép bạn chạy các tập lệnh shell tùy chỉnh của riêng bạn sau khi hoàn thành rotate file log. Cấu hình sau chỉ ra rằng nó sẽ thực thi myscript.sh sau khi logrotation.

[root@test1 etc]# cat logrotate.conf
/var/log/wtmp {
	size 1M
    copytruncate 
    rotate 1
    compress
    postrotate
           /home/root/myscript.sh
    endscript
}

9. Tùy chọn maxage Logrotate

Logrotate tự động loại bỏ rotate file sau một số ngày cụ thể.

Ví dụ: rotate file sẽ bị xóa sau 20 ngày.

[root@test1 etc]# cat logrotate.conf
/var/log/wtmp {
	size 1M
    copytruncate 
    rotate 1
    compress
    maxage 20
}

10. Tùy chọn Logrotate missingok

Chúng ta có thể bỏ qua thông báo lỗi khi tệp thực tế không có sẵn bằng cách sử dụng tùy chọn như bên dưới.

[root@test1 etc]# cat logrotate.conf
/var/log/wtmp {
	size 1M
    copytruncate 
    rotate 1
    compress
    missingok
}

11. Chạy Logrotate thủ công

Khi chúng ta muốn chạy ngay Logrotate, hãy dùng lệnh bên dưới:

logrotate -vf /etc/logrotate.d/

Trong đó các tuỳ chọn là:

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