温馨提示×

linux syslog如何分流

小樊
43
2026-09-07 19:08:08
栏目: 智能运维

在 Linux 里“syslog 分流”通常指把不同来源 / 级别 / 内容的日志送到不同地方(文件、远程服务器、灰度设备、外部程序等)。下面按常见方案从简单到高级说明。


一、rsyslog(最常用)

1. 按 facility / priority 分流

# /etc/rsyslog.conf 或 /etc/rsyslog.d/*.conf
auth.*          /var/log/auth.log
mail.err        /var/log/mail.err
*.info;mail.none;auth.none   /var/log/messages
  • facility:auth, cron, kern, mail, local0~local7
  • priority:debug < info < notice < warn < err < crit < alert < emerg

2. 按程序 / 来源主机分流

if ($programname == 'nginx') then {
    action(type="omfile" file="/var/log/nginx.log")
}

if ($hostname == 'web01') then {
    action(type="omfile" file="/var/log/web01.log")
}

3. 远程分流(集中收集)

# 发送端
*.* @192.168.1.10:514

# 接收端
module(load="imudp")
input(type="imudp" port="514")

4. 按内容正则分流

if ($msg contains 'timeout') then {
    action(type="omfile" file="/var/log/timeout.log")
}

二、syslog-ng(更灵活)

source s_src {
    system();
    internal();
};

destination d_auth { file("/var/log/auth.log"); };
destination d_nginx { file("/var/log/nginx.log"); };

filter f_auth { facility(auth); };
filter f_nginx { program("nginx"); };

log { source(s_src); filter(f_auth); destination(d_auth); };
log { source(s_src); filter(f_nginx); destination(d_nginx); };

三、systemd-journald + 分流

journal 本身不直接“分流文件”,通常:

  • 用 rsyslog / syslog-ng 读取 journal
  • 或 journalctl 导出
# rsyslog 读取 journal
module(load="imjournal")

四、按“业务”分流(推荐 local0~local7)

应用配置:

syslog facility=local0

rsyslog:

local0.* /var/log/appA.log
local1.* /var/log/appB.log

五、常见分流场景示例

1. 错误日志单独存

*.err /var/log/error.log

2. 调试日志只给开发

local2.debug /var/log/dev.debug

3. 敏感日志不写磁盘

auth.* ~

4. 日志同时写文件和远程

*.* /var/log/all.log
*.* @logserver:514

六、验证 & 调试

logger -p local0.info "test message"
tail -f /var/log/appA.log

rsyslogd -N1   # 配置语法检查

如果你能说明:

  • 用的是 rsyslog / syslog-ng / journald
  • 想按 程序 / 级别 / 关键字 / 主机 分流
  • 是否要 远程 / 文件 / Kafka / 数据库

我可以直接给你一份可用配置。

0 踩