当前位置: 首页 > news >正文

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

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

背景

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

基本功能

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

  1. 当网站出现故障时,发送通知。
  2. 当网站首次成功启动并处于正常运行状态时,发送通知。
  3. 在连续检查中,如果服务一直保持正常状态,不发送重复通知。
#!/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" ]]; thenif [ ! -e "$status_file" ] || [ "$(cat "$status_file")" == "down" ]; thensend_message_to_feishu "$website" "Up and Running"fiecho "up" > "$status_file"  # 更新状态为 "up"elsesend_message_to_feishu "$website" "Down"echo "down" > "$status_file"  # 更新状态为 "down"fi
done

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

总结

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

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

http://www.lryc.cn/news/189474.html

相关文章:

  • go 项目打包部署到服务器
  • 整理mongodb文档:副本集成员可以为偶数
  • PHP - 遇到的Bug - 总结
  • 统计子岛屿的数量
  • IntelliJ IDEA Maven 项目的依赖分析
  • 数学建模、统计建模、计量建模整体框架的理解以及建模的步骤
  • WaitGroup原理分析
  • java直播源码:如何使用Java构建一个高效的直播系统
  • Websocket获取B站直播间弹幕教程——第二篇、解包/拆包
  • 膝关节检测之1设计目标手势与物体交互的动画
  • canvas力导布局
  • 【网络安全】「漏洞原理」(二)SQL 注入漏洞之理论讲解
  • JavaScript中类的学习
  • 1600*A. Linova and Kingdom(DFS优先队列贪心)
  • gitlab git lfs的替代软件整理汇总及分析
  • IDEA 2023.2.2图文安装教程及下载
  • 第六届“中国法研杯”司法人工智能挑战赛
  • Springcloud中间件-----分布式搜索引擎 Elasticsearch
  • 基于深度学习的目标检测和语义分割:机器视觉中的最新进展
  • 微信小程序报错request:fail -2:net::ERR_FAILED(生成中间证书)
  • Ubuntu更改时区
  • 0144 文件管理
  • python psutil库之——获取网络信息(网络接口信息、网络配置信息、以太网接口、ip信息、ip地址信息)
  • uniapp上echarts地图钻取
  • scratch保护环境 2023年5月中国电子学会图形化编程 少儿编程 scratch编程等级考试一级真题和答案解析
  • RPC分布式网络通信框架项目
  • Navicat如何连接远程服务器的MySQL
  • 【计算机网络笔记】计算机网络的结构
  • 排序算法-插入排序法(InsertSort)
  • RuntimeError: “slow_conv2d_cpu“ not implemented for ‘Half‘