Centos / Linux 설정 logrotate 모든 로그에 대한 최대 파일 크기
우리는 logrotate를 사용하고 매일 실행됩니다 ... 이제 로그가 크게 증가하고 (기가 바이트 읽기) 서버를 죽이는 상황이 발생했습니다. 이제 로그에 최대 파일 크기를 설정하려고합니다.
이것을 logrotate.conf에 추가 할 수 있습니까?
크기 50M
그러면 모든 로그 파일에 적용됩니까? 아니면 로그 단위로 설정해야합니까?
아니면 다른 조언?
(ps. 알림을 받으려면 로그가 설명 된대로 커지고 우리가 원하는 것이 이상적이지 않다는 것을 알고 있습니다. 그러나 사용 가능한 공간이 없기 때문에 더 이상 로그온 할 수없는 것보다 낫습니다)
고마워, 션
회전을 트리거 할 로그 파일 의 크기를 지정합니다 . 예를 들어 size 50M
파일 크기가 50MB 이상이면 로그 회전을 트리거합니다. M
메가 바이트, k
킬로바이트 및 G
기가 바이트에 접미사 를 사용할 수 있습니다 . 접미사를 사용하지 않으면 바이트를 의미합니다. 마지막에 예제를 확인할 수 있습니다. 이 가능한 세 가지 지침은 size
, maxsize
하고 minsize
. 맨 페이지 에 따르면 :
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.
다음은 그 예입니다.
"/var/log/httpd/access.log" /var/log/httpd/error.log {
rotate 5
mail www@my.org
size 100k
sharedscripts
postrotate
/usr/bin/killall -HUP httpd
endscript
}
Here is an explanation for both files /var/log/httpd/access.log
and /var/log/httpd/error.log
. They are rotated whenever it grows over 100k in size, and the old logs files are mailed (uncompressed) to www@my.org
after going through 5 rotations, rather than being removed. The sharedscripts
means that the postrotate
script will only be run once (after the old logs have been compressed), not once for each log which is rotated. Note that the double quotes around the first filename at the beginning of this section allows logrotate to rotate logs with spaces in the name. Normal shell quoting rules apply, with ,
, and \
characters supported.
As mentioned by Zeeshan, the logrotate options size
, minsize
, maxsize
are triggers for rotation.
To better explain it. You can run logrotate as often as you like, but unless a threshold is reached such as the filesize being reached or the appropriate time passed, the logs will not be rotated.
The size options do not ensure that your rotated logs are also of the specified size. To get them to be close to the specified size you need to call the logrotate program sufficiently often. This is critical.
For log files that build up very quickly (e.g. in the hundreds of MB a day), unless you want them to be very large you will need to ensure logrotate is called often! this is critical.
Therefore to stop your disk filling up with multi-gigabyte log files you need to ensure logrotate is called often enough, otherwise the log rotation will not work as well as you want.
on Ubuntu, you can easily switch to hourly rotation by moving the script /etc/cron.daily/logrotate to /etc/cron.hourly/logrotate
Or add
*/5 * * * * /etc/cron.daily/logrotate
To your /etc/crontab file. To run it every 5 minutes.
The size
option ignores the daily, weekly, monthly time options. But minsize & maxsize take it into account.
The man page is a little confusing there. Here's my explanation.
minsize
rotates only when the file has reached an appropriate size and the set time period has passed. e.g. minsize 50MB + daily If file reaches 50MB before daily time ticked over, it'll keep growing until the next day.
maxsize
will rotate when the log reaches a set size or the appropriate time has passed. e.g. maxsize 50MB + daily. If file is 50MB and we're not at the next day yet, the log will be rotated. If the file is only 20MB and we roll over to the next day then the file will be rotated.
size
will rotate when the log > size. Regardless of whether hourly/daily/weekly/monthly is specified. So if you have size 100M - it means when your log file is > 100M the log will be rotated if logrotate is run when this condition is true. Once it's rotated, the main log will be 0, and a subsequent run will do nothing.
So in the op's case. Specficially 50MB max I'd use something like the following:
/var/log/logpath/*.log {
maxsize 50M
hourly
missingok
rotate 8
compress
notifempty
nocreate
}
Which means he'd create 8hrs of logs max. And there would be 8 of them at no more than 50MB each. Since he's saying that he's getting multi gigabytes each day and assuming they build up at a fairly constant rate, and maxsize is used he'll end up with around close to the max reached for each file. So they will be likely close to 50MB each. Given the volume they build, he would need to ensure that logrotate is run often enough to meet the target size.
Since I've put hourly there, we'd need logrotate to be run a minimum of every hour. But since they build up to say 2 gigabytes per day and we want 50MB... assuming a constant rate that's 83MB per hour. So you can imagine if we run logrotate every hour, despite setting maxsize to 50 we'll end up with 83MB log's in that case. So in this instance set the running to every 30 minutes or less should be sufficient.
Ensure logrotate is run every 30 mins.
*/30 * * * * /etc/cron.daily/logrotate
'developer tip' 카테고리의 다른 글
Psycopg2 이미지를 찾을 수 없습니다. (0) | 2020.12.14 |
---|---|
GitHub에서 원격 브랜치 만들기 (0) | 2020.12.14 |
lombok을 사용하여 기존 개체에서 개체 만들기 (0) | 2020.12.14 |
Unix 명령 줄에서 디렉토리 및 하위 디렉토리의 아카이브를 반복적으로 압축 해제하는 방법은 무엇입니까? (0) | 2020.12.14 |
PHP에서 64 비트 정수를 사용하는 방법? (0) | 2020.12.14 |