尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Python 用 Doubao-Seed-Evolving 写网站监控脚本:完整代码与飞书告警、Windows 计划任务踩坑排查
Python 用 Doubao-Seed-Evolving 写网站监控脚本完整代码与飞书告警、Windows 计划任务踩坑排查一、问题背景网站半夜挂了谁在第一时间知道做开发的人基本都碰过这类问题。服务器上跑着几个对外服务平时看着正常某天半夜其中一个悄无声息挂了第二天上班才发现丢了一晚数据。等到用户或客户来投诉损失已经实打实发生了。成熟的监控 SaaS 不是没有但免费额度紧、付费按年收对只盯三五个站的个人或小团队来说偏重。本文给出一种轻量方案用大模型 Doubao-Seed-Evolving 从一个自然语言需求直接生成可运行的 Python 监控脚本覆盖 HTTP 探测、飞书告警、定时调度全流程并附两处真实踩坑的排查过程方便后来的人直接复用。二、为什么用 Doubao-Seed-Evolving 生成Doubao-Seed-Evolving 是字节跳动面向复杂工程任务推出的模型8 月 3 日刚完成第二次升级重点强化了 Coding 工程能力、Agent 检索能力和幻觉控制能力。对「自然语言需求 → 完整可运行工程」这类任务它的表现值得实测。我的做法是先把需求边界讲清楚再交给模型监控谁、怎么算异常、出事往哪发通知这三件事由人定模型只按边界施工。提示词核心几条读 targets.json 配置含 name、url、timeout逐个发 GET 请求记录是否可达、状态码、耗时不可达、状态码 ≥400、耗时超阈值三种情况任一即异常异常发飞书告警且内容含关键词没配飞书就只打印日志。三、完整 monitor.pyPython 3.10仅依赖 requests下面是可以直接复制运行的完整版本已经过实测和两处踩坑修正。#!/usr/bin/env python3# -*- coding: utf-8 -*-HTTP 目标监控脚本定期监控配置的 URL异常时通过飞书机器人发送告警importjsonimportsysimporttimefromdatetimeimportdatetimefrompathlibimportPathfromtypingimportAnyimportrequestsdefload_json_file(file_path:Path)-Any:withopen(file_path,r,encodingutf-8)asf:returnjson.load(f)defget_feishu_webhook(base_dir:Path)-str|None:config_pathbase_dir/config.jsonifnotconfig_path.exists():returnNonetry:configload_json_file(config_path)webhookconfig.get(feishu_webhook,).strip()returnwebhookifwebhookelseNoneexcept(json.JSONDecodeError,OSError)ase:print(f[警告] 读取 config.json 失败:{e})returnNonedefload_targets(base_dir:Path)-list[dict]:targets_pathbase_dir/targets.jsonifnottargets_path.exists():print(f[错误] 未找到配置文件:{targets_path})sys.exit(1)try:targetsload_json_file(targets_path)ifnotisinstance(targets,list):print([错误] targets.json 必须是 JSON 数组格式)sys.exit(1)returntargetsexceptjson.JSONDecodeErrorase:print(f[错误] 解析 targets.json 失败:{e})sys.exit(1)defcheck_target(target:dict)-dict:nametarget.get(name,未命名)urltarget.get(url,)timeouttarget.get(timeout,5)result{name:name,url:url,timeout:timeout,is_reachable:False,status_code:None,elapsed:0.0,is_error:False,error_reason:,}start_timetime.time()try:responserequests.get(url,timeouttimeout,allow_redirectsTrue,headers{User-Agent:MonitorScript/1.0})result[elapsed]round(time.time()-start_time,3)result[status_code]response.status_code result[is_reachable]Trueifresponse.status_code400:result[is_error]Trueresult[error_reason]fHTTP状态码异常:{response.status_code}elifresult[elapsed]timeout:result[is_error]Trueresult[error_reason]f响应超时: 耗时{result[elapsed]}s 阈值{timeout}sexceptrequests.exceptions.Timeout:result[elapsed]round(time.time()-start_time,3)result[is_error]Trueresult[error_reason]f请求超时: 超过{timeout}秒未响应exceptrequests.exceptions.ConnectionError:result[elapsed]round(time.time()-start_time,3)result[is_error]Trueresult[error_reason]连接失败: 无法建立网络连接exceptrequests.exceptions.RequestExceptionase:result[elapsed]round(time.time()-start_time,3)result[is_error]Trueresult[error_reason]f请求异常:{str(e)}returnresultdefsend_feishu_alert(webhook:str,result:dict)-bool:# 飞书对 markdown 类型关键词校验异常改用 text 类型 关键词监控current_timedatetime.now().strftime(%Y-%m-%d %H:%M:%S)text_content(f监控服务异常通知\n---\nf服务名称:{result[name]}\n访问地址:{result[url]}\nf错误原因:{result[error_reason]}\n状态码:{result[status_code]orN/A}\nf响应耗时:{result[elapsed]}s\n超时阈值:{result[timeout]}s\nf触发时间:{current_time}\n)payload{msg_type:text,content:{text:text_content}}try:responserequests.post(webhook,jsonpayload,timeout10,headers{Content-Type:application/json})response.raise_for_status()resp_dataresponse.json()ifresp_data.get(code,0)!0:print(f[飞书告警发送失败]{resp_data.get(msg,未知错误)})returnFalsereturnTrueexceptrequests.exceptions.RequestExceptionase:print(f[飞书告警发送异常]{e})returnFalsedefprint_log(result:dict)-None:current_timedatetime.now().strftime(%Y-%m-%d %H:%M:%S)status[异常]ifresult[is_error]else[正常]log_line(f[{current_time}]{status}| 名称:{result[name]}| fURL:{result[url]}| 状态码:{result[status_code]orN/A}| f耗时:{result[elapsed]}s)ifresult[is_error]:log_linef | 原因:{result[error_reason]}print(log_line)defmain():base_dirPath(__file__).resolve().parentprint(*60)print(fHTTP监控脚本启动 -{datetime.now().strftime(%Y-%m-%d %H:%M:%S)})print(*60)feishu_webhookget_feishu_webhook(base_dir)print([信息] 飞书告警已启用iffeishu_webhookelse[信息] 飞书告警未配置仅打印控制台日志)targetsload_targets(base_dir)print(f[信息] 成功加载{len(targets)}个监控目标)print(-*60)error_count0fortargetintargets:ifnamenotintargetorurlnotintarget:print(f[跳过] 配置项缺少 name 或 url 字段:{target})continueresultcheck_target(target)print_log(result)ifresult[is_error]:error_count1iffeishu_webhookandsend_feishu_alert(feishu_webhook,result):print(f └─ 飞书告警已发送:{result[name]})print(-*60)print(f监控完成: 共检查{len(targets)}个目标, 异常{error_count}个)print(*60)sys.exit(1iferror_count0else0)if__name____main__:main()四、配置文件与运行步骤同目录放targets.json必需和config.json可选。targets.json是监控目标的数组每项含name、url、timeout三个字段config.json只放一个feishu_webhook不配就只打控制台日志。// targets.json[{name:示例站点A,url:https://www.baidu.com,timeout:5},{name:示例站点B,url:https://github.com,timeout:10}]// config.json可选{feishu_webhook:https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxx}安装依赖与运行先pip install requests再python monitor.py即可看到带时间戳的探测日志。这个 Python 网站监控脚本对运行环境要求很低一台任意配置的云服务器或本地机器都能长期挂着。定时执行的两种常见姿势。Linux 用 crontab规则*/5 * * * *表示每 5 分钟一次完整写法*/5 * * * * /usr/bin/python3 /path/to/monitor.py /var/log/monitor.log 21日志追加到文件便于排查。Windows 则在「任务计划程序」里新建任务触发器设「每隔 5 分钟」操作指向一个run_monitor.batbat 内容第一行必须chcp 65001强制 UTF-8再调用python monitor.py否则会踩到下一节的编码坑。五、踩坑排查一飞书告警被关键词校验拦下现象脚本逻辑跑通、控制台打印异常但飞书群里一条告警都没收到后台返回「Key Words Not Found」。排查最初用 markdown 类型消息、正文含「告警」二字以为飞书关键词校验只认纯文本把关键词挪到正文第一行仍失败。根因是这台飞书机器人对 markdown 类型消息的关键词校验不稳定改成 text 类型、关键词改为「监控」后立刻成功。结论模型写的代码逻辑没错没踩中的是第三方平台的安全规则定位根因靠人。图 2飞书群里收到两条告警消息分别是 httpbin 超时和不存在域名连接失败六、踩坑排查二Windows 计划任务报 GBK 编码错误现象在终端手动运行正常挂进 Windows 计划任务每五分钟跑一次后日志报错gbk codec cant encode character。排查计划任务调起的控制台默认 GBK 编码而日志里用了 emoji 图标UTF-8 环境下没事、GBK 下直接崩。修法两步bat 入口加chcp 65001强制 UTF-8把 emoji 换成[正常]/[异常]纯文字。改完定时任务稳定运行。图 3Windows 任务计划程序里 SeedMonitor 的属性页触发器为每 5 分钟重复一次这里提醒一点脚本能跑通不算完能一直跑、出事能喊你才算真正在岗。下图是稳定运行后的日志三个目标全部正常、异常 0 个。图 4monitor.log 内容三个目标全部「正常」、异常 0 个证明定时任务稳定运行七、从脚本到接口能力沉淀的下一步脚本在本地跑着只是起点。把探测逻辑抽象成 HTTP 健康检查接口参数url timeout expected_status返回状态码、耗时、是否异常再叠告警规则、调度、历史可用率它就成了一个轻量监控能力。这样一个本机网站监控脚本就变成了可被前端大屏、运维平台直接调用的接口监控服务。想让脚本对外提供服务可封装成接口托管到 YesApi Pro 这类 API 开放平台省去自搭服务、接计费、做权限的功夫是否采用看各自基础设施情况。这种「从个人脚本到可复用产品能力」的路径正是这次用 Doubao-Seed-Evolving 做复刻最值得沉淀的部分。八、适用场景与边界这套方案最适合「盯几个对外站点、要个及时告警」的个人或小团队场景。要做企业级可用性监控至少补三件事多节点探测单台机器单出口会误报、SSL 证书到期检查、探测与告警通道解耦。它只检查「首页能不能打开」不验证页面内容和接口深层逻辑深度巡检需另写用例。把边界讲清楚比把它描述成万能工具更经得起推敲。八、总结这套网站监控方案成本极低复制配置、装一个 requests 依赖即可上手对运行环境几乎没要求。Doubao-Seed-Evolving 负责从零到一的代码生成与后续多轮改版人负责需求边界、踩坑定位和部署判断。两者配合才到得了「真在跑、真在告警」这一步。对想做接口监控、又不想一上来就上重型运维系统的个人和小团队来说这条从脚本到接口的路线值得照着复一遍跑通之后再按自己的站点数量慢慢加能力比直接买一套用不上的监控 SaaS 更划算。#Python #大模型 #AI编程 #网站监控 #后端 #开发工具 #程序员 #自动化 #接口测试#效率工具
RELATED

