rsyslog可通过模板与属性过滤实现日志自动分目录存储:按programname分服务目录、按facility+服务精细化分流、按源ip网段做租户隔离,并需配合logrotate显式配置子目录轮转。

直接用 rsyslog 的模板 + 属性过滤功能,就能按服务来源把日志自动分目录存放,不需要额外脚本或中间转发。
按服务名(PROGRAMNAME)自动分目录
rsyslog 可通过 $PROGRAMNAME 属性识别日志来源进程名(如 nginx、sshd、crond),再结合 $template 定义路径模板:
- 在
/etc/rsyslog.d/10-service-dir.conf中添加: $template ServiceDir,"/var/log/services/%PROGRAMNAME%/all.log"*.* ?ServiceDir- 保存后执行
sudo mkdir -p /var/log/services/{nginx,sshd,crond}并确保syslog:adm有写权限 - 重启服务:
sudo systemctl restart rsyslog
按设施(facility)+ 服务组合精细化分流
很多服务可通过 logger 或应用配置指定 facility(如 local0~local7),便于与系统日志解耦:
使用 OpenAI Codex CLI 处理编码任务。触发词:codex、code review、fix CI、refactor code、implement feature、coding agent、gpt-5-codex。Clawdbot 可将编码工作委托给 Codex CLI 作为子代理或直接工具。
- 让 Nginx 日志走
local4:在 Nginx 配置中加error_log syslog:server=127.0.0.1,facility=local4; - 在 rsyslog 中定义模板:
$template NginxLog,"/var/log/services/nginx/%$YEAR%%$MONTH%%$DAY%.log" - 添加规则:
local4.* ?NginxLog - 同理可为 MySQL(local5)、自定义 Java 应用(local6)分别设置独立模板和目录
配合 IP 段实现租户级隔离(适合日志采集场景)
当多个客户端(如 IoT 设备、边缘节点)向同一 rsyslog 服务器发日志时,可用源 IP 自动归类:
- 启用网络输入:
$ModLoad imudp和$UDPServerRun 514 - 定义模板提取网段:
$template TenantLogs,"/var/log/tenant-%$!fromhost-ip:R,2:16%%/%PROGRAMNAME%.log" - 路由规则:
if $fromhost-ip startswith '192.168.10.' then ?TenantLogs - 提前创建目录:
sudo mkdir -p /var/log/tenant-192.168.10,并设权限chown syslog:adm /var/log/tenant-192.168.10
权限与轮转必须同步配置
分目录后,logrotate 不会自动覆盖子目录,需显式声明:
- 新建
/etc/logrotate.d/rsyslog-services - 内容示例:
/var/log/services/*/*.log {dailymissingokrotate 14compresscreate 0640 syslog adm}










