logrotate không nén / var / log / message


11

Theo thời gian tôi nhận thấy một số nhật ký /var/lognhư auth, kernmessagesđang trở nên rất lớn. Tôi đã thực hiện logrotatecác mục cho họ:

$ cat /etc/logrotate.d/auth.log 
/var/log/kern.log {
    rotate 5
    daily
}
$ cat /etc/logrotate.d/kern.log 
/var/log/kern.log {
    rotate 5
    daily
}
$ cat /etc/logrotate.d/messages 
/var/log/messages {
    rotate 5
    daily
    postrotate
        /bin/killall -HUP syslogd
    endscript
}

Ngoài ra tôi có compresstùy chọn được kích hoạt:

$ grep compress /etc/logrotate.conf 
# uncomment this if you want your log files compressed
compress

Điều này hoạt động rất tốt cho auth.log, kern.logvà những người khác, có nghĩa là mỗi bản ghi đó được nén và xoay, với 5 ngày cuối cùng của bản ghi được giữ lại. /var/log/messagestuy nhiên không được nén, dẫn đến cách hơn 5 ngày nhật ký:

$ ls /var/log/messages*
/var/log/messages           /var/log/messages-20100213
/var/log/messages-20100201  /var/log/messages-20100214
/var/log/messages-20100202  /var/log/messages-20100215
/var/log/messages-20100203  /var/log/messages-20100216
/var/log/messages-20100204  /var/log/messages-20100217
/var/log/messages-20100205  /var/log/messages-20100218
/var/log/messages-20100206  /var/log/messages-20100219
/var/log/messages-20100207  /var/log/messages-20100220
/var/log/messages-20100208  /var/log/messages-20100221
/var/log/messages-20100209  /var/log/messages-20100222
/var/log/messages-20100210  /var/log/messages-20100223
/var/log/messages-20100211  /var/log/messages-20100224
/var/log/messages-20100212

Như được giải thích trong một logrotatecâu hỏi khác trên ServerFault , các nhật ký cũ (rất có thể) không bị xóa vì các kết thúc tệp khác nhau đối với mỗi tệp. Điều này dường như là do các tập tin không được nén.

Tôi có thể làm gì để /var/log/messagesnén và xoay vòng trong 5 ngày cuối cùng của nhật ký được giữ lại giống như tất cả các tệp nhật ký khác của tôi? Tôi đang thiếu gì?

EDIT 1 : thông tin bổ sung theo yêu cầu trong câu trả lời đầu tiên.

Tôi đang chạy Gentoo Linux. /etc/logrotate.confTập tin của tôi

$ cat /etc/logrotate.conf 
# $Header: /var/cvsroot/gentoo-x86/app-admin/logrotate/files/logrotate.conf,v 1.3 2008/12/24 20:49:10 dang Exp $
#
# Logrotate default configuration file for Gentoo Linux
#
# See "man logrotate" for details
# rotate log files weekly
weekly
#daily
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
compress
# packages can drop log rotation information into this directory
include /etc/logrotate.d
notifempty
nomail
noolddir
# no packages own lastlog or wtmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
    rotate 1
}
/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

/etc/logrotate.d chứa các tệp cấu hình tùy chỉnh của tôi như đã đề cập ở trên cùng với các cấu hình cho mysql, rsync, v.v. được cài đặt bởi các gói đó.

Root của tôi crontabtrống:

$ sudo crontab -l
no crontab for root

Tôi đã kiểm tra tất cả mọi /etc/cron.{daily,hourly,monthly,weekly}thứ liên quan đến syslog và có một đoạn script xoay /var/log/syslog/var/log/auth.log.

Tiếp theo, tôi đã tạo một tệp cấu hình /var/log/messages-only logrotatetheo đề xuất của CarpeNoctem:

$ cat logrotate-messages 
weekly
rotate 4
create
dateext
compress
notifempty
nomail
noolddir
/var/log/messages {
    rotate 5
    daily
    postrotate
        /bin/killall -HUP syslogd
    endscript
}

Sau đó tôi chạy logrotatethủ công:

$ logrotate -d logrotate-messages -f
reading config file logrotate-messages
reading config info for /var/log/messages 

Handling 1 logs

rotating pattern: /var/log/messages  forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/messages
  log needs rotating
rotating log /var/log/messages, log->rotateCount is 5
dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
renaming /var/log/messages to /var/log/messages-20100224
creating new /var/log/messages mode = 0644 uid = 0 gid = 0
running postrotate script
running script with arg /var/log/messages : "
        /bin/killall -HUP syslogd
