当前位置:首页 > 百科

自己做网站监控平台

去年冬天,自己做网站监我负责的控平一个小电商站半夜挂了。早上六点客户打电话来,自己做网站监我才知道服务器已经宕机四个小时。控平那感觉,自己做网站监就像你睡了一觉醒来发现家里被偷了个精光。控平

商业监控工具当然有。自己做网站监UptimeRobot、控平Pingdom,自己做网站监我都试过。控平免费版功能阉割得厉害,自己做网站监付费版一个月几十美金起步。控平关键问题是自己做网站监——数据在别人手里。有次某平台误报,控平凌晨三点给我发了十七条告警短信,自己做网站监结果网站好好的。我盯着手机屏幕,心想这钱花得真冤。

干脆自己写一个。

核心逻辑就三件事

监控平台没那么神秘。拆开来看,无非是:定时发请求、判断结果、通知我。我用Python写了个脚本,跑在一台最便宜的VPS上,一个月成本不到两杯咖啡的钱。

请求部分用requests库,设置超时五秒。判断逻辑我加了三个维度:HTTP状态码是不是200、响应体里有没有我预设的关键词、响应时间有没有超过阈值。三个条件任何一个不满足,就触发告警。

这里有个坑。刚开始我只检查状态码,结果有次网站返回200但页面内容变成了数据库错误信息。状态码骗了我。后来加上了关键词匹配,比如检查页面里有没有“加入购物车”这几个字。粗暴,但管用。

告警通道选了Telegram

邮件太慢,短信要钱。Telegram Bot API免费、即时、还能发到手机锁屏上。创建Bot的过程不复杂,找BotFather聊几句就能拿到token。发送消息的代码不到十行。

我设置了一个冷却机制。同一个站点,五分钟内只发一次告警。否则服务器真挂了,你的手机能震到没电。这个逻辑用个简单的字典记录上次告警时间就行,不需要Redis那么重的东西。

数据存哪儿

SQLite。别笑,就监控几个站点,SQLite完全够用。每次检查往表里插一条记录:时间戳、站点ID、状态、响应时间。想看趋势的时候,用SELECT查一下,matplotlib画个图,一目了然。

我有个朋友做独立开发,他监控了十二个站点。SQLite单表存了半年数据,文件才不到20MB。他说这比用PostgreSQL省心多了,备份就是复制一个文件。

部署比想象中简单

整个脚本用crontab每分钟跑一次。对,就是Linux自带的定时任务。没有Docker,没有Kubernetes,没有微服务。一个monitor.py文件,加上一个config.yaml存站点列表和告警配置,总共不到两百行代码。

VPS选最便宜的那档,1核512M内存。跑这个监控脚本,CPU占用率从来没超过3%。

意外收获

自己写监控之后,我发现了一些商业工具不会告诉我的事。比如某个站点的响应时间在每天下午三点会规律性地飙升到三秒——那是备份任务在跑。比如另一个站点每周日凌晨会有一次短暂的502,持续不到十秒,但每周都准时出现。

这些细节,商业监控的仪表盘上不会标出来。但对你理解自己系统的脾气,特别有用。

现在我的手机安静多了。告警响的时候,我知道那是真的出事了。

分享到: