在 Linux 里“syslog 分流”通常指把不同来源 / 级别 / 内容的日志送到不同地方(文件、远程服务器、灰度设备、外部程序等)。下面按常见方案从简单到高级说明。
# /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~local7priority:debug < info < notice < warn < err < crit < alert < emergif ($programname == 'nginx') then {
action(type="omfile" file="/var/log/nginx.log")
}
if ($hostname == 'web01') then {
action(type="omfile" file="/var/log/web01.log")
}
# 发送端
*.* @192.168.1.10:514
# 接收端
module(load="imudp")
input(type="imudp" port="514")
if ($msg contains 'timeout') then {
action(type="omfile" file="/var/log/timeout.log")
}
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); };
journal 本身不直接“分流文件”,通常:
rsyslog / syslog-ng 读取 journaljournalctl 导出# rsyslog 读取 journal
module(load="imjournal")
应用配置:
syslog facility=local0
rsyslog:
local0.* /var/log/appA.log
local1.* /var/log/appB.log
*.err /var/log/error.log
local2.debug /var/log/dev.debug
auth.* ~
*.* /var/log/all.log
*.* @logserver:514
logger -p local0.info "test message"
tail -f /var/log/appA.log
rsyslogd -N1 # 配置语法检查
如果你能说明:
我可以直接给你一份可用配置。