"
compressing log with: /bin/gzip
$ which gzip
/bin/gzip
$ file /bin/gzip
/bin/gzip: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped

Theo nhật ký ở trên, đã logrotatenén nhật ký bằng / bin / gzip, nhưng tôi không thấy tệp tin được nén trong /var/log. Ngoài ra, globalbing cho các tập tin xoay cũ không thành công.

EDIT 2 : thêm đầu ra gỡ lỗi của logrotatechạy sau khi thêm .gzhậu tố vào /var/log/message-*các tệp cũ .

Chúng tôi bắt đầu với:

$ ls /var/log/messages*
/var/log/messages              /var/log/messages-20100222.gz
/var/log/messages-20100219.gz  /var/log/messages-20100223.gz
/var/log/messages-20100220.gz  /var/log/messages-20100224.gz
/var/log/messages-20100221.gz

Sau đó chạy logrotatevới tệp cấu hình tùy chỉnh của chúng tôi:

$ logrotate -d logrotate-messages -f
reading config file logrotate-messages
reading config info for /var/log/messages 

Handling 1 logs

rotating pattern: /var/log/messages  forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/messages
  log needs rotating
rotating log /var/log/messages, log->rotateCount is 5
dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
removing /var/log/messages-20100219.gz
removing old log /var/log/messages-20100219.gz
destination /var/log/messages-20100224.gz already exists, skipping rotation

Lần này, toàn logrotatecầu thành công và tìm thấy logfile nén thứ sáu, dự định loại bỏ nó. Các tập tin không thực sự được gỡ bỏ; Tôi đoán đó là vì chúng tôi đang chạy trong chế độ gỡ lỗi.

Tôi tò mò liệu kích hoạt delaycompresstùy chọn cho /var/log/messagessẽ giúp. Tôi đã kích hoạt nó và sẽ kiểm tra kết quả vào sáng hôm sau.


Bạn có thể đăng logrotate.conf của bạn? Không có gì trong đoạn trích bạn chia sẻ cho đến nay sẽ giải thích hậu tố ngày trên các tệp tin nhắn đó. Logrotate đã không được sử dụng để hỗ trợ hậu tố ngày trên các tệp nhật ký được xoay. Điều này khiến tôi tin rằng một cái gì đó khác hoàn toàn đang tạo ra những tập tin đó. Kiểm tra / etc / crontab, root crontab và /etc/cron.d Daily để xem bạn có tập lệnh khác đang cố gắng thực hiện cùng một công việc không.
jmtd

Ngoài ra, bạn có thể cho chúng tôi biết bản phân phối linux nào bạn đang chạy không? Debian / Ubuntu có tập lệnh xoay vòng nhật ký riêng có thể làm hỏng công cụ logrotate của bạn.
thepocketwade

Cảm ơn vi đa trả lơi. Tôi đang chạy Gentoo Linux. Crontabs của tôi không thực hiện bất kỳ quản lý / var / log / message nào. Xin vui lòng xem thông tin mới trong câu hỏi của tôi để biết chi tiết.
Mike Mazur

Câu trả lời:


8

Thêm delaycompressvào phần cấu hình để /var/log/messagesgiải quyết vấn đề.

Từ man logrotate:

   delaycompress
          Postpone  compression of the previous log file to the next rota‐
          tion cycle.  This only has effect when used in combination  with
          compress.   It  can  be used when some program cannot be told to
          close its logfile and thus might continue writing to the  previ‐
          ous log file for some time.

Tôi đoán sysklogd, trình nền syslog của tôi, không thể được yêu cầu đóng logfile của nó, và do đó điều này là cần thiết.

Thật thú vị, cấu hình ban đầu tôi có (không có delaycompresschỉ thị), đi thẳng ra man logrotate(trừ khi tôi đổi weeklythành daily):

   # sample logrotate configuration file
   compress

   /var/log/messages {
       rotate 5
       weekly
       postrotate
           /usr/bin/killall -HUP syslogd
       endscript
   }

Nó đang nói tùy chọn không xác định chưa biết 'delalycompress' # logrotate -v /etc/logrotate.d/apc_rtbinfo.conf đọc tệp cấu hình /etc/logrotate.d/apc_rtbinfo.conf đọc thông tin cấu hình cho /mnt/log/frengo/apc_rt. lỗi: /etc/logrotate.d/apc_rtbinfo.conf:7 tùy chọn không xác định 'delalycompress' - bỏ qua dòng Xử lý 1 bản ghi
Ashish Karpe

