How to rotate log files with logrotate

5 months ago 28

Part of the fun of self-hosting is making sure you follow best practices and don't shoot yourself in the foot. One of those tasks is making sure things are backed up, ideally to an off-site location (I use S3), and are encrypted. I try to keep things simple. My go-to backup power move is to schedule a Bash script with cron. Because cron is a scheduler and not a logging system, I direct any output to a file in /var/log in case the need to debug arises. One may think that logging to /var/log gets you some sort of log rotation for free. That's definitely not the case, as each file you see being rotated is accounted for in the /etc/logrotate.d, most likely with a file provided by the package maintainer. For one-off scripts of your own design, you will need to provide some direction. Create a configuration file Within the /etc/logrotate.d directory you will find a series of files. Each file is a configuration that maps out which log files to target, and how to approach rotating them. The following configuration will: Look for files in /var/log That match the pattern backup-*.log Will rotate them daily Even if they don't exist Retaining 2 weeks worth Compressing the files But not the most recent ones Or if the file is empty With the specified permissions Or more simply: /var/log/backup-*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 root adm } You can tweak to your liking, but this tends to be pretty sufficient for most scenarios. Test out your new configuration With a new configuration file created, you can now test things out. To perform a dry-run, better known as debug mode in logrotate speak, run: logrotate -d /etc/logrotate.d/yourfile This will spit out a bunch of debugging information, finishing with presenting you with your rules in plain text. To actually test things out, flip the -d to -f to force execution: logrotate -f /etc/logrotate.d/yourfile Depending on what state your log file was currently in, you will most likely see some rotated files in /var/log. Check back in a few days to make sure things are to your liking and call it a day!

Part of the fun of self-hosting is making sure you follow best practices and don't shoot yourself in the foot. One of those tasks is making sure things are backed up, ideally to an off-site location (I use S3), and are encrypted.

I try to keep things simple. My go-to backup power move is to schedule a Bash script with cron. Because cron is a scheduler and not a logging system, I direct any output to a file in /var/log in case the need to debug arises.

One may think that logging to /var/log gets you some sort of log rotation for free. That's definitely not the case, as each file you see being rotated is accounted for in the /etc/logrotate.d, most likely with a file provided by the package maintainer.

For one-off scripts of your own design, you will need to provide some direction.

Create a configuration file

Within the /etc/logrotate.d directory you will find a series of files. Each file is a configuration that maps out which log files to target, and how to approach rotating them.

The following configuration will:

  • Look for files in /var/log
  • That match the pattern backup-*.log
  • Will rotate them daily
  • Even if they don't exist
  • Retaining 2 weeks worth
  • Compressing the files
  • But not the most recent ones
  • Or if the file is empty
  • With the specified permissions

Or more simply:

/var/log/backup-*.log {
        daily
        missingok
        rotate 14
        compress
        delaycompress
        notifempty
        create 0640 root adm
 }

You can tweak to your liking, but this tends to be pretty sufficient for most scenarios.

Test out your new configuration

With a new configuration file created, you can now test things out. To perform a dry-run, better known as debug mode in logrotate speak, run:

logrotate -d /etc/logrotate.d/yourfile

This will spit out a bunch of debugging information, finishing with presenting you with your rules in plain text.

To actually test things out, flip the -d to -f to force execution:

logrotate -f /etc/logrotate.d/yourfile

Depending on what state your log file was currently in, you will most likely see some rotated files in /var/log. Check back in a few days to make sure things are to your liking and call it a day!


View Entire Post

Read Entire Article