Why Centralized Logging Matters
In modern IT environments, managing logs across multiple servers is critical for security auditing, troubleshooting, and compliance. Rsyslog (the “rocket-fast” system log processor) enables efficient remote log collection by centralizing logs from multiple sources into a single repository.
Key Rsyslog Concepts
- Client (Sender): Servers/applications generating logs (e.g., web servers, databases).
- Server (Receiver): Central log aggregator storing all logs.
- Protocols:
- UDP (Port 514): Fast but unreliable (no delivery guarantees).
- TCP (Port 514): Reliable delivery with connection overhead.
- RELP (Port 20514): Lossless protocol for critical environments.
Step-by-Step Configuration
1. Server Setup (Log Receiver)
Edit /etc/rsyslog.conf
:
# Enable TCP/UDP listening
module(load="imudp") # UDP module
input(type="imudp" port="514")
module(load="imtcp") # TCP module
input(type="imtcp" port="514")
# Define template for storing logs by client hostname
template(
name="RemoteLogs"
type="string"
string="/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log"
)
# Apply template to received logs
if $fromhost-ip != '127.0.0.1' then {
action(type="omfile" dynaFile="RemoteLogs")
}
Restart Rsyslog:
sudo systemctl restart rsyslog
2. Client Setup (Log Sender)
Edit /etc/rsyslog.conf
:
# Send all logs to central server via TCP (replace 192.168.1.100)
action(type="omfwd"
protocol="tcp"
target="192.168.1.100"
port="514"
queue.type="linkedList"
queue.filename="forwarding_q"
action.resumeRetryCount="-1"
)
Restart Rsyslog:
sudo systemctl restart rsyslog
Securing Log Transmission (TLS)
For sensitive environments, encrypt logs with TLS:
- Generate Certificates (server/client):
sudo openssl req -x509 -newkey rsa:2048 -keyout /etc/rsyslog/key.pem -out /etc/rsyslog/cert.pem -days 365
- Server Config:
module(load="imtcp" StreamDriver.AuthMode="x509/name" StreamDriver.Mode="1") input(type="imtcp" port="6514")
- Client Config:
action(type="omfwd" protocol="tcp" target="logs.example.com" port="6514" StreamDriver="gtls" StreamDriverMode="1" StreamDriverAuthMode="x509/name")
Verification & Troubleshooting
- Check Server Logs:
tail -f /var/log/remote/client_hostname/messages.log
- Test Connectivity:
# On client logger "Test message" && echo "Check server for 'Test message'"
- Common Issues:
- Firewall Blocking: Ensure TCP/UDP ports are open.
- Permissions: Verify
/var/log/remote
exists and is writable. - SELinux: Temporarily disable with
setenforce 0
to test.
Advanced Options
- Filtering: Route logs by severity/facility:
if $syslogseverity **Pro Tip**: Monitor `/var/log/syslog` on both client/server for Rsyslog errors during setup!
Resources: