Làm thế nào để xoay nhật ký dựa trên một khoảng thời gian trừ khi nhật ký vượt quá một kích thước nhất định?


20

Từ trang man của logrotate:

Kích thước phút Kích thước
tệp nhật ký được xoay khi chúng lớn hơn byte kích thước, nhưng không trước khoảng thời gian được chỉ định bổ sung (hàng ngày, hàng tuần, hàng tháng hoặc hàng năm). Tùy chọn kích thước liên quan là tương tự ngoại trừ việc nó loại trừ lẫn nhau với các tùy chọn khoảng thời gian và nó làm cho các tệp nhật ký được xoay mà không quan tâm đến thời gian quay cuối cùng. Khi phút kích thước được sử dụng, cả kích thước và dấu thời gian của tệp nhật ký đều được xem xét.

kích thước kích thước Các
tệp nhật ký được xoay khi chúng lớn hơn kích thước byte. Nếu kích thước được theo sau bởi k, kích thước được giả định là tính bằng kilobyte. Nếu M được sử dụng, kích thước tính bằng megabyte và nếu G được sử dụng, kích thước tính bằng gigabyte. Vì vậy, kích thước 100, kích thước 100k, kích thước 100M và kích thước 100Gare đều hợp lệ.

Tôi đặt kích thước5Mkhoảng thời gianhàng tuần với suy nghĩ rằng các bản ghi sẽ được xoay theo từng tuần và xoay vòng bổ sung sẽ xảy ra nếu kích thước của bản ghi vượt quá 5M. Nhưng điều xảy ra là nhật ký không được xoay vòng trừ khi vượt quá 5 triệu, đó dường như là những gì mà kích thước tối thiểu phải làm.

Tôi đang giải thích hướng dẫn sử dụng sai? Làm cách nào để có được nhật ký xoay vòng hàng tuần VÀ nếu vượt quá 5 triệu?

CHỈNH SỬA:

Tôi không chắc liệu các thông tin sau có liên quan hay không, nhưng chỉ để bổ sung:

Tôi đang sử dụng rsyslog để thực hiện đăng nhập chính cho tin nhắn, an toàn, cron, maillog, boot. Sau đây là ngày xoay và kích thước tệp của nhật ký áp chót trong đó kích thước và khoảng được đặt như mô tả ở trên:

filename  rotation date  file size
messages  20130129       5.3MB
secure    20130113       5.1kB
cron      20130113       3.6kB
maillog   20130113       1.1kB

Như có thể thấy, chỉ có tin nhắn được xoay.

EDIT2:

Tôi nên kiểm tra với man logrotate. Họ thực sự đã nâng cấp nó với tùy chọn maxsize . Đây phải là những gì tôi đang tìm kiếm:

maxsize kích thước
file Log được luân chuyển khi họ phát triển lớn hơn so với kích thước byte ngay cả trước khi khoảng thời gian quy định bổ sung (hàng ngày, hàng tuần, hàng tháng, hoặc hàng năm). Tùy chọn kích thước liên quan là tương tự ngoại trừ việc nó loại trừ lẫn nhau với các tùy chọn khoảng thời gian và nó làm cho các tệp nhật ký được xoay mà không quan tâm đến thời gian quay cuối cùng. Khi maxsize được sử dụng, cả kích thước và dấu thời gian của tệp nhật ký đều được xem xét.

Câu trả lời:


24

Một số câu hỏi được trả lời ở đây: logrotate hàng ngày và kích thước?

Thông thường logrotatesẽ chỉ được chạy một lần mỗi ngày, vì vậy giới hạn kích thước sẽ không được tôn trọng chính xác. logrotateTệp trạng thái (có thể /var/lib/logrotate.status) chỉ lưu trữ ngày (không phải thời gian), không dành cho việc sử dụng thường xuyên hơn, do đó bạn không thể xoay các tệp thường xuyên hơn ( Cập nhật : phiên bản 3.85 thêm hỗ trợ hàng giờ và lưu trữ dấu thời gian hoàn chỉnh trong tệp trạng thái .)

Bạn không nói rằng syslogdbạn đang sử dụng, rsyslogsyslog-ng hỗ trợ xoay vòng dựa trên kích thước tự quản lý, do đó bạn sẽ có thể khiến chúng xoay theo kích thước và có logrotatethể xoay hàng tuần (mặc dù một số suy nghĩ có thể được yêu cầu cho đặt tên tệp để đảm bảo xoay tệp đồng thời không vô tình xóa một cái gì đó).

Một tùy chọn khác là sử dụng nhật ký đường ống, giống như Apache, trên thực tế, Apache-2.4 rotatelogs hỗ trợ chính xác tính năng này (các phiên bản trước chỉ hỗ trợ kích thước hoặc thời gian độc lập). Bạn không nói các bản ghi có nguồn gốc từ đâu, nhưng bạn có thể đăng nhập vào một đường ống hoặc fifo và sử dụng rotatelogs, nếu điều đó được hỗ trợ.

Với logrotate<= v3.8.0, ba kịch bản được hỗ trợ là:

  1. kích thước xoay theo kích thước, tối đa một lần mỗi ngày, bất kể thời gian trôi qua
  2. timeperiod xoay vô điều kiện bởi timeperiod, bất kể kích thước
  3. minize & timeperiod nếu kích thước logfile vượt quá minize, sau đó xoay theo timeperiod. Một cách sử dụng phổ biến là "minize 1" có nghĩa là các bản ghi 0 byte không được xoay vòng, giảm thiểu sự lộn xộn.

logrotate-3.8.1 thêm:

  1. maxsize & timeperiod xoay khi một trong hai kích thước vượt quá maxsize hoặc sau khi thời gian trôi qua. logrotatecó thể cần được chạy nhiều hơn mặc định một lần mỗi ngày trong trường hợp này.

logrotate-3.8.5 thêm:

  1. hỗ trợ hàng giờ và lưu trữ dấu thời gian hoàn chỉnh trong tệp trạng thái. Bạn nên chạy logrotate(ít nhất) hàng giờ cho việc này.

Xin vui lòng xem cập nhật của tôi, cảm ơn cho liên kết. Có vẻ như một số kịch bản được yêu cầu? Phút có vẻ không hữu ích lắm, tôi tự hỏi tại sao họ lại có nó thay vì tối đa hóa.
Câu hỏi tràn

1
Yay, tùy chọn maxsize hiện có sẵn. Trường hợp đóng :)
Câu hỏi tràn

phát hiện ra rằng trong các tài liệu trước khi tôi đọc cập nhật của bạn ... câu trả lời hiện đã được mở rộng. cám ơn.
mr.spuratic

1
> tệp trạng thái của logrotate (có thể /var/lib/logrotate.status) chỉ lưu trữ ngày (không phải lần) Tuyên bố này có thể đã hết hạn. Tôi vừa kiểm tra tệp trạng thái logrotate của mình và nó chứa dấu thời gian với độ phân giải thứ hai: "/var/log/kern.log" 2018-3-12-1: 8: 16
hyperair 13/03/18
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.