Cách Quản Lý File Log Hiệu Quả Với Logrotate Trên Ubuntu 22.04

Cách Quản Lý File Log Hiệu Quả Với Logrotate Trên Ubuntu 22.04

Logrotate là một công cụ mạnh mẽ giúp tự động quản lý và tối ưu hóa file log trên hệ thống Linux. Nếu không được luân phiên, nén và dọn dẹp định kỳ, các file log có thể phát triển không kiểm soát, chiếm nhiều dung lượng đĩa và ảnh hưởng đến hiệu suất hệ thống.

Trên Ubuntu 22.04, Logrotate được cài đặt mặc định và đã được cấu hình để tự động xử lý log của các gói phần mềm quan trọng, bao gồm cả rsyslog – trình quản lý log mặc định của hệ thống.

Để quản lý file log hiệu quả trên Ubuntu 22.04, bạn cần một hệ thống ổn định. VPS hosting từ các nhà cung cấp uy tín đảm bảo hiệu suất cao, hỗ trợ tối ưu cho việc cấu hình Logrotate. Khám phá các giải pháp VPS hosting chất lượng để nâng cấp hệ thống của bạn ngay hôm nay!

Trong hướng dẫn này, bạn sẽ tìm hiểu về cấu hình mặc định của Logrotate và cách thiết lập quy tắc luân phiên log cho một ứng dụng tùy chỉnh, giúp duy trì hệ thống hoạt động ổn định và hiệu quả.

Yêu cầu

Bài hướng dẫn này giả định bạn có một máy chủ Ubuntu 22.04 với một người dùng không phải root có quyền sudo, như đã mô tả trong bài Thiết Lập Máy Chủ Ban Đầu với Ubuntu 22.04 của DataOnline.

Logrotate cũng có sẵn trên nhiều bản phân phối Linux khác, tuy nhiên cấu hình mặc định có thể khác nhau. Các phần còn lại của bài hướng dẫn vẫn áp dụng nếu phiên bản Logrotate của bạn tương tự như của Ubuntu 22.04. Hãy làm theo Bước 1 để xác định phiên bản Logrotate của bạn.

Đăng nhập vào máy chủ với tài khoản có quyền sudo để bắt đầu.

Bước 1 -Xác nhận phiên bản Logrotate

Logrotate được cài đặt sẵn trên Ubuntu. Tuy nhiên, nếu bạn cần cài đặt, hãy chạy các lệnh sau để cập nhật danh sách gói và cài đặt Logrotate:

sudo apt update
sudo apt install logrotate

Nếu bạn đang sử dụng máy chủ không phải Ubuntu, trước tiên hãy đảm bảo rằng Logrotate đã được cài đặt bằng cách yêu cầu thông tin phiên bản:

logrotate --version
Output
logrotate 3.19.0

    Default mail command:       /usr/bin/mail
    Default compress command:   /bin/gzip
    Default uncompress command: /bin/gunzip
    Default compress extension: .gz
    Default state file path:    /var/lib/logrotate/status
    ACL support:                yes
    SELinux support:            yes

Nếu Logrotate đã được cài đặt nhưng số phiên bản khác xa, bạn có thể gặp phải một số vấn đề với các tùy chọn cấu hình được khám phá trong bài hướng dẫn này. Hãy tham khảo tài liệu (man page) của Logrotate bằng cách chạy:

man logrotate

Bạn cũng có thể xem phiên bản trực tuyến của tài liệu Logrotate. Tiếp theo, chúng ta sẽ xem cấu trúc cấu hình mặc định của Logrotate trên Ubuntu.

Bước 2 – Khám Phá Cấu Hình Logrotate

Thông tin cấu hình của Logrotate trên Ubuntu có thể được tìm thấy ở hai nơi:

/etc/logrotate.conf: File này chứa một số cài đặt mặc định và thiết lập việc luân phiên cho một số file log không thuộc về bất kỳ gói hệ thống nào. File này cũng sử dụng lệnh include để lấy cấu hình từ bất kỳ file nào trong thư mục /etc/logrotate.d.

/etc/logrotate.d/: Đây là nơi các gói phần mềm cài đặt mà cần hỗ trợ luân phiên log sẽ đặt cấu hình Logrotate của chúng. Trên một cài đặt chuẩn, bạn sẽ có sẵn các file cấu hình cho các công cụ hệ thống cốt lõi như apt, dpkg, rsyslog, v.v.

Theo mặc định, logrotate.conf sẽ cấu hình luân phiên log hàng tuần, với các file log thuộc quyền sở hữu của người dùng root và nhóm syslog, giữ lại bốn file log cũ (rotate 4), và tạo file log mới rỗng sau khi file hiện tại được luân phiên (create).

Hãy xem cấu hình Logrotate của một gói phần mềm trong /etc/logrotate.d. Ví dụ, hãy xem file cấu hình của tiện ích apt:

cat /etc/logrotate.d/apt
Output
/var/log/apt/term.log {
  rotate 12
  monthly
  compress
  missingok
  notifempty
}

/var/log/apt/history.log {
  rotate 12
  monthly
  compress
  missingok
  notifempty
}