相关推荐

如何在Unity中快速实现动态SDF?com.unity.demoteam.mesh-to-sdf完整入门指南

如何在Unity中快速实现动态SDF?com.unity.demoteam.mesh-to-sdf完整入门指南

如何在Unity中快速实现动态SDF?com.unity.demoteam.mesh-to-sdf完整入门指南 【免费下载链接】com.unity.demoteam.mesh-to-sdf A light and fast real-time SDF generator, primarily for animated characters. The dynamic SDF can be used for all sorts of VFX.…

📅 2026/9/15 12:53:43
php-version完全解析:为什么它是PHP开发者的必备工具

php-version完全解析:为什么它是PHP开发者的必备工具

php-version完全解析:为什么它是PHP开发者的必备工具 【免费下载链接】php-version stupid simple PHP version management 项目地址: https://gitcode.com/gh_mirrors/ph/php-version php-version是一款终极PHP版本管理工具,它让开发者能够轻松切…

📅 2026/9/5 13:30:30
PyLate检索引擎深度测评:PLAID vs WARP vs TACHIOM,哪款最适合你的场景?

PyLate检索引擎深度测评:PLAID vs WARP vs TACHIOM,哪款最适合你的场景?

PyLate检索引擎深度测评:PLAID vs WARP vs TACHIOM,哪款最适合你的场景? 【免费下载链接】pylate Late Interaction Models Training & Retrieval 项目地址: https://gitcode.com/gh_mirrors/py/pylate PyLate是一个专注于Late In…

