Cronolog vs logrotate


Câu trả lời:


14

Theo kinh nghiệm của tôi, logrotate là tuyệt vời. Nó rất linh hoạt và hoạt động tốt với hầu hết các phần mềm.

Tuy nhiên, có một số vấn đề với nó và vì cronolog chủ yếu là một công cụ xoay vòng nhật ký web, tôi sẽ ghi lại trải nghiệm của mình với logrotate + apache có vấn đề:

Khi xoay nhật ký, chúng ta phải thông báo cho apache rằng một bản ghi đang được xoay, vì ngay cả khi logrotate đổi tên access.log thành access.log.1, apache sẽ tiếp tục ghi vào access.log.1, vì nó đang ghi vào inode và đổi tên tập tin không ảnh hưởng đến số inode.

Trên debian etch (và có lẽ nhiều bản phân phối khác), logrotate đang được sử dụng để xoay các bản ghi apache. Bây giờ, apache có một khởi động lại duyên dáng khuyên cho các tiến trình apache con thoát ra khi chúng kết thúc việc phục vụ các kết nối hiện có, apache sau đó đọc lại cấu hình của nó, sinh ra các tiến trình con mới, bắt đầu ghi vào một tệp nhật ký mới (trong trường hợp trước đó là xoay vòng).

Điều này nghe có vẻ là một giải pháp tuyệt vời, tuy nhiên khởi động lại duyên dáng không phải lúc nào cũng hoạt động trong một số điều kiện nhất định (như tải nặng), vì vậy các nhà phát triển debian đã quyết định sử dụng khởi động lại apache thay vì khởi động lại duyên dáng, trong cấu hình logrotate apache. Thật không may, điều này làm cho tất cả các kết nối bị hủy cùng một lúc, điều này rất tệ cho các trang web được tải nặng. Ngoài ra, khởi động lại apache cũng có thể gây ra các vấn đề như dừng apache và không bắt đầu (cũng trong các tình huống tải nhất định), xem các liên kết lỗi bên dưới để biết chi tiết.

Điểm mấu chốt là, logrotate là tuyệt vời, nhưng có thể dẫn đến một số vấn đề nhất định cho các chương trình nhất định. Tôi không có nhiều kinh nghiệm về thời gian, nhưng vì nó ghi nhật ký thông qua một đường ống, nên nó không yêu cầu tải lại apache khi xoay tệp nhật ký, về cơ bản giải quyết tất cả những gì được mô tả ở trên.

Các lỗi debian logrotate / apache có liên quan:

  1. Lỗi Debian # 301702
  2. Lỗi Debian # 400455

1
Giải pháp cho việc trên là sử dụng cắt cụt! những gì nó làm là sao chép nội dung của access.log vào access.log.1 và sau đó làm trống access.log (như bạn thấy phần còn lại của access_log vẫn giữ nguyên). Thông thường, bạn không có nhật ký lớn hơn vài GB (trong caase tệ nhất), vì vậy toàn bộ quá trình sẽ không mất nhiều thời gian!
Nikolaidis Fotis

3

Tôi thích cronolog, nhưng nó không phải là một ưu tiên thực sự mạnh mẽ.

logrotate nơi được bắt đầu bởi cron và nếu một hệ thống ngừng hoạt động vì một số lý do khi việc quay vòng xảy ra, thì các tệp nhật ký của bạn sẽ không được xoay.

Tôi cũng thích có các tệp nhật ký có ngày (% Y% m.combined.access.log) trong tên vì tôi giữ các nhật ký đó trong một thời gian dài. Trên hầu hết các hệ thống, theo mặc định, logacheate apache sẽ đặt tên cho các tệp access.log, access.log.1, v.v. Có thể sử dụng một ngày trong logfiles bằng logrotate, nhưng tôi không thể tìm ra cách làm lần cuối cùng tôi nhìn.


2
Vấn đề mà logrotate không hoạt động nếu thời gian trôi qua có thể được khắc phục bằng cách cài đặt gói "anacron".
andrewd18 ngày

hoặc thậm chí tốt hơn bạn có thể lưu nhật ký của mình ở định dạng mong muốn - điều này có thể được thực hiện với các mẫu trong rsyslog - (% năm% -% tháng% -% ngày% _lala.log). trong trường hợp này, bạn thậm chí không phải xoay vòng các bản ghi, vì mỗi ngày tên tha được thay đổi!
Nikolaidis Fotis

2

Chỉ bao giờ sử dụng logrotate. Đó là những gì Debian sử dụng theo mặc định và tôi chưa bao giờ có bất kỳ khiếu nại nào với nó.


2

Tôi hầu như chỉ sử dụng cronologhơn logrotate. logrotateđi kèm với Debian và tôi cho phép nó tiếp tục hoạt động cho các dịch vụ hệ thống như nhật ký máy chủ thư. Nhưng đối với lighttpdcác tệp nhật ký và Apache , tất cả chỉ có thế cronolog.

Một trong những lý do tại sao tôi sử dụng cronologlà tất cả các cấu hình xảy ra trong dòng tệp nhật ký của cấu hình máy chủ web

ví dụ: trong lighttpdtệp cấu hình, bạn có thể đặt:

accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%W-access.log"

Và tất cả nhận được một tệp nhật ký mới mỗi tuần mà không cần bất kỳ cấu hình nào khác. Hoặc bạn có thể sáng tạo và làm một cái gì đó như:

accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%m/%a-access.log"

Và nhận được một tệp nhật ký hiển thị lưu lượng truy cập theo ngày trong tuần. ví dụ tất cả các ngày chủ nhật, tất cả các ngày thứ ba.

Điều tốt hơn là ngay cả khi máy chủ ngừng hoạt động trong bất kỳ khoảng thời gian nào, tệp nhật ký chính xác sẽ được sử dụng khi khởi động lại.


1
Điều đó trông rất giống với Svlogd (của dòng runit và daemontools).
Tobu
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.