当遇到严重问题时,如何根据命令输出让我的系统向我发送电子邮件?

当遇到严重问题时,如何根据命令输出让我的系统向我发送电子邮件?

我希望我的 Linux 系统有一个脚本/系统日志服务器,以便它首先 telnet 或远程登录到我的其他系统,然后执行一个命令(例如 netstat -an),如果系统发现任何带有“syn_sent”的内容,它应该立即生成电子邮件或短信。

我该如何设置?

答案1

UNIX 已经支持(相当标准的) syslog 日志记录,它可以记录内核和应用程序消息,甚至将消息转发到其他网络主机。

您可以使用 cronjob 定期执行类似以下操作:

netstat -nntulpa | grep SYN_SENT | logger

这会将 netstat 输出写入本地日志文件。

要在中央“日志主机”上接收日志,您只需要在 syslog 配置中添加一行。根据您选择的 syslog 守护程序,如下所示:

*.* @192.168.5.1

在接收端,您可以做各种各样的事情(甚至发送电子邮件),只要您选择功能齐全的 syslog 实现,例如 syslog-ng 或 rsyslog。

您的问题太宽泛了,您也可以使用 Icinga 之类的监控解决方案和执行相同命令(减去记录器部分)的自定义插件。Syslog 更易于设置,并且大多数应用程序都支持开箱即用。希望我的回答能帮助您解决有关 syslog 的问题。

答案2

如果我假设目的是当其他系统上发生某项活动时收到电子邮件或短信,您可以按照您的建议进行轮询,或者让其他系统在发生此事件时发送日志消息。轮询是最简单的选择,但速度很慢,并且仅适用于捕获长事件(除非在另一侧锁定)。通常 SYN_SENT 发生很多次,但这是一个快速的过程,如果不进行额外过滤,则对此进行轮询会产生某种随机行为。

将这个问题分解成多个部分会有所帮助,因为一个问题包含很多项目。

要进行轮询,可以通过 cronjob 运行脚本来完成,该脚本会建立连接并执行命令以查看事件是否发生。现在,此脚本可以发送电子邮件。如有必要,该脚本可以生成自己的日志或将日志消息发送到 syslog。

可能的问题或谷歌搜索:

how to execute a script via a cronjob
how to setup the remote connection from script (security?)
how to detect your event
how to send out an email from script
how to do additional logging.

为了直接响应快速事件,最好配置其他系统以发送日志消息并记录活动。

某些防火墙软件能够记录 syn_sent,甚至可能将日志发送到 syslog 服务器,或者您需要一个单独的程序来完成此操作。在服务器端,您会在 syslog-daemon 中收到一条消息,该消息可配置为执行脚本,该脚本可在必要时发送电子邮件。

其他机器可能出现的问题(仅限 Ubuntu 机器上的 askubuntu):

which firewall software
how to configure the firewall to log the event
which program to send to remote syslog

服务器上可能存在的问题:

how to configure syslog-daemon to run a script on incoming events
how to send out an email from script

相关内容