如何使syslogd通过电子邮件向我发送某些日志消息?


13

每当syslogd记录err优先级或更高级别的日志时,我都希望能够收到电子邮件通知。假设这是一个BSD兼容的syslog守护程序。

  • 能做到吗?
  • 我应该在外壳程序脚本中使用命名管道吗?
  • 还有什么其他可能的解决方案?

Answers:


6

是使用命名管道的解决方案。它是为Debian设置的,但是您应该可以为BSD对其进行修改。


最终基于此解决方案,这样我就可以守护电子邮件了。感谢您的链接。
杰森

这似乎太多了。如果有稳定的开源应用程序为您执行脚本操作,为什么还要花时间编写脚本?(也是实时的)。*请参阅我的回复。
sucuri

2
根本不是黑客。这是这种事情经常完成的方式。
暂停,直到另行通知。

6

通过syslogd进行通知(8)

在我的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信号为止,这时邮件将在一封大电子邮件中发送整个日志消息集。

通过newsyslog通知(8)

在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通知部分中列出的用户。


3

您可能需要查看logcheck或logwatch。Logcheck会每小时向您发送一封电子邮件,其中包含与一组模式不匹配的日志行。我怀疑您可能会使其更频繁地执行此操作。我不知道有什么工具可以通过查看日志文件来做到这一点,但是我敢肯定有一些东西可以做到这一点。


是的,我宁愿不要在写入日志文件后对其进行监视和解析,而只是挂接到日志记录过程中,这样我就可以获得即时通知。
杰森

1

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

链接:http//www.ossec.net


这对于该应用程序可能是多余的。但是,该软件包的作用很大,如果有需要,则可能很合适。
暂停,直到另行通知。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.