Thứ năm, 09/11/2017 | 00:00 GMT+7

Cách quản lý các tệp log bằng Logrotate trên Ubuntu 16.04

Logrotate là một tiện ích hệ thống quản lý việc tự động xoay và nén các file log . Nếu các file log không được xoay, nén và cắt bỏ định kỳ, cuối cùng chúng có thể tiêu tốn tất cả dung lượng đĩa có sẵn trên hệ thống.

Logrotate được cài đặt theo mặc định trên Ubuntu 16.04 và được cài đặt để xử lý các nhu cầu xoay vòng log của tất cả các gói đã cài đặt, bao gồm rsyslog , bộ xử lý log hệ thống mặc định.

Trong bài viết này, ta sẽ khám phá cấu hình Logrotate mặc định, sau đó cấu hình xoay vòng log cho một ứng dụng tùy chỉnh hư cấu.

Yêu cầu

Hướng dẫn này giả sử bạn có server Ubuntu 16.04, với user không hỗ trợ sudo root, như được mô tả trong Cài đặt server ban đầu với Ubuntu 16.04 .

Logrotate cũng có sẵn trên nhiều bản phân phối Linux khác, nhưng cấu hình mặc định có thể khác. Các phần khác của hướng dẫn này vẫn sẽ được áp dụng miễn là version Logrotate của bạn tương tự như version Ubuntu 16.04. Làm theo Bước 1 để xác định version Logrotate của bạn.

Đăng nhập vào server của bạn với quyền là user đã bật sudo của bạn để bắt đầu.

Xác nhận version Logrotate của bạn

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

  • logrotate --version
Output
logrotate 3.8.7

Nếu Logrotate không được cài đặt, bạn sẽ gặp lỗi. Vui lòng cài đặt phần mềm bằng trình quản lý gói của bản phân phối Linux của bạn.

Nếu Logrotate được cài đặt nhưng số version khác nhau đáng kể, bạn có thể gặp sự cố với một số cấu hình được thảo luận trong hướng dẫn này. Tham khảo tài liệu cho version cụ thể của bạn logrotate bằng cách đọc của nó man trang:

  • man logrotate

Tiếp theo, ta sẽ xem xét cấu trúc cấu hình mặc định của Logrotate trên Ubuntu.

Khám phá cấu hình Logrotate

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

  • /etc/logrotate.conf : file này chứa một số cài đặt mặc định và cài đặt xoay vòng cho một số log không thuộc sở hữu của bất kỳ gói hệ thống nào. Nó cũng sử dụng câu lệnh include để lấy cấu hình từ các file nào trong folder /etc/logrotate.d .
  • /etc/logrotate.d/ : đây là nơi bất kỳ gói nào bạn cài đặt cần trợ giúp xoay vòng log sẽ đặt cấu hình Logrotate của chúng. Trên bản cài đặt tiêu chuẩn, bạn nên có các file ở đây cho các công cụ hệ thống cơ bản 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 ( weekly ), với các file log thuộc sở hữu của user root và group nhật ký hệ thống ( su root syslog ), với bốn file log được giữ ( rotate 4 ) và các file log trống mới được được tạo sau khi cái hiện tại được xoay ( create ).

Hãy xem file cấu hình Logrotate của gói trong /etc/logrotate.d . cat file cho tiện ích gói 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 }

Tệp này chứa các đoạn cấu hình cho hai file log khác nhau trong folder /var/log/apt/ : term.loghistory.log . Cả hai đều có các tùy chọn giống nhau. Bất kỳ tùy chọn nào không được đặt trong các đoạn cấu hình này sẽ kế thừa các giá trị mặc định hoặc các giá trị được đặt trong /etc/logrotate.conf . Các tùy chọn được đặt cho log apt là:

  • rotate 12 : giữ mười hai file log cũ.
  • monthly : luân phiên mỗi tháng một lần.
  • compress : nén các file đã xoay. điều này sử dụng gzip theo mặc định và dẫn đến các file kết thúc bằng .gz . Lệnh nén có thể được thay đổi bằng cách sử dụng compresscmd tùy chọn.
  • missingok : không viết thông báo lỗi nếu thiếu file log .
  • notifempty : không xoay file log nếu nó trống.

Có nhiều tùy chọn cấu hình hơn có sẵn. Bạn có thể đọc về tất cả chúng bằng lệnh man logrotate trên dòng lệnh để hiển thị trang hướng dẫn sử dụng Logrotate.

Tiếp theo, ta sẽ cài đặt file cấu hình để xử lý log cho một dịch vụ hư cấu.

Cài đặt cấu hình mẫu

