【翻译】Linux监视和警报简介

2019/11/04 Linux 翻译

【翻译】Linux监视和警报简介

您是否曾经想设置一个过程监视器来在离线时向您发出警报,而无需花费数千美元的预算呢?每个系统管理员都有,这是执行的方法。

有些系统管理员喜欢自己写监控告警的东西,然而我们当中有些人必须去做这些事,因为没有充足的预算投入到监控告警上。企业级别的监控告警组件适用于有较多预算的公司,或者需要 100% 在线(运行)的重要任务、系统或服务。

有一些开源的监控告警组件,但是它们只运行在指定的操作系统上以及需要大量的时间去配置。大多数还要求将监控程序安装在受监控的端点上,这需要批准和部署的时间。更快、更轻松的方法就是自己写监控告警脚本,然后通过cron计划运行。本地化(每台服务器)监控警报的好处是,你可以单独设置告警阈值,而不必使用无法满足需求的全剧配置。

本文将引导你完成创建脚本的过程,该脚本每五分钟检查一次 Apache Web 服务器进程,如果它关闭了,则尝试重新启动它,如果它关闭了 30 秒以上且无法重新启动,则通过电子邮件发出告警。

大多数进程在运行时在 /run 目录下有一个进程 ID 文件(*.pid),其中很多进程都有自己的单独目录,其中包含各自的 PID 文件。在此示例中,Apache Web 服务器(httpd)具有一个 PID 文件:/run/httpd/httpd.pid

我将此脚本命名为 apache.sh,并将其放置在根目录的主目录中。请确保该文件的权限为 rwxr-x---,以便其他用户无法执行或修改该文件。

$sudo chmod 750 apache.sh

注意:如果您没有安装 Apache,那么没关系,因为您可以将脚本中指向的 httpd.pid 文件替换成适用于系统的任何其他 PID 文件。

创建此类脚本的方法有很多,但这就是我的方法,并且可以正常工作。我用变量 FILE 标示了 PID 文件。我决定不是让 Apache Web 服务器宕机发送警报,而是让脚本尝试重新启动服务,然后再次检查。我又重复了两次,等待两次检查之间的间隔为 10 秒。如果 Apache 服务仍然关闭并且 30 秒后无法重新启动,则脚本向系统管理员团队发送电子邮件:

#!/bin/bash

FILE=/run/httpd/httpd.pid

if ! [ -f "$FILE" ]; then
systemctl start httpd.service
fi
sleep 10s
if ! [ -f "$FILE" ]; then
systemctl start httpd.service
fi
sleep 10s
if ! [ -f "$FILE" ]; then
systemctl start httpd.service
fi
sleep 10s
if ! [ -f "$FILE" ]; then
mail -s 'Apache is down' sysadmins@mydomain.com <<< 'Apache is down on SERVER1 and cannot be restarted'
fi

你可以轻松的将 SMS 消息发送到团队通话手机。该脚本检查是否存在 httpd.pid 文件,如果未找到,则采取措施。 如果文件存在,则不执行任何操作。 没有人愿意每隔五分钟收到一封电子邮件或注意到服务已启动。

测试完脚本并满意于它可以按需运行后,请将此脚本放入根用户的 crontab 中:

$ sudo crontab -e

我在下面输入的内容每五分钟运行一次脚本:

*/5 * * * * /root/apache.sh

此脚本是一个示例。是的,它是原始且简单的,但是它又是有效且免费的。它还不需要任何预算讨论,也不需要维护窗口来代理安装。 您还将发现此脚本不会显着影响系统性能。 这些都是好东西。 而且,如果您是Ansible管理员,则可以将此脚本交付给整个系统,而不必单独触摸每个脚本。

Search

    Table of Contents