2013-11-23 14 views
31

chúng tôi sử dụng logrotate và nó chạy hàng ngày ... bây giờ chúng tôi đã có một số tình huống mà nhật ký đã phát triển đáng kể (đọc: gigbaytes) và giết chết máy chủ của chúng tôi. Vì vậy, bây giờ chúng tôi muốn thiết lập một kích thước tối đa cho các bản ghi ....Cài đặt Centos/Linux logrotate thành kích thước tệp tối đa cho tất cả nhật ký

Tôi có thể thêm nó vào logrotate.conf không?

kích thước 50M

và sau đó nó sẽ áp dụng cho tất cả các file log? Hoặc tôi có cần thiết lập điều này trên cơ sở cho mỗi nhật ký không?

Hoặc bất kỳ lời khuyên nào khác?

(ps. Tôi hiểu rằng nếu bạn muốn được thông báo là nhật ký phát triển như được mô tả và những gì chúng tôi muốn làm không lý tưởng - nhưng tốt hơn là không thể đăng nhập được nữa vì không có sẵn dung lượng)

cảm ơn, Sean

Trả lời

37

Nó xác định kích thước của tập tin log để kích hoạt quay. Ví dụ: size 50M sẽ kích hoạt xoay vòng nhật ký khi tệp có kích thước 50MB trở lên. Bạn có thể sử dụng hậu tố M cho megabyte, k cho kilobyte và G cho gigabyte. Nếu không có hậu tố được sử dụng, nó sẽ lấy nó để có nghĩa là byte. Bạn có thể kiểm tra ví dụ ở cuối. Có ba chỉ thị có sẵn size, maxsizeminsize. Theo manpage:

minsize size 
       Log files are rotated when they grow bigger than size bytes, 
       but not before the additionally specified time interval (daily, 
       weekly, monthly, or yearly). The related size option is simi- 
       lar except that it is mutually exclusive with the time interval 
       options, and it causes log files to be rotated without regard 
       for the last rotation time. When minsize is used, both the 
       size and timestamp of a log file are considered. 

size size 
       Log files are rotated only if they grow bigger then size bytes. 
       If size is followed by k, the size is assumed to be in kilo- 
       bytes. If the M is used, the size is in megabytes, and if G is 
       used, the size is in gigabytes. So size 100, size 100k, size 
       100M and size 100G are all valid. 
maxsize size 
       Log files are rotated when they grow bigger than size bytes even before 
       the additionally specified time interval (daily, weekly, monthly, 
       or yearly). The related size option is similar except that it 
       is mutually exclusive with the time interval options, and it causes 
       log files to be rotated without regard for the last rotation time. 
       When maxsize is used, both the size and timestamp of a log file are     
       considered. 

Dưới đây là một ví dụ:

"/var/log/httpd/access.log" /var/log/httpd/error.log { 
      rotate 5 
      mail [email protected] 
      size 100k 
      sharedscripts 
      postrotate 
       /usr/bin/killall -HUP httpd 
      endscript 
     } 

Dưới đây là một lời giải thích cho cả hai tập tin /var/log/httpd/access.log/var/log/httpd/error.log. Chúng được luân phiên bất cứ khi nào nó phát triển trên kích thước 100k và các tệp nhật ký cũ được gửi qua thư (không nén) đến [email protected] sau khi trải qua 5 lần quay, thay vì bị xóa. Các bản ghi có nghĩa là tập lệnh postrotate sẽ chỉ được chạy một lần (sau khi các nhật ký cũ đã được nén), không một lần cho mỗi nhật ký được xoay. Lưu ý rằng các dấu ngoặc kép xung quanh tên tệp đầu tiên ở đầu phần này cho phép logrotate xoay các bản ghi với các dấu cách trong tên. Quy tắc trích dẫn vỏ bình thường áp dụng, với , và hỗ trợ \ ký tự.

+1

Tốt. Một lưu ý nhỏ, tôi phát hiện ra rằng maxsize và minsize không hoạt động tốt với các distro cũ (như centos5 và ubuntu 10.10 ... sau này là EOL anyway). – tobixen

0

Tôi chưa bao giờ sử dụng nó như một tùy chọn chung, nhưng một cách để kiểm tra nó là sử dụng cờ -d. Điều này sẽ không xử lý bất kỳ phép quay nào, nhưng nó sẽ cho bạn biết những gì logrotate sẽ làm.

Vì vậy, tôi đã thử nghiệm điều này ngay bây giờ bằng cờ -d. Kinh nghiệm của tôi dường như đi ngược lại trang người đàn ông. Nếu tôi đặt 'kích thước 10' sẽ xoay nếu tệp nhật ký lớn hơn 10 byte, nhưng cũng đặt xoay vòng thành hàng tuần, tệp sẽ không xoay tệp, ngay cả khi tệp lớn hơn 10 byte. Nếu tôi nhận xét tham số 'hàng tuần', thì logrotate cho biết nó sẽ xoay tệp. Điều đó dường như trái với những gì tôi mong đợi từ trang người đàn ông.

+0

Tại sao? đọc man page page bởi @Zeeshan Tôi chỉ mong đợi hành vi đó ... ("minsize: ... Các tệp nhật ký được xoay khi chúng lớn hơn kích thước byte, nhưng * không * trước khoảng thời gian được chỉ định thêm ...") – MarcoS

