How to Configure Automatic Logfile Rotation
We have a hypernode-auto-logrotate
command as part of our hypernode-
system utilities. This is a command line tool that automatically rotates log files, which helps avoid disk space issues and decreases time the required to restore back-ups.
Log Rotation
A Hypernode contains files that applications write their logs to. For example, Magento writes to /data/web/magento2/var/log/debug.log
. These log files can get quite large (we’ve seen examples of over 30GB), so for example when doing a backup, you end up transferring obscenely large files over the internet.
You can avoid this problem by rotating the log files. This means that when a log file /data/web/example.log
gets too big, you compress it, move it to /data/web/example.log.1.gz
, and give the application an empty log file to write to. The hypernode-auto-logrotate
command automates this process.
Example Usage
For log files ~/magento2/var/log/system.log
and ~/magento2/var/log/debug.log
, the tool can be used as follows:
app@levkd4-example-magweb-cmbl:~$ hypernode-auto-logrotate /data/web/magento2/var/log/system.log /data/web/magento2/var/log/debug.log
Adding logrotate cron job
Adding logrotate config entry for "/data/web/magento2/var/log/system.log"
Adding logrotate config entry for "/data/web/magento2/var/log/debug.log"
This will cause the log file to be rotated on a daily basis, at around midnight. If the file is over 50MB, the next day the old logs will have been moved to ~/magento2/var/log/system.log.1.gz
.
app@levkd4-example-magweb-cmbl:~/magento2/var/log$ ls system.log*
system.log system.log.1.gz
The tool also has a --detect
option, with which it will search for log files bigger than 500 MB and rotate them:
app@levkd4-example-magweb-cmbl:~$ hypernode-auto-logrotate --detect
Searching for logfiles...
Logfile found: /data/web/magento2/var/log/system.log
Logfile found: /data/web/magento2/var/log/connector.log
Logfile found: /data/web/magento2/var/log/debug.log
Logfile found: /data/web/magento2-sample-data/dev/tools/exclude.log
Adding logrotate config entry for "/data/web/magento2/var/log/system.log"
Adding logrotate config entry for "/data/web/magento2/var/log/connector.log"
Adding logrotate config entry for "/data/web/magento2/var/log/debug.log"
Adding logrotate config entry for "/data/web/magento2-sample-data/dev/tools/exclude.log"
The tool has a --dry-run
option which will print what the tool will do without actually doing it. For more detailed output, run it with the --verbose
option.
Configuration
The hypernode-auto-logrotate
command comes with a sensible out-of-the-box configuration. Among other things, this means that it will rotate log files daily, only when they exceed 50MB, and that it will keep four files in rotation (meaning you end up with system.log.1.gz
up to system.log.4.gz
). These configurations are stored in /data/web/hypernode_logrotate.conf
, and can be customized per log by editing this file. For example, the entry added for system.log
reads
/data/web/magento2/var/log/system.log {
rotate 4
daily
compress
# do not raise an error if the logfile does not exist
missingok
# file size at which rotation is triggered
size 50M
# copy the file and truncate the original, in case
# another process cannot be told to close the logfile
copytruncate
}
The logrotate main pagecontains instructions on how to customize this.
Keeping the configuration up to date
This cronjob configuration is deployed by default on new Hypernodes. If you don’t want this configuration, feel free to comment or delete the configuration from your crontab.
To make sure you keep your logrotate config keeps up to date with newer log files, it is advised to run hypernode-auto-logrotate-detect --detect
every night. Open your cronjob configuration with crontab -e
and add the following configuration.
# Add logfiles to logrotate configuration
0 4 * * * /usr/bin/chronic /usr/bin/hypernode-auto-logrotate --detect