自动监控网站可用性并发送通知的 Bash 脚本

在现代的互联网世界中,网站的可用性对于业务的成功至关重要。如果您是一个网站管理员或负责监控网站运行状况的工程师,那么您知道及时发现并解决问题对于确保用户满意度至关重要。如何使用 Bash 脚本来监控多个网站的可用性,并在网站出现问题时自动发送通知

背景

在项目中,我们使用了 Rails 框架,Nginx 作为代理服务器,实现了前后端分离的架构,共有 6 个网站。为了及时发现这些网站的可用性问题,曾考虑使用 UptimeRobot,这是一个免费且简单易用的监控工具。然而,由于 UptimeRobot 的报警通知功能限制,只能通知注册账号的人,无法邀请团队成员,这让我们感到不便。因此,决定自己编写一个监控脚本

基本功能

监控脚本需要实现以下基本功能:

  1. 当网站出现故障时,发送通知。
  2. 当网站首次成功启动并处于正常运行状态时,发送通知。
  3. 在连续检查中,如果服务一直保持正常状态,不发送重复通知。
bash 复制代码
#!/bin/bash

# 定义要监视的网站列表
websites=("https://dev.1.com" "https://dev.2.com" "https://dev.1.com")

# 定义Feishu机器人的Webhook URL
webhook_url="xxxxxxxxx"

# 函数:发送消息到 Feishu 机器人
send_message_to_feishu() {
  local website="$1"
  local status="$2"

  # 构建要发送的消息
   message="Monitor is $status: $website  监控时间: $(date "+%Y-%m-%d %H:%M:%S")"
  echo $message
  # 发送消息到 Feishu 机器人
  curl -X POST \
    $webhook_url \
    -H 'Content-Type: application/json' \
    -d '{
    "msg_type": "post",
    "content": {
        "post": {
            "zh_cn": {
                "title": "Monitor - 服务告警",
                "content": [
                    [
                        {
                            "tag": "text",
                            "text":  "'"$message"'"
                        },
                        {
                          "tag": "at",
                          "user_id": "all"
                        }
                    ]
                ]
            }
        }
    }
}'
}


# 文件夹用于存储状态文件
status_folder="status_files"

# 创建状态文件夹(如果不存在)
mkdir -p "$status_folder"

# 遍历网站列表并检查
for website in "${websites[@]}"; do
  # 从网站URL中提取名称,用作状态文件名
  website_name=$(echo "$website" | sed 's/[^a-zA-Z0-9]/_/g')
  status_file="$status_folder/$website_name.status"

  status_code=$(curl -s -o /dev/null -w "%{http_code}" "$website")
  echo "status_code $status_code"

if [[ ! "$status_code" =~ ^4[0-9][0-9] && "$status_code" != "000" ]]; then
    if [ ! -e "$status_file" ] || [ "$(cat "$status_file")" == "down" ]; then
      send_message_to_feishu "$website" "Up and Running"
    fi
    echo "up" > "$status_file"  # 更新状态为 "up"
  else
      send_message_to_feishu "$website" "Down"
      echo "down" > "$status_file"  # 更新状态为 "down"
  fi
done

上述脚本是一个用于监控多个网站可用性的 Bash 脚本。它会定期检查这些网站的状态,并在网站出现问题时发送通知。脚本中使用了 Feishu 机器人 来发送通知,根据自己的需求选择其他通知方式。

总结

通过这个简单的 Bash 脚本,能够自动监控多个网站的可用性,并在必要时发送通知,确保我们的网站始终保持良好的运行状态。这种自动化的监控方式可以大大减轻管理员和工程师的负担,提高了网站的可用性和用户体验。

希望这个示例对您有所帮助,可以根据您的实际需求进行修改和定制。如果您有任何问题或建议,欢迎在评论中分享!

相关推荐
Scott9999HH6 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社7 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海7 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖8 小时前
JDK 26 新特性详解
java·开发语言
马优晨9 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区11 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大11 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai11 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
এ慕ོ冬℘゜12 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa12 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio