Cách nén và dọn dẹp các bản ghi bằng logrotate nhưng không xoay chúng


10

Tôi có một máy chủ Tomcat tạo nhật ký truy cập thông qua một van ( org.apache.cirthina.valves.FastCommonAccessLogValve ). Van này đảm nhiệm việc xoay tệp nhật ký truy cập, nhưng không nén chúng hoặc xóa chúng sau một thời gian.

Hiện tại, tôi có một công việc định kỳ sử dụng find [...] -mtime +30 [...]để nén và xóa nhật ký. Tôi thà sử dụng logrotate, để xoay vòng log ở một nơi tập trung cho tất cả các bản ghi. Tôi không thích có một giải pháp riêng biệt chỉ dành cho Tomcat.

Tôi đã cố đọc tài liệu logrotate, nhưng tôi vẫn hơi mất. Tôi có thể sử dụng logrotate chỉ để nén và dọn dẹp các tệp nhật ký không? Làm thế nào tôi có thể làm điều đó?

Hoặc xoay quanh vấn đề, có một van nhật ký truy cập Tomcat sẽ nén và dọn dẹp các tệp nhật ký không?

Cảm ơn sự giúp đỡ của bạn !


BTW: FastCommonAccessLogValve bị phản đối trong 6,0 tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/valves/...
JANNING

Câu trả lời:


17

Khá đơn giản mà tôi đã thấy công trình như thế này.

Tạo một tệp trong /etc/logrotate.d được gọi là tomcat chứa các mục sau: -

/var/log/tomcat/catalina.out { 
  copytruncate 
  daily 
  rotate 7 
  compress 
  missingok 
}

Thao tác này chạy hàng ngày , nén es tệp và giữ giá trị 7 ngày ( xoay 7 ). copytruncate có nghĩa là nó sẽ sao chép sau đó cắt bớt tệp gốc để không cần phải khởi động lại tomcat. thiếu ok sẽ không có lỗi nếu nó không ở đó.

Van access.log có thể được thay đổi thành không xoay bằng cách thêm rotitable = false: -

<Valve className="org.apache.catalina.valves.AccessLogValve
     ...
     ...
     suffix="log" rotatable="false" />

1
Vấn đề của tôi là không giống như catalina.out, nhật ký truy cập của tôi đã được xoay.
Guillaume

3
Được rồi, xoay vòng nhật ký truy cập có thể bị vô hiệu hóa bằng cách đặt rotitable = false trong các đối số Valve. Trả lời để bao gồm điều này.
Decado

2

Tập lệnh TimP đã sửa đổi - Đã thêm xóa các tệp rất cũ, thêm quét cho các tệp nén cũ.

#!/bin/bash
#
# TPP 2013-02-21
# RJK 2014-08-14
#
# Tomcat apps use a variety of loggers, mostly log4j.
# These rotate, conflicting with logrotate, the unix log rotation system.
#
# Some files eg catalina.out
# are rotated to a backup containing a date eg catalina.2013-01-06.log
# which can then be compressed with bz2 to catalina.2013-01-06.log.bz2
# or removed if older than a given number of days(MTIME).
#
cd /var/log/tomcat6
# 2013-02-21
DATE=`date --rfc-3339=date`
YEAR=`date +%Y`
MILLENIUM=20
# 2014-08-14
MTIME=14
# 2014-08-14
#for f in $(find catalina* |grep -v bz2 |grep -v '$DATE' |grep $YEAR)
for f in $(find catalina* |grep -v bz2 |grep -v '$DATE' |grep $MILLENIUM)
do
 # 2014-08-14
 if test `find $f -mtime +$MTIME`
 then
   echo "rm -f $f"
   rm -f $f
 else
   echo "bzip2 $f"
   bzip2 $f
 fi
done
# However others are active whilst containing a date
# so we will find all and not compress the most recent
for l in 'localhost*' 'opt-db*' 'opt*' 'host-manager*' 'manager*'
do
 export previous=
 for f in $(find $l |grep -v bz2 |sort)
 do
  if [ "${previous}" != "" ]
  then
    echo "bzip2 ${previous}"
    bzip2 $previous
  fi
  export previous=$f
 done
done
# 2014-08-14
for f in $(find *bz2)
do
 if test `find $f -mtime +$MTIME`
 then
   echo "rm -f $f"
   rm -f $f
 fi
done
exit 0 

1

Tôi không muốn thay đổi cấu hình Tomcat, vì vậy đã tạo một tập lệnh nén các tệp được xoay

#! / bin / bash
#
# TPP 2013 / 02-21
#
Các ứng dụng Tomcat sử dụng nhiều loại loggers, chủ yếu là log4j.
# Những vòng quay này, xung đột với logrotate, hệ thống xoay vòng nhật ký unix. 
#
# Một số tệp, ví dụ catalina.out
# được xoay sang bản sao lưu có chứa ngày, ví dụ catalina.2013-01-06.log
# mà sau đó có thể được nén bằng bz2 thành catalina.2013-01-06.log.bz2
#

cd / var / log / tomcat6

# 2013 / 02-21
NGÀY = `ngày --rfc-3339 = ngày`
NĂM = `ngày +% Y`

cho f bằng $ (tìm catalina * | grep -v bz2 | grep -v '$ DATE' | grep $ NĂM)
làm
 tiếng vang "bzip2 $ f" 
 bzip2 $ f
làm xong

# Tuy nhiên, những người khác đang hoạt động trong khi có một ngày
# vì vậy chúng tôi sẽ tìm thấy tất cả và không nén gần đây nhất
cho l trong 'localhost *' 'opt-db *' 'opt *' 'host-manager *' 'manager *'
làm
 xuất trước =
 cho f bằng $ (tìm $ l | grep -v bz2 | sort)
 làm
  if ["$ {trước}"! = ""]
  sau đó
    tiếng vang "bzip2 $ {trước}" 
    bzip2 $ trước
  fi
  xuất trước = $ f
 làm xong
làm xong

thoát 0


1

Thật đơn giản. Chỉ cần nói với logrotate những tập tin bạn muốn xoay. nocreateyêu cầu logrotate không tạo lại một tệp trống sau khi di chuyển tệp cũ (nếu bạn đang xoay tệp vào thư mục con).

/var/log/tomcat/catalina.out.* { 
  daily 
  nocreate
  compress 
  missingok 
}

0

Để nén local_access_log.YYYY-MM-DD.txt tôi đã viết tập lệnh này sau khi xem bài đăng này: -

#!/bin/bash
#
# If Tomcat uses server.xml config to rotate localhost_access_log,
# the daily rotated logs will need compressing and old ones deleted to stop filling
# the log partiton. Cannot use the system logrotate command as conficts with tomcat rotate
# therefore run this script in a daily cronjob
#
# localhost_access_log.2015-09-03.txt
#
# Add this script in /etc/cron.daily/ owned by root
#

CATALINA_BASE=`ps aux | grep catalina.base | awk -F'catalina.base\=' '{print $2}' | awk '{print $1}'`

if [ ! $CATALINA_BASE ]
then
    if [ -r /var/lib/tomcat8 ]
    then
        CATALINA_BASE=/var/lib/tomcat8
    else
        echo "Error: cannot find CATALINA_BASE"
        exit 1
    fi
fi

cd ${CATALINA_BASE}/logs

if [ $? -ne 0 ]
then
    echo "Error, cannot cd to logs directory, quitting...."
    exit 1
fi

# today's date (not to be gzipped)
DATE=`date --rfc-3339=date`
# number of days to keep
MTIME=28

# Compress all previous days uncompressed logs
for log in `ls localhost_access_log* | grep -v bz2 | grep -v $DATE`
do
    bzip2 $log
done

# delete old logs
find . -name "*.bz2" -mtime +$MTIME -exec rm {} \;

exit 0

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.