Debian日志回收与分析方法
一 日志回收与保留策略
使用 logrotate 管理传统文本日志
大多数 Debian 系统默认已安装 logrotate。主配置在 /etc/logrotate.conf,按服务拆分配置在 /etc/logrotate.d/。示例(对系统日志与自定义应用日志):
/var/log/syslog {
weekly
rotate 52
compress
delaycompress
missingok
notifempty
create 0640 root adm
}
/var/log/myapp.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 root adm
}
常用命令:手动强制执行一次轮转(测试用)sudo logrotate -f /etc/logrotate.conf;logrotate 通常由 /etc/cron.daily/logrotate 每日定时调用。建议对关键业务日志设置合理的保留周期与压缩策略,避免磁盘被占满。
清理 systemd 日志(journald)
使用 journalctl 设置保留策略,例如:保留最近 2 周 日志 sudo journalctl --vacuum-time 2weeks;或限制总大小不超过 100MB sudo journalctl --vacuum-size 100M。此方式不影响 /var/log/ 下的文本日志。
二 日志分析与排查常用命令
基于 systemd 的日志查询
查看全部日志:journalctl;按服务:journalctl -u <service_name>;按时间:journalctl --since “2025-11-01” --until “2025-11-22”;实时跟踪:journalctl -f;内核日志:journalctl -k;按优先级:journalctl -p err;按进程/用户:journalctl _PID=
基于文本日志的检索与统计
定位关键错误:grep -i “error” /var/log/syslog;递归搜索:grep -r “error” /var/log/;统计错误数:grep -i “error” /var/log/syslog | wc -l;字段提取与统计:awk ‘{print $1,$2,$3}’ /var/log/syslog;对结果去重计数:grep “ERROR” /var/log/syslog | sort | uniq -c;分页查看:less /var/log/syslog;实时查看:tail -f /var/log/syslog。以上命令可组合管道形成分析流程。
三 常用日志分析工具
轻量报告与日常巡检:Logwatch
安装:sudo apt-get install logwatch;生成报告:sudo logwatch;按服务:sudo logwatch --service <service_name>;可配置输出方式(如邮件)与统计区间,用于每日/每周巡检。
集中化与可视化平台
当日志量大、来源多时,建议引入 ELK Stack(Elasticsearch、Logstash、Kibana)、Graylog 或 Splunk 做集中采集、检索、可视化与告警,便于跨主机与跨服务分析。
四 实操示例 定位一周内 SSH 登录失败并回收空间
分析阶段
统计失败登录:grep “Failed password” /var/log/auth.log | grep “$(date -d ‘1 week ago’ ‘+%b %d’)” | sort | uniq -c;实时观察:journalctl -u ssh -f -p err;如需跨文件检索:grep -r “Failed password” /var/log/auth.log*。上述命令帮助快速定位暴力破解或异常登录来源。
回收阶段
文本日志轮转与压缩:在 /etc/logrotate.d/rsyslog 或自定义配置中设置如 daily、rotate 7、compress、delaycompress、missingok、notifempty、create 0640 root adm,然后执行 sudo logrotate -f /etc/logrotate.d/rsyslog 测试;清理 systemd 旧日志:sudo journalctl --vacuum-time 2weeks。注意避免直接用 rm 删除正在被 logrotate 管理的文件,以免破坏轮转状态。