使用命名管道使用Perl解析syslogs?

时间:2011-07-25 15:51:51

标签: perl named-pipes fifo syslog

我正在尝试编写一个脚本,它将通过网络获取日志并解析它们以获取相关信息并执行某些操作(如果存在严重问题则发送电子邮件,如果有警告,只需写入日志文件)。我正在使用带有syslogd的AIX机器来处理日志。现在,它像往常一样运行,将所有日志写入文件......很多文件。

我被建议使用Perl和Named Pipes来实现脚本。我刚刚花了一些时间阅读命名管道,我发现它们非常吸引人。但是,我很难理解信息的“流动”在这种情况下应该如何工作以及如何使perl处理它。

例如,我应该在脚本之外创建一个fifo并告诉syslogd默认写入它并让我的脚本在另一端解析吗? Perl可以这样做(对你来说系统管理员)这是一个聪明/可能的选择吗?

这是我第一次遇到Perl和命名管道。

1 个答案:

答案 0 :(得分:1)

你肯定可以创建一个named pipe in Perl,虽然在我看来,对于你想要做的事情,最好在perl之外创建命名管道,正如你的建议,然后让syslogd写它,并从perl读取管道。

我不太了解AIX,但这可以用于创建管道(source):

mkfifo -p /var/adm/syslog.pipe

要让syslogd写入,请在/var/adm/syslog.pipe

中定义
   *.info                        |/var/adm/syslog.pipe 

然后:

kill -HUP `cat /var/run/syslogd.pid`

您也可以将所有这些内容放入perl脚本中:如果管道不存在或syslogd没有使用它,脚本会为您安排所有必需的东西。

如果您需要更多帮助,可能会提供更多关于您要做什么的详细信息。