温馨提示×

linux syslog怎样过滤

小樊
45
2026-09-01 19:09:37
栏目: 智能运维

在 Linux 中,syslog 过滤通常可以从 日志产生端(rsyslog/syslog-ng 配置)日志查看端(命令行过滤) 两个层面来做。下面按常见场景说明。


一、查看日志时过滤(最常用)

1. 使用 grep 过滤

# 按关键字过滤
grep "error" /var/log/syslog

# 忽略大小写
grep -i "ssh" /var/log/syslog

# 反向过滤(排除)
grep -v "cron" /var/log/syslog

# 实时过滤
tail -f /var/log/syslog | grep "sshd"

2. 按时间过滤

# 今天
grep "$(date +%b\ %e)" /var/log/syslog

# journald 系统(systemd)
journalctl --since "2026-01-21 10:00" --until "2026-01-21 12:00"

3. 使用 journalctl 过滤(systemd 系统)

# 按服务
journalctl -u sshd

# 按优先级(err 及以上)
journalctl -p err

# 按进程
journalctl _PID=1234

# 实时 + 过滤
journalctl -f -u nginx

二、在 syslog 服务中过滤(推荐用于长期规则)

rsyslog 为例(最常见)

1. 按程序名过滤

# 只记录 sshd
:programname, isequal, "sshd" /var/log/sshd.log

# 忽略 cron
:programname, isequal, "cron" stop

2. 按关键字过滤

# 包含 ERROR 的写入单独文件
:msg, contains, "ERROR" /var/log/error.log
& stop

3. 按级别过滤

# 只记录 warning 及以上
*.warning /var/log/warning.log

4. 按主机/IP(远程 syslog)

:fromhost-ip, isequal, "192.168.1.10" /var/log/host10.log

修改后重启:

systemctl restart rsyslog

三、syslog-ng 示例(另一种常见实现)

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

四、常见过滤维度总结

维度 示例
程序 sshd / cron / nginx
级别 info / warn / err
关键字 error / timeout
主机 远程 IP
时间 某时间段

五、典型需求示例

Q:只看 ssh 登录失败?

journalctl -u sshd | grep "Failed password"

Q:不想要 cron 日志?

:programname, isequal, "cron" stop

Q:错误日志单独存?

*.err /var/log/errors.log

如果你能说明:

  • 用的是 rsyslog / syslog-ng / journald
  • 查看过滤 还是 写入过滤
  • 具体场景(如 ssh、nginx、容器)

我可以给你更精确的配置示例。

0