在Debian Web服务器上,rsyslog可作为统一日志中枢,集中采集 Nginx/Apache、PHP、应用与系统日志,并支持按程序、级别、主机进行精细化分流、远程传输与长期留存。
一、架构与适用场景
- 集中化采集:将 Nginx/Apache 访问与错误日志、PHP 错误、系统与安全事件统一发送到本地或远程 rsyslog,便于审计与合规。
- 多环境适配:物理机、虚拟机、容器均可对接;远程集中式日志便于 多机房/多实例统一运维。
- 可靠性与缓冲:rsyslog 支持 磁盘队列与可靠性传输,在网络抖动或后端暂不可用时降低丢日志风险。
- 可视化与分析:与 ELK/Fluentd/Graylog 对接,实现检索、告警与可视化。
二、部署与基础配置
- 安装与启用
- Debian 默认使用 rsyslog。如需安装或确认状态:sudo apt-get update && sudo apt-get install rsyslog && sudo systemctl enable --now rsyslog
- 接收远程日志(在日志服务器或具备公网/内网可达的节点)
- 编辑 /etc/rsyslog.conf 或 /etc/rsyslog.d/50-default.conf,启用模块与端口:
- module(load=“imudp”) input(type=“imudp” port=“514”)
- module(load=“imtcp”) input(type=“imtcp” port=“514”)
- 重启服务:sudo systemctl restart rsyslog
- 发送日志到远程(在业务 Web 服务器)
- 编辑 /etc/rsyslog.conf 或 /etc/rsyslog.d/forward.conf,按需选择协议:
- UDP:. @remote_log_host:514
- TCP:. @@remote_log_host:514
- 重启服务:sudo systemctl restart rsyslog
- 防火墙放行
- UFW:sudo ufw allow 514/udp;sudo ufw allow 514/tcp
- 目录与权限
- 自定义日志文件建议位于 /var/log/,并确保 root:adm 拥有合适权限(如 0640),便于 rsyslog 写入与系统工具读取。
三、按组件接入与分流示例
- Nginx/Apache 访问与错误日志
- 建议继续写入本地文件(便于按虚拟主机分割与性能分析),同时可将错误日志通过 syslog 上报:
- Nginx 示例:error_log syslog:server=remote_log_host:514,facility=local7,tag=nginx,severity=error warn;
- Apache 示例:ErrorLog syslog:remote_log_host:514, Facility=local7, Tag=apache
- 如需在 rsyslog 端按程序名分流:if $programname == ‘nginx’ then /var/log/nginx/error_syslog.log;if $programname == ‘apache2’ then /var/log/apache2/error_syslog.log
- PHP 错误日志
- 方式一(推荐):配置 PHP 使用 syslog
- php.ini:error_log = syslog
- 重启 Apache 或 PHP-FPM:sudo systemctl restart apache2 或 sudo systemctl restart php7.x-fpm
- 方式二:应用内使用 openlog/syslog 写入指定 facility(如 LOG_LOCAL6),便于与 Web 服务器日志隔离。
- 自定义应用日志
- 应用直接按 Syslog RFC5424 发送到 rsyslog(UDP/TCP/TLS),或在代码中使用各语言 Syslog 客户端库(如 Golang 的 go-syslog/srslog)。
四、日志轮转与保留策略
- 系统日志轮转
- 编辑 /etc/logrotate.d/rsyslog(示例):
- /var/log/syslog { weekly; missingok; rotate 52; compress; delaycompress; notifempty; create 0640 root adm }
- 自定义程序日志
- 为分流后的日志单独配置轮转(如 /var/log/nginx/error_syslog.log),保持与主日志一致的保留周期与压缩策略,避免磁盘被占满。
五、查询、告警与可视化
- 本地快速检索
- 实时查看:tail -f /var/log/syslog
- 按服务过滤:journalctl -u nginx;journalctl -u apache2;journalctl -f
- 按级别过滤:journalctl -p info(显示 info 及以上级别)
- 集中化分析与告警
- 将 rsyslog 输出到 ELK Stack(Elasticsearch, Logstash, Kibana) 或 Graylog/Fluentd,构建索引、仪表盘与阈值告警,实现跨实例与跨环境的可观测性。