作者选择了 Apache Software Foundation作为 Write for Donations计划的一部分接受捐款。
介绍
当你有关键的网站时,你会想知道他们什么时候遇到任何问题,所以你可以修复它们之前有影响你的用户。
Discord是一个类似于Slack的托管聊天系统. 使用Discord,您可以设置一个免费的消息系统,允许您通过短信,图像,音频和视频进行通信。
在本教程中,您将配置自己的 Discord 服务器,创建一个 Discord Webhook,写一个 Bash 脚本,检查网站列表的状态,并测试从您的服务器到您的 Discord 频道的通知。
前提条件
在您开始本指南之前,您将需要以下内容:
- 一个 Ubuntu 18.04 服务器将运行你的监控脚本,并与 Discord 交谈(monitor-server)。你可以通过遵循此 初始服务器设置指南来设置这个服务器。
- 如果你还没有一个想要监控的网站,请设置 apache-server 使用 如何在 Ubuntu 18.04 上安装Apache Web Server,并确保完成设置虚拟主机的第 5 步。
步骤 1 - 设置您的 Discord Webhook
打开您的 Discord 帐户后,您可以创建自己的私人 Discord 服务器。
首先,在您的浏览器中 登录您的 Discord 帐户或 启动您的 Discord 应用程序并点击 创建服务器按钮。
然后选择您的服务器的名称,然后单击创建服务器
按钮。
接下来,您将配置您的 Discord Webhook. 这些 Webhooks 是您可以使用的独特 URL 来链接服务。 Discord 的 Webhooks 允许您自动发送消息并将数据更新发送到您的 Discord 文本渠道。
在本教程中,当您的服务器上的特定服务失效时,您将发送通知到您的webhook,Discord将确保您在您的频道上收到这些消息。
要创建一个webhook,你必须先点击你的频道,然后点击编辑频道
按钮,就在你的频道名称旁边。
然后单击Webhooks
选项卡,然后单击Create Webhook
按钮。
在此之后,为您的 webhook 选择一个名称,在本教程中我们将使用警报
,因为这是我们的 Bash 脚本会做的事情 - 警告我们如果我们的网站出现故障。
复制您的 webhook URL 并将其保存到以后。最后,点击保存
按钮。
你现在有你的 Discord 帐户,服务器和 webhook. 你现在可以继续创建一个测试文件,你的脚本来监控。
步骤 2 — 创建测试文件(可选)
如果您还没有自己的网站来测试,请完成此步骤以添加测试文件,以检查您的监控脚本将如何工作。
首先,使用以下命令创建测试文件:
1[environment second]
2nano /var/www/your_domain/test
将一些内容添加到您的文件中,以便您可以检查它是否工作:
1[label test]
2test
保存和退出文件。
现在,在您的浏览器中导航到http://your_domain/test
,以确保您可以收到test
文件中的文本。
在下一步中,您将开始构建您的监控脚本。
步骤3 - 创建您的监控脚本
现在你已经配置了你的webhook,你会继续创建你的Bash脚本,它会检查你的网站的响应代码. 如果任何一个网站返回的状态不同于200OK
,你的脚本将发送一个请求到Discord webhook,所以你将收到通知在你的Discord频道。
<$>[注] 注: 您可以使用任何其他编程语言来构建这样的脚本。
首先将 SSH 输入到您正在使用的监控脚本的 monitor-server。
在本教程中,我们将把文件称为check_status.sh
。
使用您最喜欢的文本编辑器打开文件:
1[environment third]
2nano ~/check_status.sh
要让程序加载器将此可执行文件识别为Bash脚本,请将下列行添加到文件顶部:
1[label ~/check_status.sh]
2#!/bin/bash
所有从#
开始的行都是评论,评论是可选的,但在脚本中有评论会让其他人更容易理解脚本的功能:
1[label ~/check_status.sh]
2#!/bin/bash
3
4##
5# Website status check script
6# Author: Your Name
7# Date: 01/01/2020
8##
9. . .
接下来,将您的 Discord Webhook 指定为变量. 添加您之前复制的 URL 到您的 Webhook:
1[label ~/check_status.sh]
2. . .
3##
4# Discord webhook
5# Change the 'your_discord_webhook_name' with your actual Discord Webhook
6##
7url="your_discord_webhook_name"
8. . .
因为你可能会使用这个脚本来检查多个网站的状态,创建一个名为websites_list
的变量,并存储您想要监控的网站的域名或IP地址。
1[label ~/check_status.sh]
2. . .
3##
4# List of websites to check
5##
6websites_list="your_domain/test"
7. . .
如果您正在监控多个网站,您可以将多个域名或 IP 地址添加到websites_list
变量中,并使用空间作为分离器:
1[label ~/check_status.sh]
2. . .
3websites_list="your_domain1/test your_domain2 your_domain3"
4. . .
现在你会想循环通过网站列表并检查他们的状态. 为此,添加以下为
循环到你的文件:
1[label ~/check_status.sh]
2. . .
3for website in ${websites_list} ; do
4 status_code=$(curl --write-out %{http_code} --silent --output /dev/null -L ${website})
5 echo $status_code
6done
7. . .
此for
循环将通过websites_list
变量中的每个项目,并使用curl
命令检查网站的状态。
echo $status_code
声明会打印curl
命令的响应状态,如果网站按预期运行,则curl
命令会返回响应代码200 OK
,这意味着网站正在运行,否则您将收到另一个响应代码。
在为
循环中,添加一个如果
声明来检查响应代码是否为200
如果响应代码是200
,则这意味着网站正在运行,您不需要发出 Discord 通知。
1[label ~/check_status.sh]
2. . .
3 if [[ "$status_code" -ne 200 ]] ; then
4 # POST request to Discord Webhook with the domain name and the HTTP status code
5 else
6 echo "${website} is running!"
7 fi
8. . .
如果网站出现任何问题,您将收到不同的响应代码,在这种情况下,您将希望通过您的 Discord Webhook 收到通知。
要发送通知,您可以使用curl
命令向 Discord webhook URL 提交POST
请求。
在您的如果
声明中添加以下弯曲
请求:
1[label ~/check_status.sh]
2. . .
3 if [[ "$status_code" -ne 200 ]] ; then
4 # POST request to Discord Webhook with the domain name and the HTTP status code
5 curl -H "Content-Type: application/json" -X POST -d '{"content":"'"${domain} returned: ${status_code}"'"}' $url
6 else
7 echo "${website} is running!"
8 fi
9. . .
现在让我们来看看不同的论点:
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
这将是你脚本的最终版本:
1[label ~/check_status.sh]
2#!/bin/bash
3##
4# Website status check script
5# Author: Your Name
6# Date: 01/01/2020
7##
8
9##
10# Discord webhook
11# Change the 'your_discord_webhook_name' with your actual Discord Webhook
12##
13url="your_discord_webhook_name"
14
15##
16# List of websites to check
17# To add more websites just use space as a separator, for example:
18# websites_list="your_domain1 your_domain2 your_domain3"
19##
20websites_list="your_domain/test your_domain2"
21
22for website in ${websites_list} ; do
23 status_code=$(curl --write-out %{http_code} --silent --output /dev/null -L ${website})
24
25 if [[ "$status_code" -ne 200 ]] ; then
26 # POST request to Discord Webhook with the domain name and the HTTP status code
27 curl -H "Content-Type: application/json" -X POST -d '{"content":"'"${domain} : ${status_code}"'"}' $url
28 else
29 echo "${website} is running!"
30 fi
31done
脚本将循环通过这个列表,并检查每个网站的状态。
使用以下命令运行脚本,以确保它按预期工作:
1[environment third]
2bash ~/check_status.sh
运行脚本后,您将在终端中收到以下输出,确认您的网站正在运行:
1[secondary_label Output]
2your_domain1 is running!
3your_domain2 is running!
接下来,您将测试您的 Discord 通知。
步骤 4 – 测试您的 Discord 通知
现在是时候通过测试文件来检查您的 webhooks 是否按预期工作了。
在 apache-server上,运行以下命令到 关闭访问权限到此文件:
1[environment second]
2sudo chmod 000 /var/www/your_domain/test
接下来,返回您的 monitor-server并运行脚本:
1[environment third]
2bash check_status.sh
移动到您的 Discord 应用程序并检查您的警报,您将收到一个 :403错误,这表明您没有正确设置权限,并且被禁止查看文件。
现在,要测试另一个错误,请从您的 apache 服务器中完全删除此文件:
1[environment second]
2sudo rm /var/www/your_domain/test
接下来,返回您的 monitor-server并运行脚本:
1[environment third]
2bash check_status.sh
移动到您的 Discord 应用程序并检查您的警报,您将收到一个 :404错误,这表明该文件不可用。
如果你在手机上安装了Discord,你也会收到警报。
现在你有一个脚本,提醒你,当你的网站遇到任何问题. 接下来,让我们配置脚本自动运行每五分钟。
步骤五:自动化过程
自动化检查的一种方法是创建一个 cron job,它将每5分钟运行。
首先,回到您的 monitor-server. 然后,在您可以自动运行脚本之前,您需要排序您的 文件权限并确保脚本是可执行的,否则它不会运行。
1[environment third]
2chmod u+x ~/check_status.sh
运行以下操作来编辑您的 crontab:
1[environment third]
2crontab -e
然后将以下内容添加到文件中:
1*/5 * * * * /home/your_user/check_status.sh
然后保存crontab
,然后你的脚本将每5分钟执行。
结论
在本文中,您配置了自己的 Discord Webhook,并创建了一个脚本,以便在您的网站上发生特定错误的情况下通知您。
有关设置监控基础设施的更多信息,请参阅我们的监控主题页面(https://andsky.com/tags/monitoring)。
如果您有兴趣了解更多关于壳脚本的信息,请参阅我们的 介绍壳脚本教程系列。
要了解更多关于 Discord Webhooks 的信息,您可以查看官方 Discord Webhooks 文档。