📅 2026/9/8 11:09:15
MORE NEWS

更多资讯

📰

门票免了,摆渡车却把你送出40公里:稻城亚丁的「门景分离」

(知潮网)你这个假期为摆渡车花了多少钱?如果你2026年自驾去稻城亚丁,答案可能是:先在离核心景区扎灌崩约40公里外的游客中心停好车,再花120元坐观光车往返,晃50分钟才能到山门口。 一个现象就这…

📰

AI Agent到底是什么 —— Chatbot解决“怎么回答”,Agent解决“怎么完成”

引子:一个CI排查任务,两种截然不同的处理方式 假设你遇到一个真实的开发场景:本地分支的CI流水线跑测试失败了,你需要排查原因并修复。 把这个问题分别交给Chatbot和Agent。 Chatbot的处理路径是这样的:你把终端里的报…

📰

03-Linux环境准备依赖包内核参数与用户组

文章目录一、场景切入二、用户与用户组2.1 创建组与用户2.2 验证三、目录规划四、内核参数4.1 /etc/sysctl.conf4.2 RHEL 系参数验证五、资源限制:/etc/security/limits.conf六、依赖包6.1 yum 安装6.2 验证七、SELinux 与防火墙八、主机名与 /etc/hosts九、oracle 用户环境变量…

📰

04-Oracle 19c静默安装全流程

Oracle 19c 静默安装全流程——从零到可连接 服务器连不上显示器、没有X11、没有VNC——这是社保局机房的常态。这篇文章记录一套完整的Oracle 19c静默安装流程,从yum依赖到建库到监听配置,全命令行操作。 文章目录Oracle 19c 静默安装全流程——从零到可…

📰

ChatGPT、Codex排查实录:没有死锁,为什么MySQL还是报“Lock wait timeout exceeded”?

线上订单接口突然开始报错:Lock wait timeout exceeded; try restarting transaction第一反应通常是:MySQL是不是死锁了?于是去找Deadlock日志。结果没有。数据库CPU不高,连接数也没打满,慢SQL里甚至看不到特别夸张的查…

📰

语义化版本控制(SemVer)踩坑指南:为什么一个内部方法签名变更也会破坏公共契约

语义化版本控制(SemVer)踩坑指南:为什么一个内部方法签名变更也会破坏公共契约在开源库与公共 SDK 的维护工作中,没有任何事情比在周五下午发布了一个 v1.2.4 的补丁版本、随后半小时内 Issue 区被几十条“升级后我的项目编译不过…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