logrotate不直接支持按网络协议切割日志,但可通过服务配置将HTTP、TCP/UDP、SSH等协议日志分离至不同文件,并为每个文件创建独立的logrotate规则,实现分类切割。关键步骤包括:Nginx按scheme分离HTTP/HTTPS访问日志,rsyslog按%protocol%模板保存远程日志,SSH日志独立记录;随后在/etc/logrotate.d/下为每类日志配置相应策略,如nginx-http设为daily保留7天,remote-syslog weekly保留12周,auth.log weekly保留4周,并启用compress、create等选项;最后通过logrotate -d和-f测试配置并验证切割效果。该方法本质是基于日志路径和服务类型实现协议级管理。

Linux系统中日志文件会随着时间不断增长,影响系统性能和管理效率。logrotate 是 Linux 下用于自动切割、压缩、归档日志的标准工具。虽然 logrotate 默认按时间或大小切割日志,但“按网络协议”切割并不是 logrotate 的原生功能。不过我们可以通过自定义配置,结合服务类型(如 TCP、UDP、HTTP 等)生成的日志路径,实现按协议分类并分别切割的目的。
严格来说,logrotate 不直接识别网络协议来切割日志。所谓“按网络协议切割”,通常是指:
因此,关键是将不同协议相关的日志分离到不同文件,并为每个文件设置独立的切割策略。
假设我们有以下几种协议相关的日志需要独立切割:
1. 确保日志按协议分离存储
先确认各服务已将日志写入独立文件:
# Nginx 配置(/etc/nginx/nginx.conf) access_log /var/log/nginx/access-http.log; error_log /var/log/nginx/error.log; <h1>若支持 HTTPS,可单独记录</h1><p>access_log /var/log/nginx/access-https.log if=$scheme_https;</p><h1>Rsyslog 接收远程 UDP/TCP 日志,按来源保存</h1><h1>/etc/rsyslog.conf</h1><p>$ActionFileDefaultTemplate RSYSLOG_ForwardFormat module(load="imtcp" Port="514") module(load="imudp" Port="514")</p><h1>按主机/IP或协议分类保存</h1><p>$template RemoteLogs,"/var/log/remote/%fromhost%-%protocol%.log" <em>.</em> ?RemoteLogs</p>
2. 为每类协议日志创建独立的 logrotate 配置
在 /etc/logrotate.d/ 下创建对应配置文件:
HTTP 访问日志切割(/etc/logrotate.d/nginx-http)
/var/log/nginx/access-http.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0644 www-data adm
sharedscripts
postrotate
systemctl reload nginx > /dev/null 2>&1 || true
endscript
}
HTTPS 访问日志切割(/etc/logrotate.d/nginx-https)
/var/log/nginx/access-https.log {
daily
missingok
rotate 10
compress
delaycompress
notifempty
create 0644 www-data adm
sharedscripts
postrotate
systemctl reload nginx > /dev/null 2>&1 || true
endscript
}
远程 UDP/TCP Syslog 切割(/etc/logrotate.d/remote-syslog)
/var/log/remote/*.log {
weekly
missingok
rotate 12
compress
notifempty
create 0644 syslog adm
olddir /var/log/remote/archive
prerotate
mkdir -p /var/log/remote/archive
endscript
}
SSH 登录日志切割(/etc/logrotate.d/ssh-auth)
/var/log/auth.log {
weekly
rotate 4
compress
missingok
notifempty
create 0640 root adm
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
配置完成后,建议进行测试:
logrotate -d /etc/logrotate.conf(dry-run 模式)logrotate -f /etc/logrotate.d/nginx-http
cat /var/lib/logrotate/status
观察日志是否被正确切割、压缩,并确认 postrotate 脚本生效(如服务重载)。
logrotate 本身不识别网络协议,但通过以下方式可实现按协议分类切割:
基本上就这些。只要日志源头做好分类,logrotate 就能按需切割,达到“按网络协议管理日志”的效果。
以上就是Linux日志怎么切割_Linux日志使用logrotate按网络协议切割的详细配置方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号