要将交换机、路由器和服务器日志集中存储到专用日志服务器,同时确保源设备(交换机、路由器、服务器)的本地存储空间不被占满,需采用 智能日志转发+本地轮转 策略。以下是具体实施方案:
一、核心设计原则
源设备:只保留短期日志(如7天),自动清理旧日志
日志服务器:长期存储原始日志(如1年)+ 分析归档
传输协议:优先使用 TCP+TLS 保障可靠性
二、网络设备配置(以Cisco/Huawei为例)
1. Cisco设备 – 控制本地存储
cisco
! 限制本地日志缓存大小(默认4MB)
logging buffered 4096
! 设置日志服务器(TCP)
logging host 192.168.1.100 transport tcp
! 禁止向控制台输出日志
no logging console
! 自动清理旧日志(每当日志满时)
logging persistent url flash:/logs size 10 filesize 4
2. Huawei设备 – 本地日志轮转
huawei
# 设置日志服务器
info-center loghost 192.168.1.100 facility local6
# 限制本地日志文件大小(最大10MB,保留5个)
info-center logfile size 10 max-file-number 5
# 关闭不必要输出
info-center console channel deny
三、Linux服务器配置
1. 客户端配置(控制本地存储)
bash
# /etc/rsyslog.d/forward.conf
# 转发所有日志到中心服务器
*.* @@192.168.1.100:514 # TCP传输
# 本地只保留7天日志(通过logrotate)
sudo tee /etc/logrotate.d/rsyslog-local <<'EOF'
/var/log/syslog {
daily
rotate 7
compress
delaycompress
missingok
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
EOF
2. 日志服务器配置
bash
# /etc/rsyslog.d/central.conf
# 接收远程日志并分类存储
$template RemoteLogs,"/var/log/remote/%FROMHOST-IP%/%$YEAR%-%$MONTH%-%$DAY%.log"
ruleset(name="remote") {
action(type="omfile" template="RemoteLogs")
# 可选:同时写入Elasticsearch
action(type="omelasticsearch" server="localhost" index="logs-%FROMHOST-IP%")
}
module(load="imtcp" MaxSessions="500")
input(type="imtcp" port="514" ruleset="remote")
四、Windows服务器配置
使用 NXLog CE(社区版)实现日志转发和本地清理:
xml
# nxlog.conf
<Input eventlog>
Module im_msvistalog
SavePos TRUE
</Input>
<Output file>
Module om_file
File "C:\\\\Logs\\\\system_events.log"
Exec if file_size() > 10MB file_cycle();
</Output>
<Output rsyslog>
Module om_tcp
Host 192.168.1.100
Port 514
</Output>
<Route 1>
Path eventlog => file, rsyslog
</Route>
五、存储空间保障措施
1. 源设备空间控制
Cisco | logging buffered 4096 + logging persistent size 10 |
Huawei | info-center logfile size 10 max-file-number 5 |
Linux | logrotate 按大小/时间轮转 |
Windows | NXLog的file_cycle()函数 |
2. 日志服务器存储规划
bash
# 计算所需存储空间
预估公式:
总空间 = (单设备日均日志量 × 设备数 × 保留天数) × 冗余系数(1.3)
示例:
50台设备 × 50MB/天 × 365天 × 1.3 ≈ 1.2TB
3. 自动清理脚本(日志服务器)
bash
# /usr/local/bin/clean_old_logs.sh
#!/bin/bash
find /var/log/remote/ -name "*.log" -mtime +365 -delete
# 添加到cron
(crontab -l ; echo "0 3 * * * /usr/local/bin/clean_old_logs.sh") | crontab –
六、传输可靠性保障
1. 断网缓存(客户端)
bash
# Linux客户端配置本地队列
# /etc/rsyslog.d/queue.conf
$ActionQueueFileName queue # 内存队列名称
$ActionQueueMaxDiskSpace 1g # 最大磁盘缓存
$ActionQueueSaveOnShutdown on
$ActionQueueType LinkedList
$ActionResumeRetryCount -1 # 无限重试
2. 日志完整性校验
bash
# 使用rsyslog的imfile模块跟踪文件位置
module(load="imfile" Mode="inotify")
input(
type="imfile"
File="/var/log/network.log"
Tag="net-device"
ReadMode="2" # 跟踪inode防止日志轮转丢失
)
七、监控与告警
1. 日志收集状态监控
bash
# 检查各设备最新日志时间
find /var/log/remote/ -type f -name "*.log" -exec stat -c "%n %y" {} \\; | sort -k2
2. Prometheus监控指标
yaml
# rsyslog exporter配置
scrape_configs:
– job_name: 'rsyslog'
static_configs:
– targets: ['192.168.1.100:9100']
3. 磁盘空间告警规则
bash
# /usr/local/bin/check_disk.sh
#!/bin/bash
THRESHOLD=90
USAGE=$(df -h /var/log | awk 'NR==2{print $5}' | tr -d '%')
[ $USAGE -gt $THRESHOLD ] && \\
echo "Alert: Log disk usage $USAGE%" | mail -s "STORAGE ALERT" admin@example.com
八、实施流程图
图表
代码
通过以上方案,您将获得:
-
源设备:本地仅保留必要日志,避免存储溢出
-
集中存储:所有原始日志长期保留在专用服务器
-
可靠性:断网缓存+加密传输确保数据不丢失
-
可扩展性:支持后续接入SIEM分析平台(如Splunk)
评论前必须登录!
注册