温馨提示×

linux syslog如何过滤

小樊
37
2026-10-10 15:17:18
栏目: 智能运维

在 Linux 中,syslog 的“过滤”通常可以从 三个层面 来做:

  1. 采集/写入时过滤(rsyslog / syslog-ng 规则)
  2. 查看时过滤(命令行)
  3. 集中式日志系统过滤(journald / logrotate / ELK 等)

下面按最常见场景说明。


一、rsyslog 中过滤(最常用)

1️⃣ 按 facility / priority 过滤

# /etc/rsyslog.conf 或 /etc/rsyslog.d/*.conf

# 只记录 mail 的 error 以上
mail.err    /var/log/mail.err

# 忽略 cron 的 info
cron.info   ~

常见 facility:

auth, authpriv, cron, daemon, kern, mail, user, local0~local7

priority(从低到高):

debug < info < notice < warning < err < crit < alert < emerg

2️⃣ 按 程序名(progname) 过滤

:programname, isequal, "sshd"    /var/log/sshd.log

或排除:

:programname, contains, "systemd"   stop

3️⃣ 按 关键字(message) 过滤

:msg, contains, "error"    /var/log/error.log

排除某些日志:

:msg, contains, "timeout"   stop

4️⃣ 按 主机名 / IP

:hostname, isequal, "web01"   /var/log/web01.log

修改后重启:

systemctl restart rsyslog

二、systemd-journald 过滤(journalctl)

按服务

journalctl -u nginx

按优先级

journalctl -p err

按时间

journalctl --since "2024-01-01" --until "2024-01-02"

按关键字

journalctl | grep "error"

组合过滤

journalctl -u sshd -p warning --since "1 hour ago"

三、查看日志文件时过滤

grep

grep "error" /var/log/messages

实时过滤

tail -f /var/log/syslog | grep sshd

多关键字

grep -E "error|fail|warn" /var/log/syslog

四、syslog-ng 过滤(如果你用的是 syslog-ng)

filter f_ssh { program("sshd"); };
destination d_ssh { file("/var/log/ssh.log"); };
log { source(s_src); filter(f_ssh); destination(d_ssh); };

五、常见实战例子

✅ 只保留错误日志

*.err    /var/log/errors.log

✅ 丢弃调试日志

*.debug   stop

✅ 把 SSH 单独放

:programname, isequal, "sshd"   /var/log/ssh.log
& stop

六、总结一句话

  • 写日志前过滤 → rsyslog / syslog-ng
  • 看日志时过滤 → grep / journalctl
  • 生产环境建议:按 service + level 分文件,避免全堆在 messages

如果你能告诉我:

  • 用的是 rsyslog / syslog-ng / journald
  • 想过滤 哪种日志(SSH、nginx、kernel)

我可以直接帮你写一份配置。

0 踩