File này chứa các khối cấu hình cho hai file log khác nhau trong thư mục /var/log/apt:

term.loghistory.logChúng đều sử dụng các tùy chọn sau (các tùy chọn không được đặt trong khối cấu hình này sẽ kế thừa giá trị mặc định hoặc giá trị trong /etc/logrotate.conf):

rotate 12: Giữ lại 12 file log cũ. Tùy chọn này ghi đè giá trị mặc định là rotate 4.
monthly: Luân phiên log mỗi tháng. Ghi đè giá trị mặc định hàng tuần.
compress: Nén các file log sau khi luân phiên, sử dụng gzip theo mặc định (file sẽ có đuôi .gz). Tham số nén có thể được thay đổi bằng tùy chọn compresscmd.
missingok: Không ghi ra thông báo lỗi nếu file log không tồn tại.
notifempty: Không luân phiên file log nếu nó trống.

Các tệp cấu hình này cũng kế thừa hành vi mặc định create, cho phép Logrotate tạo tệp nhật ký mới sau khi luân phiên. Hành vi này có thể được ghi đè bằng tùy chọn nocreate, mặc dù điều đó sẽ vô hiệu hóa hầu hết các chức năng khác.

Có rất nhiều tùy chọn cấu hình khác. Bạn có thể tìm hiểu tất cả bằng cách nhập lệnh sau trong terminal để mở trang hướng dẫn của Logrotate

Tiếp theo, chúng ta sẽ thiết lập một tệp cấu hình để xử lý nhật ký cho một dịch vụ giả định có tên your-app.

Bước 3 – Thiết lập cấu hình ví dụ

Để quản lý file log của các ứng dụng bên ngoài các dịch vụ hệ thống đã được đóng gói sẵn, bạn có hai lựa chọn:

  1. Tạo một file cấu hình Logrotate mới và đặt nó trong /etc/logrotate.d/. File này sẽ được chạy hàng ngày với quyền root cùng với các công việc Logrotate chuẩn khác.

  2. Tạo một file cấu hình mới và chạy nó ngoài cấu hình Logrotate mặc định của Ubuntu. Điều này chỉ thực sự cần thiết nếu bạn cần chạy Logrotate với tư cách người dùng không phải root, hoặc nếu bạn muốn luân phiên log thường xuyên hơn hàng ngày (cấu hình hàng giờ trong /etc/logrotate.d/ sẽ không hiệu quả vì Logrotate của hệ thống chỉ chạy một lần mỗi ngày).

Hãy cùng xem qua hai phương án với các thiết lập ví dụ.

Thêm cấu hình vào

Giả sử bạn muốn cấu hình luân phiên log cho một máy chủ web giả định có file access.log error.log nằm trong thư mục /var/log/your-app/, và dịch vụ này chạy với người dùng và nhóm www-data.

Để thêm cấu hình cho file log của your-app vào thư mục /etc/logrotate.d/, mở một file mới:

sudo nano /etc/logrotate.d/your-app

Thêm các dòng sau vào file cấu hình:

