Taming the Noise: Filtering Out Unnecessary Logs with journalctl and Logrotate

Introduction to Log Management

I’ve seen log management become a major pain point for many Linux admins. The sheer volume of log data can be overwhelming, making it tough to identify important events. That’s where journalctl and logrotate come in - two powerful tools that can help you tame the noise in your Linux logs.

Understanding journalctl

journalctl is a command-line utility that’s part of the systemd suite. It provides a flexible way to view, filter, and analyze log data. To get started with journalctl, you can use the following command to view all system logs:

journalctl -n

This will display the most recent log entries. If you want to follow the log output in real-time, use the -f option:

journalctl -f

Filtering Logs with journalctl

One of the most useful features of journalctl is its ability to filter logs based on various criteria. For example, you can use the -u option to view logs for a specific systemd unit:

journalctl -u sshd

This will display all log entries related to the SSH daemon. You can also use the -p option to view logs with a specific priority level:

journalctl -p err

This will display all log entries with an error priority level. Don’t bother with trying to parse the logs manually - journalctl makes it easy to filter out the noise.

Understanding logrotate

logrotate is a utility that helps you manage log files by rotating, compressing, and deleting them. This prevents log files from growing too large and consuming too much disk space. To get started with logrotate, you’ll need to edit the /etc/logrotate.conf file to configure log rotation settings.

Configuring logrotate

The /etc/logrotate.conf file contains settings for log rotation, including the frequency of rotation, the number of log files to keep, and the compression algorithm to use. For example, you can add the following configuration to rotate logs daily and keep 7 days’ worth of logs:

/var/log/*.log {
    daily
    missingok
    notifempty
    delaycompress
    compress
    maxsize 100M
    maxage 7
    postrotate
        /usr/sbin/service rsyslog restart > /dev/null
    endscript
}

This configuration will rotate logs daily, compress them, and keep 7 days’ worth of logs. The real trick is to find the right balance between log retention and disk space usage.

Combining journalctl and logrotate

To really tame the noise in your Linux logs, you can combine journalctl and logrotate to filter and rotate logs. For example, you can use journalctl to filter out unnecessary log entries and then use logrotate to rotate the remaining logs.

Example Configuration

Here’s an example configuration that combines journalctl and logrotate:

# Filter out unnecessary log entries
journalctl -u sshd -p info --since=yesterday > /var/log/ssh.log

# Rotate logs daily and keep 7 days' worth of logs
/var/log/ssh.log {
    daily
    missingok
    notifempty
    delaycompress
    compress
    maxsize 100M
    maxage 7
    postrotate
        /usr/sbin/service rsyslog restart > /dev/null
    endscript
}

This configuration will filter out unnecessary log entries for the SSH daemon, rotate the remaining logs daily, and keep 7 days’ worth of logs. In practice, this can help you identify security incidents and system errors more easily.

Security Considerations

When managing logs, security is a top concern. You should ensure that log files are stored securely and that access to log files is restricted to authorized personnel. Tools like SELinux can help enforce access control policies for log files. This is where people usually get burned - neglecting log security can lead to major breaches.

Troubleshooting Notes

When using journalctl and logrotate, you may encounter issues like log files growing too large or log rotation not working as expected. To troubleshoot these issues, you can use the following commands:

# Check log file size
du -sh /var/log/*

# Check log rotation status
logrotate -f /etc/logrotate.conf

I usually start with these commands to identify the root cause of the issue. You can also check the systemd documentation for more information on journalctl and logrotate documentation for more information on log rotation.


See also