在 Linux 中,syslog 过滤通常可以从 日志产生端(rsyslog/syslog-ng 配置) 或 日志查看端(命令行过滤) 两个层面来做。下面按常见场景说明。
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"
# 今天
grep "$(date +%b\ %e)" /var/log/syslog
# journald 系统(systemd)
journalctl --since "2026-01-21 10:00" --until "2026-01-21 12:00"
journalctl 过滤(systemd 系统)# 按服务
journalctl -u sshd
# 按优先级(err 及以上)
journalctl -p err
# 按进程
journalctl _PID=1234
# 实时 + 过滤
journalctl -f -u nginx
# 只记录 sshd
:programname, isequal, "sshd" /var/log/sshd.log
# 忽略 cron
:programname, isequal, "cron" stop
# 包含 ERROR 的写入单独文件
:msg, contains, "ERROR" /var/log/error.log
& stop
# 只记录 warning 及以上
*.warning /var/log/warning.log
:fromhost-ip, isequal, "192.168.1.10" /var/log/host10.log
修改后重启:
systemctl restart rsyslog
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
如果你能说明:
我可以给你更精确的配置示例。