当前位置:首页 > 百科 > 网站监控脚本 正文

网站监控脚本

时间:2026-10-17 05:04:14 来源:力不从心网

凌晨三点,网站手机震了一下。监控脚本我眯着眼看屏幕,网站是监控脚本运维群里的一条告警:“api.example.com 响应时间超过 5000ms”。这不是网站第一次了。上个月同一个接口在业务高峰期挂了两次,监控脚本每次都是网站用户先发现,我们后知后觉。监控脚本那次之后我决定写个监控脚本,网站不能再靠人肉盯梢。监控脚本

脚本不复杂,网站核心就三件事:定时发请求、监控脚本判断结果、网站异常时通知。监控脚本我用 Python 写的网站,依赖只有 requests 和 schedule 两个库。先定义要监控的 URL 列表,每个 URL 配上期望的状态码和响应时间阈值。比如首页要求 200 且 2 秒内返回,支付回调接口要求 200 且 1 秒内返回,超时就记一笔。

import requests, time, schedule TARGETS = [ { "url": "https://example.com", "timeout": 2, "expect": 200}, { "url": "https://api.example.com/pay/callback", "timeout": 1, "expect": 200}, ] def check(target): start = time.time() try: r = requests.get(target["url"], timeout=target["timeout"]) elapsed = time.time() - start if r.status_code != target["expect"]: notify(f"{ target['url']} 状态码 { r.status_code}") elif elapsed > target["timeout"]: notify(f"{ target['url']} 响应 { elapsed:.2f}s") except Exception as e: notify(f"{ target['url']} 请求失败: { e}") 

通知这块我一开始用的邮件,后来换成企业微信机器人。邮件容易被忽略,机器人消息直接弹在手机通知栏,想装看不见都难。webhook 地址填进去,notify 函数就是一个 POST 请求,带上告警文本。简单粗暴,但管用。

跑起来之后发现一个问题:网络抖动导致的误报太多。有一次凌晨四点告警响了三遍,爬起来一看是公司出口路由器在重启。后来加了个重试机制——第一次失败等 10 秒再试一次,两次都失败才发告警。误报率立刻降下来了。

脚本部署在一台闲置的腾讯云轻量服务器上,1 核 1G 的配置,跑监控绰绰有余。用 nohup 挂在后台,日志按天切割。每周我会翻一次日志,看看哪些接口响应时间在缓慢爬升。这种趋势比单次超时更值得警惕,往往是数据库慢查询或者内存泄漏的前兆。

有次发现商品详情页的响应时间从平均 300ms 涨到了 800ms,持续了三天。查下来是一个没加索引的查询在数据量过百万后开始拖后腿。要是没这个脚本,等用户投诉再查,至少多熬一周。

监控脚本不是银弹。它只能告诉你“出问题了”,不能告诉你“为什么”。但知道出问题了,就已经赢了一半。剩下的另一半,靠日志、靠链路追踪、靠你对系统的熟悉程度。脚本是眼睛,不是大脑。

现在这个脚本跑了快半年,告警次数从最初每周十几次降到了每月两三次。不是问题变少了,是很多问题在冒头之前就被处理掉了。凌晨三点的手机震动,也越来越少了。

推荐内容