49

Như đã đề cập Zeeshan của tôi, các tùy chọn logrotate size, minsize, maxsize là trình kích hoạt để xoay.

Để giải thích rõ hơn. Bạn có thể chạy logrotate thường xuyên như bạn muốn, nhưng trừ khi đạt đến ngưỡng như đạt được kích cỡ hoặc thời gian thích hợp được thông qua, nhật ký sẽ không được xoay.

Tùy chọn kích thước không đảm bảo rằng nhật ký xoay của bạn cũng có kích thước được chỉ định. Để có được chúng gần với kích thước quy định, bạn cần phải gọi chương trình logrotate đủ thường xuyên. Điều này là rất quan trọng.

Đối với các tệp nhật ký xây dựng rất nhanh (ví dụ: trong hàng trăm MB mỗi ngày), trừ khi bạn muốn chúng rất lớn, bạn sẽ cần đảm bảo logrotate được gọi thường xuyên! điều này là rất quan trọng.

Vì vậy, để dừng đĩa của bạn với các tệp nhật ký nhiều gigabyte bạn cần đảm bảo logrotate được gọi là đủ thường, nếu không xoay vòng sẽ không hoạt động tốt như bạn muốn.

trên Ubuntu, bạn có thể dễ dàng chuyển sang xoay theo giờ bằng cách di chuyển /etc/cron.daily/logrotate kịch bản để /etc/cron.hourly/logrotate

Hoặc thêm

*/5 * * * * /etc/cron.daily/logrotate 

Để bạn/etc/tập tin crontab. Để chạy nó sau mỗi 5 phút.

Tùy chọn size bỏ qua các tùy chọn thời gian hàng ngày, hàng tuần, hàng tháng. Tuy nhiên, hãy tính đến số lượng tối đa & maxsize.

Trang người đàn ông hơi khó hiểu ở đó. Đây là lời giải thích của tôi.

minsize chỉ quay khi tệp đã đạt đến kích thước phù hợp và khoảng thời gian đã đặt đã trôi qua. ví dụ: mins 50MB + hàng ngày Nếu tệp đạt 50MB trước khi thời gian hàng ngày được đánh dấu, nó sẽ tiếp tục tăng cho đến ngày hôm sau.

maxsize sẽ xoay khi nhật ký đạt đến kích thước đã đặt hoặc thời gian thích hợp đã trôi qua. ví dụ: tối đa 50MB + hàng ngày. Nếu tệp là 50MB và chúng tôi sẽ không vào ngày tiếp theo, nhật ký sẽ được xoay. Nếu tệp chỉ có 20MB và chúng tôi sẽ chuyển sang ngày tiếp theo thì tệp sẽ được xoay.

size sẽ xoay khi kích thước nhật ký>. Bất kể định giờ/hàng ngày/hàng tuần/hàng tháng được chỉ định. Vì vậy, nếu bạn có kích thước 100M - điều đó có nghĩa là khi tệp nhật ký của bạn> 100M nhật ký sẽ được xoay nếu logrotate được chạy khi điều kiện này là đúng. Khi nó được xoay, nhật ký chính sẽ là 0 và lần chạy tiếp theo sẽ không làm gì cả.

Vì vậy, trong trường hợp của op. Cách cụ thể 50MB max Tôi muốn sử dụng một cái gì đó như sau:

/var/log/logpath/*.log { 
    maxsize 50M 
    hourly 
    missingok 
    rotate 8 
    compress 
    notifempty 
    nocreate 
} 

Có nghĩa là ông muốn tạo 8hrs của bản ghi tối đa. Và sẽ có 8 người trong số họ không quá 50MB mỗi người. Vì anh ấy nói rằng anh ấy nhận được nhiều gigabyte mỗi ngày và giả sử họ tích lũy ở tốc độ khá ổn định và tối đa hóa được sử dụng, anh ấy sẽ kết thúc với khoảng gần đến mức tối đa đạt được cho mỗi tệp. Vì vậy, họ sẽ có khả năng gần 50MB mỗi. Với khối lượng mà họ xây dựng, anh ta sẽ cần phải đảm bảo rằng logrotate được chạy thường xuyên đủ để đáp ứng kích thước mục tiêu.

Vì tôi đã đặt hàng giờ ở đó, chúng tôi cần logrotate để chạy tối thiểu mỗi giờ. Nhưng kể từ khi họ xây dựng để nói 2 gigabyte mỗi ngày và chúng tôi muốn 50MB ...giả sử một tỷ lệ cố định là 83MB mỗi giờ. Vì vậy, bạn có thể tưởng tượng nếu chúng ta chạy logrotate mỗi giờ, mặc dù thiết lập maxsize đến 50 chúng ta sẽ kết thúc với 83MB log trong trường hợp đó. Vì vậy, trong trường hợp này thiết lập chạy đến mỗi 30 phút hoặc ít hơn là đủ.

Đảm bảo hoạt động của logrotate cứ sau 30 phút.

*/30 * * * * /etc/cron.daily/logrotate 
+0

bạn có thể giải thích thêm về "Tùy chọn kích thước bỏ qua các tùy chọn thời gian hàng ngày, hàng tuần, hàng tháng". – Jisson

+0

là nó gần như giống như maxsize? – Jisson

+0

Ok, giải thích thêm về kích thước – Matt

Các vấn đề liên quan