Để quản lý các file log cho các ứng dụng bên ngoài các dịch vụ hệ thống được đóng gói sẵn và cấu hình sẵn, ta có hai tùy chọn:

  1. Tạo một file cấu hình Logrotate mới và đặt nó vào /etc/logrotate.d/ . Điều này sẽ được chạy hàng ngày với quyền là user root cùng với tất cả các công việc Logrotate tiêu chuẩn khác.
  2. Tạo một file cấu hình mới và chạy nó bên ngoài cài đặt 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 quyền là user không phải root hoặc nếu bạn muốn xoay vòng log thường xuyên hơn hàng ngày (cấu hình hourly trong /etc/logrotate.d/ sẽ không hiệu quả, vì cài đặt Logrotate của hệ thống chỉ chạy một lần một ngày).

Hãy xem qua hai tùy chọn này với một số cài đặt ví dụ.

Thêm cấu hình vào /etc/logrotate.d/

Ta muốn cấu hình xoay vòng log cho một web server hư cấu đặt access.logerror.log vào /var/log/example-app/ . Nó chạy với quyền là user và group www-data .

Để thêm một số cấu hình vào /etc/logrotate.d/ , trước tiên hãy mở một file mới ở đó:

  • sudo nano /etc/logrotate.d/example-app

Đây là một file cấu hình ví dụ có thể xử lý các log này:

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

Một số chỉ thị cấu hình mới trong file này là:

  • create 0640 www-data www-data : điều này tạo một file log trống mới sau khi xoay vòng, với các quyền được chỉ định ( 0640 ), chủ sở hữu ( www-data ) và group (cũng www-data ).
  • sharedscripts : cờ này nghĩa là bất kỳ tập lệnh nào được thêm vào cấu hình chỉ được chạy một lần cho mỗi lần chạy, thay vì cho từng file được xoay vòng. Vì cấu hình này sẽ trùng với hai file log trong folder example-app , nên tập lệnh được chỉ định trong postrotate sẽ chạy hai lần mà không có tùy chọn này.
  • postrotate to endscript : khối này chứa script để chạy sau khi xoay file log . Trong trường hợp này, ta đang reload ứng dụng mẫu của bạn . Điều này đôi khi cần thiết để ứng dụng của bạn chuyển sang file log mới được tạo. Lưu ý postrotate chạy trước khi các bản ghi được nén. Quá trình nén có thể mất nhiều thời gian và phần mềm của bạn sẽ chuyển sang file log mới ngay lập tức. Đối với các việc cần chạy sau khi nén log , hãy sử dụng khối lastaction .

Sau khi tùy chỉnh cấu hình để phù hợp với nhu cầu của bạn và lưu nó vào /etc/logrotate.d , bạn có thể kiểm tra nó bằng cách chạy thử:

  • sudo logrotate /etc/logrotate.conf --debug

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

Thông tin sẽ in ra các file log Logrotate đang xử lý và những gì nó sẽ làm với chúng. Nếu tất cả đều ổn, bạn đã hoàn tất. Công việc Logrotate tiêu chuẩn sẽ chạy mỗi ngày một lần và bao gồm cấu hình mới của bạn.

Tiếp theo, ta sẽ thử cài đặt hoàn toàn 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, ta có một ứng dụng đang chạy dưới dạng sammy user của ta , tạo log được lưu trữ trong /home/sammy/logs/ . Ta muốn xoay các log này hàng giờ, vì vậy ta cần cài đặt điều này bên ngoài cấu trúc /etc/logrotate.d do Ubuntu cung cấp.

Đầu tiên, ta sẽ tạo một file cấu hình trong folder chính của ta . Mở nó trong một editor :

  • nano /home/sammy/logrotate.conf

Sau đó paste vào cấu hình sau:

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

Lưu và đóng file . Ta đã thấy tất cả các tùy chọn này trong các bước trước, nhưng hãy tóm tắt: cấu hình này sẽ xoay các file hàng giờ, nén và giữ hai mươi bốn log cũ và tạo file log mới để thay thế file đã xoay.

Bạn cần tùy chỉnh cấu hình cho phù hợp với ứng dụng của bạn , nhưng đây là một khởi đầu tốt.

Để kiểm tra xem nó có hoạt động không, hãy tạo một file log :

  • cd ~
  • mkdir logs
  • touch logs/access.log

Bây giờ ta có một file log trống ở đúng vị trí, hãy chạy lệnh logrotate .

