Introduction to Log Rotation with systemd
I’ve seen log files consume all available disk space, bringing systems to a grinding halt. That’s why log rotation is a crucial aspect of system administration. With systemd becoming a de facto standard for managing system services and logs on many Linux distributions, I’ll explore how to use it to manage and rotate log files efficiently.
Understanding systemd-journald
systemd-journald is the system service that collects and stores log messages from various sources, including system services, kernel messages, and user applications. By default, journald stores log messages in a binary format, which can be queried using the journalctl command. To manage log rotation, we need to understand how journald handles log storage and rotation. Don’t bother with manually rotating log files - journald can handle it for you.
Configuring journald for Log Rotation
To configure journald for log rotation, we need to edit the /etc/systemd/journald.conf file. This file contains various options that control how journald stores and rotates log files. The real trick is finding the right balance between log storage and free disk space. The most relevant options for log rotation are:
SystemMaxUse: sets the maximum disk space that journald can use for log storageSystemKeepFree: sets the minimum amount of free disk space that journald should maintainRuntimeMaxUse: sets the maximum disk space that journald can use for runtime log storageRuntimeKeepFree: sets the minimum amount of free disk space that journald should maintain for runtime logs
For example, to set the maximum disk space for log storage to 1 GB and maintain at least 500 MB of free disk space, we can add the following lines to /etc/systemd/journald.conf:
[Journal]
SystemMaxUse=1G
SystemKeepFree=500M
After editing the configuration file, we need to restart the journald service to apply the changes:
sudo systemctl restart systemd-journald
In practice, you’ll want to monitor your log storage usage regularly to prevent disk space issues.
Using journalctl to Manage Log Files
The journalctl command provides a powerful way to manage and query log files. We can use journalctl to list all log files, filter log messages, and even delete old log files. For example, to list all log files, we can use the following command:
sudo journalctl --list-boots
To delete old log files, we can use the --vacuum-size option:
sudo journalctl --vacuum-size=500M
This command will delete old log files until the total disk space used by journald is less than 500 MB. This is where people usually get burned - forgetting to clean up old log files can lead to disk space issues.
Security Considerations
When managing log files, security is a top concern. Log files can contain sensitive information, such as user credentials, IP addresses, and system configuration details. To minimize security risks, we should ensure that log files are stored securely and access is restricted to authorized personnel. I usually start with restricting access to log files and monitoring log file access using tools like auditd.
Troubleshooting Log Rotation Issues
If we encounter issues with log rotation, we can use the journalctl command to diagnose problems. For example, to check the current log storage usage, we can use the following command:
sudo journalctl --disk-usage
This command will display the current log storage usage and help us identify potential issues. Don’t ignore log rotation issues - they can lead to security breaches and system instability.
Best Practices for Log Rotation
To ensure efficient log rotation, we should follow best practices:
- Regularly monitor log storage usage to prevent disk space issues
- Configure journald to maintain a reasonable amount of free disk space
- Use
journalctlto query and manage log files - Restrict access to log files to authorized personnel
- Use tools like
auditdto monitor log file access and detect security breaches
For more information on systemd and journald, we can refer to the systemd documentation and the journald documentation.
See also
- Taming systemd-resolved: Avoiding DNS Surprises on Multi-Network Linux Setups
- Taming Log Noise with jq and systemd Journal Filters
- Using resolvectl to Diagnose and Resolve Stubborn DNS Issues on Linux
- Using Find and Xargs to Safely Remove Unused Packages on a Crowded Linux System
- Debugging Local Network Issues with resolvectl and ss