/etc/logrotate.d/your-app
/var/log/your-app/*.log {
    daily
    missingok
    rotate 14
    compress
    notifempty
    create 0640 www-data www-data
    sharedscripts
    postrotate
        systemctl reload your-app
    endscript
}

Giải thích một số chỉ thị mới:

create 0640 www-data www-data: Sau khi luân phiên, Logrotate sẽ tạo file log mới với quyền 0640, chủ sở hữu và nhóm là www-data.
sharedscripts: Tham số này cho biết rằng bất kỳ script nào được thêm vào cấu hình sẽ chạy chỉ một lần cho toàn bộ tập hợp file log khớp với mẫu (với wildcard *). Nếu không có tham số này, script trong phần postrotate sẽ chạy cho từng file log riêng lẻ.
postrotate ... endscript: Khối này chứa script được chạy sau khi file log được luân phiên. Trong trường hợp này, chúng ta đang reload lại ứng dụng giả định your-app để nó chuyển sang file log mới. Nếu bạn cần thực hiện tác vụ sau khi file log đã được nén, hãy dùng khối lastaction thay thế.

Để lưu và thoát nano, nhấn Ctrl+X, sau đó nhấn YEnter. Bạn có thể thử nghiệm file cấu hình bằng cách chạy chế độ dry run:

sudo logrotate /etc/logrotate.conf --debug

Lệnh này gọi logrotate, trỏ nó đến tệp cấu hình tiêu chuẩn và bật chế độ gỡ lỗi.

Thông tin sẽ được in ra, hiển thị những tệp nhật ký nào mà Logrotate đang xử lý và những hành động mà nó sẽ thực hiện với chúng. Nếu mọi thứ trông ổn, quá trình thiết lập đã hoàn tất. Nhiệm vụ Logrotate tiêu chuẩn sẽ chạy một lần mỗi ngày và bao gồm cấu hình mới của bạn.

Tiếp theo, chúng ta sẽ thử một thiết lập không sử dụng cấu hình mặc định của Ubuntu.

Tạo cấu hình Logrotate độc lập

Trong ví dụ này, giả sử bạn có một ứng dụng chạy với người dùng sammy, tạo file log nằm trong thư mục /home/sammy/logs/ và bạn muốn luân phiên log này hàng giờ. Vì vậy, bạn cần cấu hình ngoài hệ thống mặc định của Ubuntu.

Trước tiên, tạo file cấu hình trong thư mục home:

nano /home/sammy/logrotate.conf

Sau đó, dán cấu hình sau vào file:

/home/sammy/logrotate.conf
/home/sammy/logs/*.log {
    hourly
    missingok
    rotate 24
    compress
    create
}

Lưu và đóng file. Cấu hình này sẽ luân phiên file log hàng giờ, nén và giữ lại 24 file log cũ, đồng thời tạo file log mới thay thế file đã luân phiên.

Để kiểm tra cấu hình, hãy tạo một file log mẫu. Đầu tiên, chuyển đến thư mục home:

cd ~
mkdir logs
touch logs/access.log

Bây giờ, hãy chạy Logrotate với file cấu hình bạn vừa tạo. Vì file log thuộc sở hữu của sammy, không cần sudo, nhưng bạn cần chỉ định file trạng thái (state file) để Logrotate ghi nhận thông tin về lần chạy trước. Do bạn không sử dụng cấu hình mặc định của Ubuntu (nơi state file được lưu tại /var/lib/logrotate/status), bạn cần tự chỉ định vị trí file trạng thái. Ví dụ, đặt file trạng thái trong thư mục home:

logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose
Output
reading config file /home/sammy/logrotate.conf

Handling 1 logs

rotating pattern: /home/sammy/logs/*.log  hourly (24 rotations)
empty log files are rotated, old logs are removed
considering log /home/sammy/logs/access.log
  log does not need rotating

Tham số --verbose sẽ in ra thông tin chi tiết về quá trình Logrotate. Trong trường hợp này, log chưa được luân phiên vì file log mới được tạo và chưa đủ thời gian (0 giờ).

Nếu bạn xem file trạng thái bằng lệnh:

cat /home/sammy/logrotate-state
Output
logrotate state -- version 2
"/home/sammy/logs/access.log" 2022-07-2-19:0:0

Logrotate đã ghi nhận thông tin về file log và thời điểm xử lý lần cuối. Nếu chạy lại lệnh sau một giờ, file log sẽ được luân phiên như mong đợi.

Nếu bạn muốn ép Logrotate luân phiên file log dù không đạt điều kiện, hãy sử dụng tham số --force:

logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose --force

Tham số này rất hữu ích khi bạn đang kiểm tra các script như postrotate.

Cuối cùng, để tự động chạy Logrotate hàng giờ, bạn cần thiết lập một cron job. Mở crontab cho người dùng:

crontab -e

Nếu đây là lần đầu bạn sử dụng cron, bạn có thể được hỏi chọn trình soạn thảo, ví dụ nano. Di chuyển xuống cuối file và thêm dòng sau:

crontab
14 * * * * /usr/sbin/logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state

Dòng lệnh này sẽ chạy vào phút thứ 14 của mỗi giờ, mỗi ngày. Nó chạy lệnh Logrotate tương tự như bạn đã thử nghiệm, với đường dẫn đầy đủ cho logrotate (khuyến khích sử dụng đường dẫn đầy đủ trong cron).

Lưu file và thoát. Cron job này sẽ tự động chạy theo lịch trình đã định. Sau khoảng một giờ, bạn sẽ thấy file log được luân phiên và nén (ví dụ: access.log.1.gz hoặc access.log.2.gz nếu bạn đã chạy Logrotate với tham số --force).

Kết luận

Trong bài hướng dẫn này, bạn đã tìm hiểu cách xác minh phiên bản Logrotate, khám phá cấu hình mặc định trên Ubuntu 22.04 và thiết lập hai loại cấu hình tùy chỉnh để quản lý file log hiệu quả. Việc hiểu rõ cách Logrotate hoạt động sẽ giúp bạn tối ưu hóa không gian lưu trữ, duy trì hiệu suất hệ thống và đảm bảo rằng các file log luôn được xoay vòng đúng cách.

Nếu bạn muốn tìm hiểu sâu hơn về các lệnh và tùy chọn cấu hình nâng cao của Logrotate, hãy tham khảo trang hướng dẫn chính thức bằng cách chạy lệnh sau trong terminal:man logrotate

Ngoài ra, bạn có thể khám phá thêm các phương pháp giám sát log hệ thống hoặc tích hợp Logrotate với các công cụ phân tích log như ELK Stack để nâng cao khả năng quản lý và theo dõi dữ liệu log trên hệ thống của mình. Khi cấu hình Logrotate, việc chọn VPS phù hợp rất quan trọng. Bạn có thể mua VPS giá rẻ với cấu hình mạnh mẽ, giúp tiết kiệm chi phí mà vẫn đảm bảo quản lý log hiệu quả. Tìm hiểu ngay các gói VPS giá rẻ để tối ưu hóa hệ thống Ubuntu 22.04 của bạn!

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *