核心在于统一采集、结构化处理、可追溯分析:需为守护进程配置原生syslog支持或wrapper工具打标发送,按功能分配local0–local7设施,通过rsyslog模板补全元数据、分级路由,并结合TCP+TLS传输、logrotate轮转及自动化响应实现安全可控的日志生命周期管理。

用 syslog 管理守护进程日志,核心在于统一采集、结构化处理、可追溯分析。关键不是把日志“存下来”,而是让每条日志自带上下文、能自动分流、可触发动作。
明确日志来源与设施分类
守护进程(如 nginx、redis、haproxy)默认不走 syslog,需主动集成。不能简单 redirect stdout/stderr,而应配置其原生 syslog 支持或用 wrapper 工具(如 logger、systemd-cat)打标发送。
- 每个服务按功能归属设施(facility):web 服务用 local0,数据库用 local1,中间件用 local2
- 在 rsyslog 配置中为不同 facility 指定独立文件路径,例如:
$template NginxFormat,"%timegenerated% %HOSTNAME% nginx[%procid%]: %msg%\n"<br>*.*;local0.none /var/log/syslog<br>local0.* ?NginxFormat
- 避免混用
user.*或daemon.*——它们语义模糊,不利于后期规则匹配
标准化格式 + 结构化字段注入
原始日志常缺主机、服务名、进程 ID 等关键元数据。rsyslog 可通过 property replacer 补全,也可由应用自身注入 JSON 字段。
- 启用 rsyslog 的 imjournal 模块,直接读取 journald 的结构化日志(含 _PID、_COMM、_HOSTNAME)
- 对非 systemd 服务,在启动命令中嵌入 logger:
nginx -c /etc/nginx/nginx.conf 2>&1 | logger -t "nginx" -p local0.info - 若使用 systemd,推荐用
StandardOutput=syslog和SyslogIdentifier=nginx-prod,让日志天然带标签和优先级
分级路由与自动化响应
日志不是只看,而是要“动”。rsyslog 内置过滤能力足够支撑轻量级自动化,无需立刻上 ELK。
- 按严重性分流:warning 及以上写入告警队列(如写入 Redis list),info 级别进归档目录
- 内容匹配触发动作:发现
"connection refused"连续出现 5 次,执行脚本重启关联服务 - 利用 omprog 模块调用 Python 脚本做字段提取(如从日志里抽 URL、状态码、耗时),再入库或发 Slack
安全传输与生命周期管控
生产环境不能裸传 UDP 日志,也不能任由日志无限堆积。
- 强制启用 TCP + TLS:在 rsyslog 服务端加载
imtcp和gtls模块,客户端配@@logserver:6514(双 @ 表示 TCP+TLS) - logrotate 不仅轮转,还要压缩和校验:
/var/log/remote/*.log {<br> daily<br> rotate 14<br> compress<br> missingok<br> sharedscripts<br> postrotate<br> systemctl kill -s HUP rsyslog<br> endscript<br>} - 设置磁盘水位告警:当
/var/log使用率超 85%,自动清理最老的 .gz 文件并通知运维

















