温馨提示×

怎样过滤linux syslog

小樊
46
2026-10-19 09:16:35
栏目: 智能运维

在 Linux 中,syslog 通常指系统日志服务(如 rsyslog、syslog-ng 或 systemd-journald)。“过滤 syslog”可以从查看/检索日志和配置日志过滤规则两个层面来理解。下面分别说明。


一、查看/检索已有 syslog(过滤内容)

1. 使用 journalctl(systemd 系统,最常见)

# 按服务过滤
journalctl -u nginx.service

# 按时间
journalctl --since "2024-01-01 00:00:00" --until "2024-01-02"

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

# 按关键字
journalctl | grep "error"

# 实时跟踪
journalctl -f -u sshd

2. 使用传统 syslog 文件

# 常见日志位置
/var/log/messages
/var/log/syslog
/var/log/secure

# 过滤示例
grep "sshd" /var/log/auth.log
grep -i "error" /var/log/syslog
tail -f /var/log/messages | grep "kernel"

3. 使用 awk / sed 高级过滤

# 只看某 IP 的日志
awk '/192.168.1.10/' /var/log/syslog

# 提取时间和主机
awk '{print $1, $2, $3, $5}' /var/log/syslog

二、在 syslog 服务中配置过滤规则(写入前过滤)

1. rsyslog 过滤示例

配置文件:/etc/rsyslog.conf 或 /etc/rsyslog.d/*.conf

# 丢弃来自某程序的日志
:programname, equals, "cron" stop

# 只记录 error 及以上
*.err    /var/log/errors.log

# 按主机/IP 过滤(远程日志)
if ($fromhost-ip == '192.168.1.100') then {
    action(type="omfile" file="/var/log/host100.log")
    stop
}

重新加载:

systemctl restart rsyslog

2. 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); };

三、按“场景”推荐做法

  • 只想查日志 → journalctl / grep
  • 不想存某些日志 → rsyslog stop 规则
  • 远程日志分类 → 按 IP / host 过滤
  • 安全审计 → 单独写 auth.log

如果你能说明:

  • 用的是 CentOS / Ubuntu / 其他
  • 是想 查日志 还是 不记录某些日志
  • 是否涉及 远程 syslog

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

0 踩