温馨提示×

如何过滤Debian syslog

小樊
38
2026-07-07 20:51:28
栏目: 智能运维

在 Debian 系统中,过滤 syslog 通常取决于你使用的是 传统 rsyslog 还是 systemd-journald。下面按常见场景分别说明。


一、使用 rsyslog 过滤 syslog(最常见)

Debian 默认通常使用 rsyslog 作为 syslog 守护进程。

1️⃣ 查看 rsyslog 配置目录

ls /etc/rsyslog.d/

通常会有:

  • /etc/rsyslog.conf
  • /etc/rsyslog.d/*.conf

2️⃣ 按程序 / 服务过滤(推荐)

例如:只记录 sshd 的日志

sudo nano /etc/rsyslog.d/10-sshd.conf

内容示例:

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

说明:

  • :programname:按程序名过滤
  • isequal:完全匹配
  • & stop:匹配后不再继续处理

重启 rsyslog:

sudo systemctl restart rsyslog

3️⃣ 按日志级别过滤

例如:只记录 warning 及以上 的日志

*.warning    /var/log/warning.log

常见级别(从低到高):

debug
info
notice
warning
err
crit
alert
emerg

4️⃣ 按 IP / 主机名过滤

:hostname, contains, "server01" /var/log/server01.log
& stop

5️⃣ 排除某些日志(反向过滤)

例如:排除 cron 日志

:programname, isequal, "cron" ~

或(新版 rsyslog):

if ($programname == "cron") then stop

二、使用 journalctl 过滤(systemd 系统)

Debian 8+ 基本都使用 systemd。

1️⃣ 按服务过滤

journalctl -u ssh.service

实时查看:

journalctl -u ssh.service -f

2️⃣ 按时间过滤

journalctl --since "2026-01-20 10:00" --until "2026-01-20 12:00"

最近 1 小时:

journalctl --since "1 hour ago"

3️⃣ 按优先级过滤

journalctl -p warning

4️⃣ 按进程 / 可执行文件

journalctl _COMM=sshd

5️⃣ 导出并过滤

journalctl > all.log
grep sshd all.log

三、查看 syslog 文件并过滤

如果日志仍在 /var/log/syslog

grep sshd /var/log/syslog

实时过滤:

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

四、常见需求示例

✅ 只保留错误日志

*.err    /var/log/error.log

✅ 禁止某服务写 syslog

:programname, isequal, "some-service" ~

✅ 不同服务写不同日志文件

:programname, isequal, "nginx" /var/log/nginx.log
:programname, isequal, "mysql" /var/log/mysql.log

五、调试 rsyslog 规则

测试配置文件:

rsyslogd -N1

如果你能说明:

  • 过滤什么(服务 / 级别 / 关键词)
  • 输出到哪里
  • Debian 版本(cat /etc/debian_version

我可以给你一份完全可直接用的配置文件

0