日志管理是Linux系统维护的重要组成部分,良好的日志配置可以帮助您监控系统状态、排查问题和确保安全性。以下是在Linux上配置日志管理的详细方案:
Linux系统主要使用以下日志系统: - rsyslog:大多数现代Linux发行版的默认日志系统 - systemd-journald:使用systemd的系统的日志服务 - syslog-ng:rsyslog的替代方案
配置文件通常位于/etc/rsyslog.conf
和/etc/rsyslog.d/
目录下
# 编辑主配置文件
sudo nano /etc/rsyslog.conf
# 将所有内核消息记录到kern.log
kern.* /var/log/kern.log
# 记录所有优先级为crit或更高的日志
*.crit /var/log/critical.log
# 记录mail日志,但不包括info级别
mail.*;mail.!=info /var/log/mail.log
# 对于多主机环境
$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs
# 在/etc/rsyslog.conf中添加
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$ActionFileEnableSync on
$WorkDirectory /var/spool/rsyslog
$IncludeConfig /etc/rsyslog.d/*.conf
logrotate用于管理日志文件的轮转、压缩和删除
配置文件通常位于/etc/logrotate.conf
和/etc/logrotate.d/
# 编辑或创建自定义配置
sudo nano /etc/logrotate.d/myapp
/var/log/myapp/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 644 root root
sharedscripts
postrotate
/usr/bin/systemctl restart rsyslog >/dev/null 2>&1 || true
endscript
}
对于使用systemd的系统:
# 查看journal日志
journalctl
# 常用选项
journalctl -u nginx.service # 查看特定服务日志
journalctl -f # 跟踪日志
journalctl --since "2023-01-01" --until "2023-01-02"
journalctl -p err..alert # 按优先级过滤
配置journald持久化存储:
sudo mkdir /var/log/journal
sudo systemctl restart systemd-journald
sudo chmod 640 /var/log/secure.log
sudo chown root:adm /var/log/secure.log
# 在rsyslog客户端配置
$DefaultNetstreamDriver gtls
$DefaultNetstreamDriverCAFile /path/to/ca.pem
$ActionSendStreamDriverAuthMode x509/name
$ActionSendStreamDriverPermittedPeer *.example.com
*.* @@(o)logs.example.com:6514
# 使用AIDE或其他工具监控日志文件完整性
sudo aide --check
sudo apt install logwatch
sudo nano /usr/share/logwatch/default.conf/logwatch.conf
#!/bin/bash
ERROR_COUNT=$(grep -c "ERROR" /var/log/myapp.log)
if [ "$ERROR_COUNT" -gt 10 ]; then
echo "High error count in myapp.log: $ERROR_COUNT" | mail -s "Error Alert" admin@example.com
fi
# 在rsyslog中启用结构化日志
module(load="mmjsonparse")
action(type="mmjsonparse")
# 使用imfile模块高效读取文件
module(load="imfile" PollingInterval="10")
input(type="imfile" File="/path/to/file.log" Tag="myapp")
# 每10条日志记录1条
if $msg contains "DEBUG" then {
action(type="omfile" file="/var/log/debug.log"
action.execOnlyWhenPreviousIsSuspended="on"
action.resumeInterval="10")
}
通过以上配置,您可以建立一个健壮、高效的Linux日志管理系统,满足监控、审计和故障排除的需求。