如何在 Ubuntu 18.04 上使用 Discord Webhooks 获取网站状态通知

作者选择了 Apache Software Foundation作为 Write for Donations计划的一部分接受捐款。

介绍

当你有关键的网站时,你会想知道他们什么时候遇到任何问题,所以你可以修复它们之前有影响你的用户。

Discord是一个类似于Slack的托管聊天系统. 使用Discord,您可以设置一个免费的消息系统,允许您通过短信,图像,音频和视频进行通信。

在本教程中,您将配置自己的 Discord 服务器,创建一个 Discord Webhook,写一个 Bash 脚本,检查网站列表的状态,并测试从您的服务器到您的 Discord 频道的通知。

前提条件

在您开始本指南之前,您将需要以下内容:

步骤 1 - 设置您的 Discord Webhook

打开您的 Discord 帐户后,您可以创建自己的私人 Discord 服务器。

首先,在您的浏览器中 登录您的 Discord 帐户启动您的 Discord 应用程序并点击 创建服务器按钮。

Create server or Join server Discord

然后选择您的服务器的名称,然后单击创建服务器按钮。

接下来,您将配置您的 Discord Webhook. 这些 Webhooks 是您可以使用的独特 URL 来链接服务。 Discord 的 Webhooks 允许您自动发送消息并将数据更新发送到您的 Discord 文本渠道。

在本教程中,当您的服务器上的特定服务失效时,您将发送通知到您的webhook,Discord将确保您在您的频道上收到这些消息。

要创建一个webhook,你必须先点击你的频道,然后点击编辑频道按钮,就在你的频道名称旁边。

Channel settings Discord

然后单击Webhooks选项卡,然后单击Create Webhook按钮。

Create Webhook Button Discord

在此之后,为您的 webhook 选择一个名称,在本教程中我们将使用警报,因为这是我们的 Bash 脚本会做的事情 - 警告我们如果我们的网站出现故障。

复制您的 webhook URL 并将其保存到以后。最后,点击保存按钮。

Create webhook Discord

你现在有你的 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 文档

Published At
Categories with 技术
comments powered by Disqus