jas*_*son 12 linux logging syslog
我希望能够在 syslogd 记录某些内容时收到电子邮件通知,例如err优先级或更高。假设这是一个与 BSD 兼容的系统日志守护进程。
小智 6
在我的 OpenBSD 服务器上,我从使用工具local1 的Web 应用程序中记录和发送重要消息。这是我的/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
Run Code Online (Sandbox Code Playgroud)
请注意,while 循环无限地从 syslogd 读取每一行,然后通过 echo 将其通过管道发送到邮件。这个很重要。一旦 echo 输出它的行,它就会终止管道,发送邮件一个 EOF,以便它可以通过电子邮件发送日志消息。
换句话说,您不能像这样通过 syslogd 直接通过管道发送邮件:
local1.err |/usr/bin/mail -s SYSLOG me@example.com
Run Code Online (Sandbox Code Playgroud)
因为 syslogd 将继续写入管道,直到它本身终止或发送 HUP 信号,此时邮件将在一封大电子邮件中发送整个日志消息集。
在 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 me@example.com
Run Code Online (Sandbox Code Playgroud)
然后在 crontab 中调度 newsyslog:
# minute hour mday month wday command
0 * * * * /usr/bin/newsyslog
1-59 * * * * /usr/bin/newsyslog -m
Run Code Online (Sandbox Code Playgroud)
newsyslog(8)的-m选项指出:
监控模式;仅处理标志中标有“M”的条目。对于每个被监视的日志文件,自上次使用 -m 标志运行 newsyslog 以来的任何日志输出都将通过邮件发送给监视器通知部分中列出的用户。
| 归档时间: |
|
| 查看次数: |
18120 次 |
| 最近记录: |