如何在 CentOS VPS 上设置系统监控的邮件警报
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
简介
发送电子邮件提醒的能力对于日常管理任何 VPS 都是至关重要的。对于系统管理员(以及用户),能够利用这种[新的]可能性不仅使事情变得更容易,而且还为您在与窃贼或停机时间作斗争时提供了许多盟友,您可以创建触发器来实现这一点。
在这篇 DigitalOcean 文章中,我们将学习如何在 CentOS VPS 上简单发送电子邮件提醒,并讨论我们可以设置的各种触发器,以建立更好的整体安全性并保持系统的顺畅运行。我们将通过了解电子邮件的基础知识,介绍必要的应用程序以及各种可以设置的电子邮件提醒触发器的示例,并讨论识别关键需求以创建更多触发器的逻辑。
理解电子邮件
尽管我们使用的次数不计其数,但发送和接收电子邮件的复杂性很少被考虑(也很少可见),因为许多复杂性被公司以简单的在线电子邮件服务的形式抽象出来。为了打击垃圾邮件,这种承诺使得发送**电子邮件消息**(电子邮件)变得更加复杂,对于任何希望简单发送电子邮件消息(电子邮件)的人来说,这需要付出很大的努力。
电子邮件(或电子邮件)可以被认为是一种从一方电子地分发到另一方的消息的方法或类型。这不一定是一个在线过程,可以在本地网络或同一台机器(即您的 VPS)上通过(通常)内置工具进行。然而,当有必要通过互联网发送电子邮件时,许多组件开始发挥作用,从消息传输代理开始。
消息传输代理(或消息传输代理)
"消息传输代理"是一个实际执行传递(电子邮件)消息的应用程序,这些消息可能是发送给同一系统上的用户,也可能是发送给其他地方的用户(即通过互联网或局域网)。MTA 应用程序通常默认随各种 Linux 发行版一起提供,并且它们被电子邮件客户端用于使用SMTP 协议在主机之间发送消息。
电子邮件用户代理(电子邮件客户端)
众多可用的"电子邮件用户代理"是由用户(即您)或其他应用程序用于发送和接收电子邮件的应用程序。它们依赖于消息传输代理(MTA)才能工作。Microsoft Outlook、Mozilla Thunderbird 或甚至在线工作的 Gmail 都是电子邮件用户代理的合适示例。
简单邮件传输协议(SMTP)
为了在主机之间传输消息,需要建立一个共同的语言(即协议),以便它们能够相互通信。SMTP 是几十年前创建并标准化的用于发送消息的方式。MTA 使用 SMTP 协议进行电子邮件的传递。
使用 Heirloom mailx 简单发送电子邮件
今天,上面解释的架构仅涵盖了交换电子邮件的复杂性的一部分。为了使一个“合适”的系统工作,还有更多需要做的事情,即使这样,也不能保证电子邮件的可投递性–到收件箱还是垃圾邮件文件夹。
然而,在我们的文章中,我们将专注于极端简单性。我们的目标是让您在短短几分钟内开始运行,这样您就可以专注于您的实际工作,管理您的系统并在收件箱中接收提醒。
我们将使用Heirloom mailx,这是一个源自Berkeley Mail的出色邮件用户代理。它提供对多种协议的额外支持,包括(但不限于)IMAP、POP3 和当然 SMTP。这将是我们用来接收警报和系统警告的工具。
注意:浏览在线文档或论坛时,您可能会看到一个名为nail的类似应用程序。这两个项目(在某种程度上)是相同的,nail 被合并到 mailx 中。因此,如果您看到使用“nail”进行电子邮件命令,只需将其替换为“mail”或“mailx”即可执行。或者您可以创建一个指向 mailx 应用程序的符号链接。您可以通过访问 mailx history 了解更多关于 mail、Mail、mailx 和 nail 的历史。有关符号链接创建,请继续阅读。
安装 mailx
让我们从更新系统开始。
**请注意:**如果您在稳定的生产环境中,您可能希望跳过此步骤,因为它可能会干扰您正在运行的应用程序。
为了更新您的系统,请运行以下命令:
$ yum -y update
开始使用 mailx 非常简单。我们将使用 yum 软件包管理器来下载并安装它。
在您的 CentOS/RHEL 机器上,执行以下命令:
$ yum install -y mailx
就是这样!现在我们可以使用“mail”(或 mailx)命令开始发送电子邮件。
什么是符号链接以及如何创建符号链接
符号链接(symlink)是由一个指向另一个已存在文件的引用所组成的文件。
一些监控脚本和应用程序可能使用“email”而不是“mail”或“mailx”来发送电子邮件。如果你发现自己处于这种情况,你可以创建一个符号链接,指向(引用)mailx。
下面,我们将创建一个将“mail”指向执行“mailx”的符号链接。
为了创建一个符号链接,请运行以下命令(将/bin/email
替换为所需的链接名称):
$ ln -s /bin/mailx /bin/email
如何设置外部 SMTP 服务器以中继电子邮件
如上所述,使用这种简洁的解决方案可能会导致一些电子邮件被归为垃圾邮件。由于你的目标是为警报设置一个简单的应用程序,这应该不是一个问题。然而,如果你希望提高投递率(即发送到收件箱),你可以选择通过外部 SMTP 服务器(例如你的电子邮件提供商的或商业电子邮件服务)中继你的消息。
为了设置“mailx”使用的 SMTP 服务器[配置],我们需要编辑/etc/mail.rc
文件的内容,该文件包含了应用程序的[特定]设置。我们将使用“nano”文本编辑器打开这个文件,并在顶部追加我们的设置。
使用“nano”打开“mail.rc”:
$ nano /etc/mail.rc
下面是一个示例 SMTP 设置,你需要修改它以匹配你的提供商,然后追加到“mail.rc”的顶部。以**#**号开头的行是注释行,意味着它们不生效,只是结构。接下来的一行是你需要相应替换以匹配你的 SMTP 服务器详细信息的行。
示例:
# set smtp=smtp://smtp.server.tld:port_number
set smtp=smtp://smtp.example.com:543
# 告诉 mailx 它需要授权
set smtp-auth=login
# 设置 SMTP 的用户
# set smtp-auth-user=user@domain.tld
set smtp-auth-user=user.name@example.com
# 设置授权密码
set smtp-auth-password=enter-password-here-1234
按下“CTRL+X”并确认“Y”以保存并退出。
从现在开始,所有发送的邮件将使用你刚刚设置的配置进行中继。
提示: 你可以考虑使用 Gmail 的服务器或使用简单易用的专业邮件服务的 SMTP 服务器,比如 MANDRILL,它允许你每个月免费发送数千封邮件。
使用 mail
(或 mailx
)发送电子邮件
虽然你可以直接与 MTA sendmail 进行交互,但安装“mailx”提供了很多简单性和可能在必要时[未来]配置的选项。
以下是Heirloom mailx的一些可用选项:
-a
file 允许你将给定的文件附加到电子邮件中-b
address 向逗号分隔的电子邮件地址列表发送密件抄送-c
address 向用户列表发送抄送-q
file 从给定文件设置消息内容-r
from address 设置要发送的电子邮件的发件人地址-s
subject 设置电子邮件主题
欲了解完整的选项列表,请点击此处查看相关文档。
示例用法:
发送简单消息:
echo "Your message" | mail -s "Message Subject" email@address
发送带附件的消息:
echo "Message" | mail -s "Subject" -a /loc/to/attachment.txt email@address
从文件中读取消息正文:
echo | mail -s "Subject" -r from@address -q /loc/to/body.txt email@address
注意: 除非你设置了外部 SMTP 服务器,否则你的电子邮件,如上所述,可能会被归为垃圾邮件,你需要手动将其重定向到收件箱以继续在那里接收它们。
欲了解完整的 Heirloom mailx 文档,请访问其官方网站:http://heirloom.sourceforge.net/mailx.html。
设置系统监控、警告和安全警报的警报
现在我们已经准备好了一切,我们可以看一下我们的服务器可以发出和发送的几种不同的警报的示例。
监控端口和套接字
要了解更多关于端口和套接字监控的信息,请参考以下文章,你可以在其中了解有关该主题的信息,并快速设置 Linux Socket Monitor 以使用“mailx”在新端口/套接字打开时通知你。
如何在 DigitalOcean Community Library 上的 CentOS 6.4 上安装 Linux Socket Monitor(LSM)
使用 Bash 脚本进行其他监控选项:
如果您有特定需求(例如监控低内存、磁盘空间、登录等),您现在可以搜索各种 bash 脚本来执行这些任务–而且您可以找到成千上万的可用脚本!
什么是 Bash 脚本?
Bash 脚本(或 shell 脚本、bash 程序)是用于执行快速任务的小型应用程序。它们易于创建和使用,这就是为什么它们备受青睐并成为系统管理的绝佳工具的原因。
一旦您找到了需要的脚本(用于您的任务),您需要创建一个空文件并保存为可执行的 bash 脚本。
示例:
假设您希望在磁盘空间不足时收到电子邮件提醒。为此,请快速搜索一下,比如搜索“磁盘空间不足时发送电子邮件提醒”。在各种结果中,您会看到来自 Linux Journal 的一个结果。单击该 URL,您将在页面上看到记录的 bash 脚本。
使用 nano
创建一个新的文本文件用于 bash 脚本:
$ nano monitor_disk_space.sh
从 URL 复制并粘贴内容:
#!/bin/bash
CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=90if [ "$CURRENT" -gt "$THRESHOLD" ] ; thenmail -s 'Disk Space Alert' mailid@domainname.com << EOF
Your root partition remaining free space is critically low. Used: $CURRENT%
EOF
fi
注意: 请不要忘记将 mailid@domainname.com
替换为您的电子邮件地址。另外,请记住您也可以修改主题行。
按下 “CTRL+X” 并确认 “Y” 以保存并退出文件。
您现在已经创建了一个名为 monitor_disk_space.sh
的小型 bash 程序,您可以根据需要命名它。
我们需要继续告诉我们的操作系统,这个文件是一个可执行文件。
使用 “chmod” 给文件赋予 可执行 权限:
$ chmod +x monitor_disk_space.sh
您可以尝试运行该文件:./monitor_disk_space.sh
鉴于我们希望这个小程序像系统监视器一样运行,我们需要使用实用工具 cron 来安排它在特定时间间隔内运行。
请阅读以下文章《如何在 VPS 上使用 Cron 自动化任务》以了解如何为某些任务安排 cron。
至此,我们已经完成了创建我们的第一个监控脚本!
示例 2:
如果您希望监控[磁盘]空间使用情况并在超过一定阈值时收到电子邮件,您可以参考来自 Linix.com 的这个优秀示例。
让我们开始创建一个空的 shell 脚本文件:
$ nano monitor_space_usage.sh
复制并粘贴这个自解释脚本的内容:
#!/bin/bashLIMIT='80'
#在这里,我们使用变量 LIMIT 声明了最大使用空间DIR='/var'
#在这里,我们使用变量 DIR 声明了目录的名称MAILTO='monitor@gmail.com'
#在这里,我们使用变量 MAILTO 声明了电子邮件地址SUBJECT="$DIR 磁盘使用情况"
#在这里,我们使用变量 SUBJECT 声明了电子邮件的主题MAILX='mailx'
#在这里,我们使用变量 MAILX 声明了将发送电子邮件的 mailx 命令which $MAILX > /dev/null 2>&1
#在这里,我们检查 mailx 命令是否存在if ! [ $? -eq 0 ]
#我们检查上一个命令的退出状态,如果退出状态不为 0,这意味着系统上没有安装 mailx
thenecho "请安装 $MAILX"
#在这里,我们警告用户未安装 mailxexit 1
#在这里,我们将退出脚本
ficd $DIR
#为了检查实际使用的大小,我们需要导航到文件夹USED=`df . | awk '{print $5}' | sed -ne 2p | cut -d"%" -f1`
#这一行将获取我们当前所在分区的使用空间,这将使用 df 命令,并获取使用空间的百分比,并在剪切值后去掉 %if [ $USED -gt $LIMIT ]
#如果使用空间大于 LIMITthendu -sh ${DIR}/* | $MAILX -s "$SUBJECT" "$MAILTO"
#这将打印目录 $DIR 内每个目录的空间使用情况,并在 MAILX 发送带有 SUBJECT 的电子邮件到 MAILTO
fi
确保您已经修改它以满足您的需求(并通过修改 MAILTO 变量将您的电子邮件地址设置为接收者),然后按下 “CTRL+X” 并确认 “Y” 保存它。
再次设置文件为 可执行,您的第二个 Linux 系统监视工具已经准备就绪。
为文件赋予执行权限,运行以下命令:
$ chmod +x monitor_space_usage.sh
注意:
要了解更多关于监控的 shell 脚本,请访问 http://bash.cyberciti.biz/shell/monitoring/ 和 http://linoxide.com/category/linux-shell-script/。
要了解更多关于 shell 脚本的一般信息,请访问 http://www.linoxide.com/guide/scripts-pdf.html。