在创建新日志文件时使用 Grep 命令

在创建新日志文件时使用 Grep 命令

服务器每小时都会创建一个格式为 syslog_all.yyyy-mm-dd-hh 的新日志文件,并存档前一小时的文件。

我需要的是一种方法来 grep 查找特定字符串的当前和尚未创建的日志文件,而不必仅仅因为文件名已更改而每小时重新启动命令。

目前我这样做:

tail -f syslog_all.2017-04-25-09 | egrep -i --line-buffered "string1" | egrep -i "(.*first.*|.*second.*|.*third.*)"

答案1

这是一个高级食谱。

  1. 配置 syslogd 或 rsyslogd(无论您的系统使用哪个)以将所需的设施/优先级消息输出到命名管道以及它现在所在的位置。摘自man rsyslog.conf
Named pipes

   This  version  of  rsyslogd(8) has support for logging output to
   named pipes (fifos). A fifo or named pipe can be used as a  des‐
   tination  for  log messages by prepending a pipe symbol ('|') to
   the name of the file. This is handy for debugging. Note that the
   fifo  must  be  created  with the mkfifo(1) command before rsys‐
   logd(8) is started.

我的中有一个例子/etc/rsyslog.d/50-default.conf

daemon.*;mail.*;\
    news.err;\
    *.=debug;*.=info;\
    *.=notice;*.=warn       |/tmp/rt_monitor
  1. 创建一个命名管道并使用 tail 和 grep 从管道中读取和搜索。

    mkfifo /tmp/rt_monitor; tail -f /tmp/rt_monitor | grep "alert string"

如果您没有让消费者运行,您应该检查命名管道已满时系统是否继续运行并防止这种情况发生,我给了您一个非常残酷的秘诀。

相关内容