Vì các bản ghi thuộc sở hữu của sammy nên ta không cần sử dụng sudo . Chúng tôi cần phải xác định một file trạng thái mặc dù. Tệp này ghi lại những gì logrotate đã nhìn thấy và đã làm trong lần chạy cuối cùng của nó, để nó biết phải làm gì trong lần chạy tiếp theo. Điều này được xử lý cho ta khi sử dụng cài đặt Ubuntu Logrotate (có thể tìm thấy nó tại /var/lib/logrotate/status ), nhưng ta cần thực hiện thủ công ngay bây giờ.

Ta sẽ yêu cầu Logrotate đặt file trạng thái ngay trong folder chính của ta cho ví dụ này. Tôi có thể đến bất cứ nơi nào có thể tiếp cận và thuận tiện:

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

--verbose sẽ in ra thông tin chi tiết về những gì Logrotate đang làm. Trong trường hợp này, có vẻ như nó không xoay bất cứ thứ gì. Đây là lần đầu tiên Logrotate nhìn thấy file log này, theo như những gì được biết, file đã có tuổi đời 0 giờ và không nên xoay nó.

Nếu ta xem file trạng thái, ta sẽ thấy rằng Logrotate đã ghi lại một số thông tin về quá trình chạy:

  • cat /home/sammy/logrotate-state
Output
logrotate state -- version 2 "/home/sammy/logs/access.log" 2017-11-7-19:0:0

Logrotate lưu ý các bản ghi mà nó đã nhìn thấy và thời điểm nó xem xét chúng để quay. Nếu ta chạy cùng lệnh này một giờ sau đó, log sẽ được xoay như mong đợi.

Nếu bạn muốn buộc Logrotate xoay file log khi nó không có, hãy sử dụng cờ --force :

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

Điều này rất hữu ích khi kiểm tra postrotate và các tập lệnh khác.

Cuối cùng, ta cần cài đặt cron job để chạy Logrotate mỗi giờ. Mở crontab của user của bạn:

  • crontab -e

Thao tác này sẽ mở ra một file văn bản. Có thể có một số comment đã có trong file giải thích cú pháp cơ bản được mong đợi. Di chuyển con trỏ xuống một dòng trống mới ở cuối file và thêm phần sau:

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

Nhiệm vụ này sẽ chạy vào phút thứ 14 hàng giờ, hàng ngày. Về cơ bản, nó chạy cùng một lệnh logrotate mà ta đã chạy trước đó, mặc dù ta đã mở rộng logrotate thành đường dẫn đầy đủ của nó là /usr/sbin/logrotate chỉ để an toàn. Thực hành tốt là càng rõ ràng càng tốt khi viết cron job.

Lưu file và thoát. Thao tác này sẽ cài đặt crontab và tác vụ của ta sẽ chạy theo lịch trình đã chỉ định.

Nếu ta truy cập lại folder log của bạn trong repository ảng một giờ, ta sẽ tìm thấy file log đã xoay và nén access.log.1.gz (hoặc .2.gz nếu bạn chạy Logrotate với cờ --force ).

Kết luận

Trong hướng dẫn này, ta đã xác minh version Logrotate của bạn , khám phá cấu hình Ubuntu Logrotate mặc định và cài đặt hai loại cấu hình tùy chỉnh khác nhau. Để tìm hiểu thêm về dòng lệnh và các tùy chọn cấu hình có sẵn cho Logrotate, bạn có thể đọc trang hướng dẫn sử dụng của nó bằng cách chạy man logrotate trong terminal của bạn.


Tags:

Các tin liên quan

Cách sử dụng Logrotate và S3cmd để lưu trữ log vào bộ nhớ đối tượng trên Ubuntu 16.04
2017-11-09
Cách tạo VPN điểm-điểm với WireGuard trên Ubuntu 16.04
2017-11-09
Cách đánh giá trang web bằng Firefox, Siege và Sproxy trên Ubuntu 16.04
2017-11-07
Cách cài đặt Nagios 4 và theo dõi server của bạn trên Ubuntu 16.04
2017-11-06
Cách cài đặt và cấu hình Nextcloud trên Ubuntu 16.04
2017-10-06
Cách cài đặt WordPress với Caddy trên Ubuntu 16.04
2017-08-03
Cách cài đặt và cấu hình GoCD trên Ubuntu 16.04
2017-08-01
Cách cấu hình GoCD với Let's Encrypt SSL Certificates trên Ubuntu 16.04
2017-08-01
Cách cài đặt và cấu hình SimpleSAMLphp để Xác thực SAML trên Ubuntu 16.04
2017-07-30
Cách sử dụng chế độ độc lập của Certbot để lấy chứng chỉ SSL mã hóa trên Ubuntu 16.04
2017-07-28