云计算百科
云计算领域专业知识百科平台

自己撸了个网站监控系统,再也不用担心服务器半夜宕机了!

最近公司的多了几个网站需要监控,有时候服务器是正常的网站挂了都不知道,用户投诉了才发现。市面上那些监控服务要么太贵,要么功能太复杂。想着反正也不是什么高深的技术,干脆自己动手写一个算了。

说干就干,花了一个周末的时间,用Flask撸了一个网站存活监控系统。效果还不错,今天分享给大家。

为什么要自己写监控系统

其实一开始我也想过用现成的方案,比如Zabbix、Prometheus这些。但是吧,对于我们这种小小业务来说,这些系统太重了,光是部署配置就要折腾好久。而且我们的需求很简单,就是想知道网站能不能正常访问,挂了能及时通知我们就行。

还有一个原因是成本考虑。那些第三方监控服务,便宜的功能有限,功能全的又太贵。我算了一下,一年下来也要好几千块钱,还不如自己写一个,想要什么功能就加什么功能。

系统功能介绍

这个监控系统虽然是我自己写的,但功能还是比较全面的。

用户管理这块,我设计了管理员和普通用户两种角色。管理员可以管理所有的监控项目和用户,普通用户只能管理自己创建的监控项目。这样既保证了权限隔离,又方便了团队协作。

监控功能方面,可以添加任意数量的网站URL进行监控。每个监控项目都可以单独设置检查间隔,我一般设置5-10分钟检查一次,这个频率既不会给服务器造成太大压力,又能及时发现问题。

还有一个很实用的功能是响应时间统计。有时候网站虽然能访问,但是响应很慢,用户体验也不好。通过响应时间的监控,可以提前发现性能问题。

告警通知这块,我集成了钉钉机器人。为什么选择钉钉呢?主要是我们公司本来就在用钉钉办公,而且钉钉机器人的API比较简单,接入成本低。当网站从正常状态变为故障时,系统会自动发送告警消息到钉钉群,这样团队里的人都能第一时间知道。

技术选型和架构

技术栈我选择了比较成熟稳定的组合:

后端用的Flask,轻量级而且扩展性好。数据库用SQLite,对于我们这种监控项目不多的场景完全够用,而且部署简单,不需要单独安装数据库服务。

定时任务用的APScheduler,这个库很好用,可以在Flask应用内部直接管理定时任务,不需要依赖系统的cron。

前端界面用Bootstrap 5搭建,说实话我前端水平一般,但Bootstrap的组件库很丰富,做出来的界面看起来还是挺专业的。

整个系统的架构其实不复杂。启动应用后,APScheduler会根据数据库中的监控配置创建定时任务。每个任务到时间就会发送HTTP请求检查网站状态,如果发现异常就触发告警。

部署和使用体验

部署过程非常简单,基本上就是下载代码、安装依赖、运行脚本这几步。我还专门写了个start.bat文件,在Windows服务器上双击就能启动。

首次运行会自动创建数据库和默认管理员账号(用户名admin,密码查看密码文件),这个设计还是挺贴心的,不需要手动初始化数据。

使用体验方面,界面比较直观,该有的功能都有。添加监控项目很简单,填个URL、设置下检查间隔就行了。监控状态是实时更新的,绿色表示正常,红色表示异常,一目了然。

钉钉告警的配置也不复杂,在钉钉群里添加个自定义机器人,把Webhook地址复制到系统里就行。记得要设置关键词"网站监控告警",不然钉钉的安全验证过不了。

image-20250810132242748

image-20250810132144959

后续优化计划

虽然现在系统运行得还不错,但还有一些地方可以优化。

比如告警策略可以更智能一些,现在是只要检测到异常就立即告警,有时候会有误报。我在考虑加个连续失败次数的判断,比如连续3次检测失败才告警,这样可以减少误报。

还想加个邮件告警功能,虽然钉钉很方便,但有些场景下邮件告警可能更合适。

监控类型也可以扩展一下,现在只支持HTTP监控,后面可以加上TCP端口监控、数据库连接监控等。

界面方面也有优化空间,比如可以加个监控数据的图表展示,看起来会更直观一些。

开源分享

这个项目我已经放到GitHub上开源了,代码结构还算清晰,注释也比较详细。如果你们公司也有类似的监控需求,可以直接拿去用,或者在此基础上做二次开发。

项目地址:https://github.com/Dearisyou/Websit_survival_monitoring/tree/master

项目用的MIT许可证,基本上没什么使用限制。代码质量虽然谈不上多高,但至少是经过实际生产环境验证的,稳定性还是有保障的。

说实话,写这个系统的过程中也学到了不少东西。比如Flask的应用结构设计、SQLAlchemy的使用、定时任务的管理等等。虽然技术栈都不算新,但组合起来解决实际问题还是很有成就感的。

对了,如果你要在生产环境使用,记得修改默认的管理员密码和SECRET_KEY,这个很重要。还有就是要定期备份数据库文件,虽然SQLite比较稳定,但备份总是没错的。

写在最后

其实写这个监控系统的初衷很简单,就是想解决工作中遇到的实际问题。虽然市面上有很多成熟的监控方案,但有时候自己动手写一个,既能完全满足需求,又能学到新知识,何乐而不为呢?

当然,这个系统肯定还有很多不完善的地方,毕竟是个人项目,投入的时间和精力有限。但对于中小型团队的网站监控需求来说,应该是够用的。

如果你也在为网站监控的问题头疼,不妨试试这个方案。有什么问题或者建议,欢迎交流讨论。

**如果这篇文章对你有帮助,别忘了点赞转发支持一下!想了解更多运维实战经验和技术干货,记得关注微信公众号@运维躬行录,领取学习大礼包!!!我会持续分享更多接地气的运维知识和踩坑经验。让我们一起在运维这条路上互相学习,共同进步!

公众号:运维躬行录

个人博客:躬行笔记

赞(0)
未经允许不得转载:网硕互联帮助中心 » 自己撸了个网站监控系统,再也不用担心服务器半夜宕机了!
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!