# cat /etc/logrotate.d/apc_rtbinfo.conf /mnt/log/frengo/apc_rtbinfo.log {mất tích hàng ngày không đáng kể kích thước 2000M nén delalycompress được chia sẻ sao chép xoay 3}
Ashish Karpe

1
ok có lỗi đã có lỗi đánh máy trong "delalycompress"
Ashish Karpe

Nhưng vấn đề bây giờ là log.1 là hơn 2000M .1 80M /mnt/log/frengo/apc_rtbinfo.log.2 0 /mnt/log/frengo/apc_rtbinfo.log-20151222 679M /mnt/log/frengo/apc_rtbinfo.log-20151225.gz 681M / log /apc_rtbinfo.log-20151226.gz 691M /mnt/log/frengo/apc_rtbinfo.log-20151227.gz 0 /mnt/log/frengo/apc_rtbinfo.log-20151228 70M /mnt/log/frengo gz 80M /mnt/log/frengo/apc_rtbinfo.log.3 80M /mnt/log/frengo/apc_rtbinfo.log.4
Ashish Karpe

5

Thật khó để nói chỉ với thông tin này, nhưng tôi có thể nói với bạn điều gì đã cứu tôi vài lần.

Logrotate có một tùy chọn gỡ lỗi sẽ in ra một lần phát của từng bước cần thiết cho thiết bị xuất chuẩn. Vì vậy, trong trường hợp này bạn có thể làm:

logrotate -d /etc/logrotate.conf

Đầu ra sẽ cho bạn biết chính xác những gì đang xảy ra. Ngoài ra, nếu bạn muốn thu hẹp đầu ra gỡ lỗi, bạn có thể làm

logrotate -d /etc/logrotate.d/messages

Mặc dù bạn có thể muốn tạm thời đặt các tùy chọn logrotate.conf chính trong khối tệp đó vì việc chỉ định tệp trực tiếp có nghĩa là nó sẽ không bao giờ đọc các tùy chọn cấu hình chính. Chỉ định tệp riêng lẻ cũng có nghĩa là bạn có thể sử dụng -ftùy chọn (bắt buộc) kết hợp với tùy chọn gỡ lỗi để xem xét một vòng quay thực tế của tệp tin đang diễn ra.


Tôi đã thử chạy logrotate theo cách thủ công như bạn đề xuất và nó cho tôi biết nó đang nén nhật ký, nhưng tôi không tìm thấy bất kỳ nhật ký nén nào ở bất cứ đâu. Xem câu hỏi của tôi ở trên để biết chi tiết.
Mike Mazur

1
đổi tên 5 tệp tin cũ nhất để chúng kết thúc bằng .gz và xem liệu logrotate có xóa tệp cũ nhất không. Nếu đúng như vậy thì chúng ta biết rằng globalbing bị lỗi do gzip không chạy đúng. Điều này ít nhất sẽ xác nhận rằng việc thiếu nén là để đổ lỗi cho việc thiếu xoay.
CarpeNoctem

Xong, chi tiết thêm vào câu hỏi trên. Tôi tò mò liệu có một số vấn đề tranh chấp với /var/log/messagestệp trực tiếp và delaycompresstùy chọn sẽ giúp.
Mike Mazur

Một điểm thú vị khác mà tôi phát hiện ra. Khi bạn bật tùy chọn -d, lệnh logrotate sẽ không chạm vào tệp nhật ký. Kiểm tra hướng dẫn để biết thêm. -d, --debug Turns on debug mode and implies -v. In debug mode, no changes will be made to the logs or to the logrotate state file.
CBR

1

Cân nhắc thử cài đặt này trong logrotate.conf của bạn:

dateformat .%Y%m%d

và đổi tên các tệp tin hiện có của bạn để sử dụng dấu chấm thay vì dấu gạch ngang. Sau đó thử lại logrotate của bạn.

Các manh mối dưới đây khiến tôi tin rằng dấu gạch ngang có thể khiến toàn cầu thất bại nếu nó được hiểu theo cách nào đó là một tùy chọn (trong đó - sẽ khắc phục điều này). Nó không có ý nghĩa, nhưng nó chỉ có thể là có thể.

dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed

Tôi không nghĩ rằng đây là nguyên nhân gốc rễ. Định dạng ngày hiện tại, với dấu gạch ngang, chỉ hoạt động tốt đối với các tệp nhật ký khác. Sự khác biệt giữa các tệp nhật ký đó và /var/log/messageslà các /var/log/messagestệp được xoay không được nén.
Mike Mazur
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.