如何在 CentOS VPS 上发送电子邮件警报以进行系统监控
介绍
发送电子邮件警报的能力对于任何 VPS 的日常管理都是必不可少的。对于系统管理员(以及类似的用户)来说,能够利用这种 [新] 可能性不仅使事情变得更容易,而且还可以为您提供许多盟友来打击窃贼或使用您可以创建的触发器停机。
在这篇 DigitalOcean 文章中,我们将学习如何在 CentOS VPS 上简单地发送电子邮件警报,并讨论我们可以设置的各种触发器,以建立更好的整体安全性并保持系统的平稳运行。为此,我们将了解电子邮件的基础知识,了解必要的应用程序以及您可以设置的各种电子邮件警报触发器的示例,以及识别关键需求背后的逻辑以创建更多。
了解电子邮件
没有被我们使用的次数吓倒,发送和接收电子邮件的复杂性很少被考虑(也不是真正可见的),因为公司以简单的在线电子邮件服务的形式抽象了很多复杂性。打击垃圾邮件的承诺使情况变得更糟,任何想简单地发送电子邮件(电子邮件)的人都付出了巨大的努力。
电子邮件(或电子邮件)可以被视为一种方法或一种消息,以电子方式从一方分发到另一方。这不一定是在互联网上传播的在线过程,因为它可以通过(通常)内置工具在本地网络或同一台机器(即您的 VPS)上发生。然而,当需要通过 Internet 发送电子邮件时,许多组件都会发挥作用,首先是消息传输代理。
消息传输代理(或消息传输代理)
“消息传输代理”是一种应用程序,它实际上执行为用户发送绑定到同一系统或位于其他地方(即通过 Internet 或 LAN)的(电子邮件)消息的应用程序。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 服务器(即您的电子邮件提供商的或商业电子邮件服务)中继您的邮件。
为了设置 SMTP 服务器 [配置] 供 \mailx 使用,我们需要编辑 /etc/mail.rc
文件的内容,其中包含应用程序的 [certain] 设置。我们将使用 \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
# tell mailx that it needs to authorise
set smtp-auth=login
# set the user for SMTP
# set smtp-auth-user=user@domain.tld
set smtp-auth-user=user.name@example.com
# set the password for authorisation
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
地址发送副本到用户列表-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 社区图书馆的 CentOS 6.4 上安装 Linux 套接字监视器 (LSM)
使用 Bash 脚本的其他监控选项:
如果您有特定需求(即监控低内存、磁盘空间、登录等),您现在可以搜索各种 bash 脚本来执行任务——您可以找到数千个脚本可用的!
什么是 Bash 脚本?
Bash 脚本(或 shell 脚本、bash 程序)是用于执行快速任务的小型应用程序。它们易于创建和使用,这就是为什么它们深受青睐并成为出色的系统管理工具的原因。
一旦找到一个(用于您需要的任务),您将需要创建一个空文件以另存为可执行的 bash 脚本。
例子:
您希望在磁盘空间不足时收到电子邮件提醒。为此,执行快速 Google 搜索,例如“当您的磁盘空间不足时发送电子邮件警报”。在各种结果中,您将看到来自 Linux Jornal 的结果。单击 URL,您将看到 bash 脚本记录在页面上。
使用 nano
为 bash 脚本创建一个新的文本文件:
$ nano monitor_disk_space.sh
复制并粘贴 URL 中的内容:
#!/bin/bash
CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=90
if [ "$CURRENT" -gt "$THRESHOLD" ] ; then
mail -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 来安排它以特定的时间间隔运行。
请阅读以下有关如何使用 Cron 在 VPS 上自动执行任务的文章,以了解如何为某些任务安排 cron。
我们完成了第一个监控脚本的创建!
示例 2:
如果您想监控 [磁盘] 空间使用情况并在超过某个阈值时接收电子邮件,您可以参考 Linix.com 上的这个优秀示例。
让我们从创建一个空的 shell 脚本文件开始:
$ nano monitor_space_usage.sh
复制并粘贴此自解释脚本的内容:
#!/bin/bash
LIMIT='80'
#Here we declare variable LIMIT with max of used spave
DIR='/var'
#Here we declare variable DIR with name of directory
MAILTO='monitor@gmail.com'
#Here we declare variable MAILTO with email address
SUBJECT="$DIR disk usage"
#Here we declare variable SUBJECT with subject of email
MAILX='mailx'
#Here we declare variable MAILX with mailx command that will send email
which $MAILX > /dev/null 2>&1
#Here we check if mailx command exist
if ! [ $? -eq 0 ]
#We check exit status of previous command if exit status not 0 this mean that mailx is not installed on system
then
echo "Please install $MAILX"
#Here we warn user that mailx not installed
exit 1
#Here we will exit from script
fi
cd $DIR
#To check real used size, we need to navigate to folder
USED=`df . | awk '{print $5}' | sed -ne 2p | cut -d"%" -f1`
#This line will get used space of partition where we currently, this will use df command, and get used space in %, and after cut % from value.
if [ $USED -gt $LIMIT ]
#If used space is bigger than LIMIT
then
du -sh ${DIR}/* | $MAILX -s "$SUBJECT" "$MAILTO"
#This will print space usage by each directory inside directory $DIR, and after MAILX will send email with SUBJECT to MAILTO
fi
在确保您已经修改它以满足您的需要(并通过修改 MAILTO 变量将您的电子邮件地址设置为收件人)之后,您可以通过按 \CTRL+X 并用 \Y 确认来保存它。
再次将文件设置为可执行,您就可以使用第二个 Linux 系统监控工具了。
要授予文件执行权限,请运行以下命令:
$ chmod +x monitor_space_usage.sh
笔记:
更多关于监控的shell脚本,可以访问http://linoxide.com/category/linux-shell-script/。
有关 shell 脚本的更多信息,请访问 http://www.linoxide.com/guide/scripts-pdf.html。