Answers:
在我的OpenBSD服务器上,我记录并通过电子邮件发送来自Web应用程序的重要消息,这些消息使用工具local1。这是我的/etc/syslog.conf来实现的:
local1.err /var/log/example.com
local1.err |while read log; do echo "$log" | /usr/bin/mail -s SYSLOG me@example.com; done
注意,while循环从syslogd无限读取每一行,然后通过echo将其通过管道传递到邮件。这个很重要。一旦echo输出其行,它将终止管道,向EOF发送邮件,以便可以通过电子邮件发送日志消息。
换句话说,您不能像这样通过syslogd直接通过管道传递到邮件:
local1.err |/usr/bin/mail -s SYSLOG me@example.com
因为syslogd将继续写入管道,直到管道本身终止或发送HUP信号为止,这时邮件将在一封大电子邮件中发送整个日志消息集。
在cron中计划newsyslog是另一种以较低速度或批量获取消息的方法。
例如,如果您想每天获取日志消息的电子邮件摘要,请在/etc/newsyslog.conf中设置M标志并指定监视器电子邮件地址:
# logfile_name owner:group mode count size when flags monitor
/var/log/example.com root:wheel 640 7 * 24 M me@example.com
然后在crontab中安排newsyslog:
# minute hour mday month wday command
0 * * * * /usr/bin/newsyslog
1-59 * * * * /usr/bin/newsyslog -m
该-mnewsyslog(8)选项指出:
监控模式 仅处理标记中带有“ M”标记的条目。对于每个要监视的日志文件,自上次使用-m标志运行newsyslog以来的所有日志输出都会邮寄给Monitor通知部分中列出的用户。
我会使用OSSEC。它可以实时监视您的日志,并允许您在匹配特定事件时通过电子邮件(或其他方式)轻松发出警报。简单易用,可扩展且开源。