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

Linux

Contents:

Đố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:

# logrotate
logrotate 3.8.7 - Copyright (C) 1995-2001 Red Hat, Inc.

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:

# apt-get update
# apt-get install logrotate

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

# yum update
# yum install logrotate

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.

root@itfromzero:~# cat /etc/logrotate.conf

Nội dung:

# 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
}

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:

root@itfromzero:~# cat /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

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:

root@itfromzero:~# cat /etc/logrotate.d/yum
/var/log/yum.log {
    missingok
    notifempty
    yearly
    create 0600 root root
}

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:

root@itfromzero:~# nano /etc/logrotate.d/send_file

Nội dung như sau:

/var/log/send_file.log {
	daily
	rotate 4
    missingok
    notifempty
	create 660 root root
}

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:

root@itfromzero:~# logrotate -d /etc/logrotate.d/send_file

Output:

reading config file /etc/logrotate.d/send_file
reading config info for /var/log/send_file.log

Handling 1 logs

rotating pattern: /var/log/send_file.log  after 1 days (4 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/send_file.log
  log does not need rotating

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ụ:

/var/log/send_file.log /var/log/*.log/

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ụ:

Prerotate
systemctl restart httpd > /dev/null
Endscript

Để 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ụ:

Postrotate
systemctl restart httpd > /dev/null
Endscript

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:

root@itfromzero:~# logrotate -vf /etc/logrotate.d/send_file

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: