监控系统日志并打印没有“模式”的行

监控系统日志并打印没有“模式”的行

我想/var/log/syslog持续监控我的数据。然而,在监控时,我想避免某些模式。我只对最后 15 行(例如)感兴趣。

对于常规监控我使用以下命令:

watch -n 1 tail -n 15 /var/log/syslog

然而,我真正想要的是:

watch -n 1 tail -n 15 /var/log/syslog | grep -v -E 'pattern1|pattern2'

更具体地说明我的要求:

我想持续监控 中的条目syslog,避免某些模式。屏幕应该每隔固定时间(例如 1 秒或 2 秒)刷新一次。

以下是更多(失败的)尝试:

watch cat /var/log/syslog | grep -v -E 'pattern1|pattern2'

一次(部分)成功的尝试:

while true;
do 
  clear;
  cat /var/log/syslog | grep -v -E 'pattern1|pattern2' | tail -15;
  sleep 1;
  echo '\"CTRL-C\" to close';
done

但是,那平滑度watch这里丢失了。

概括

那么问题是,有没有办法将 和watch结合tail起来grep

bash 4.4.7我在 17.04 上使用。

答案1

你的问题是watch -n 1 tail -n 15 /var/log/syslog | grep -v -E 'pattern1|pattern2',我思考,它tail -n 15 /var/log/syslog在 内部运行watch,然后将结果通过管道传输到grep。这几乎肯定会导致中间输出被缓冲,以至于您看不到所期望的内容(至少在您期望的时候看不到)。

可能有一种方法可以通过巧妙使用stdbuf和/或--line-bufferedgrep 选项来实现您想要的效果,但是更简单的方法是在里面运行整个管道watch

watch -n 1 'tail -n 15 /var/log/syslog | grep -v -E "pattern1|pattern2"'

相关内容