我怎样才能使syslogd电子邮件特定的日志消息给我?

我希望能够得到一个电子邮件通知每当syslogdlogging的东西,比如说优先级或更高。 假设这是一个兼容BSD的syslog守护进程。

  • 这能做到吗?
  • 我应该使用命名pipe道到shell脚本吗?
  • 还有哪些其他可能的解决scheme?

这是一个使用命名pipe道的解决scheme 。 它是为Debian设置的,但你应该可以修改它的BSD。

你可能想看看logcheck或logwatch。 Logcheck会每小时发送一封不符合一组模式的日志。 我怀疑你可能会更频繁地做它。 我不知道有什么工具可以通过查看日志文件来实现,但是我确定有这样的工具。

通过syslogd(8)

在我的OpenBSD服务器上,我login并发送来自我的Web应用程序的重要消息,这些消息使用设备local1 。 这是我的/etc/syslog.conf使其发生:

 local1.err /var/log/example.com local1.err |while read log; do echo "$log" | /usr/bin/mail -s SYSLOG [email protected]; done 

请注意,while循环从syslogd中无限地读取每行,然后通过echo将其传递给邮件。 这个很重要。 一旦回声输出其行,它终止pipe道,发送邮件EOF,所以它可以通过电子邮件发送日志消息。

换句话说,你不能通过syslogd直接传送邮件,如下所示:

 local1.err |/usr/bin/mail -s SYSLOG [email protected] 

因为syslogd将继续写入pipe道,直到它本身终止或发送一个HUP信号,此时邮件将把整组日志消息发送到一个大邮件中。

通知newsyslog(8)

在cron中调度newsyslog是以较慢的速度或批量获取消息的另一种方式。

例如,如果您想要日志消息的每日电子邮件摘要,请设置M标志并在/etc/newsyslog.conf中指定一个监视器电子邮件地址:

 # logfile_name owner:group mode count size when flags monitor /var/log/example.com root:wheel 640 7 * 24 M [email protected] 

然后在crontab中安排newsyslog:

 # minute hour mday month wday command 0 * * * * /usr/bin/newsyslog 1-59 * * * * /usr/bin/newsyslog -m 

newsyslog(8)-m选项指出:

监控模式; 只处理标记为“M”的条目。 对于正在监视的每个日志文件,自上次newsyslog运行-m标志以来的任何日志输出将被发送给监视器通知部分中列出的用户。

我会使用OSSEC。 它实时监控您的日志,并允许您在特定事件匹配时通过电子邮件(或其他方式)轻松提醒。 简单易用,可扩展且开源。

链接: http : //www.ossec.net