1. 方案概述
1.1 核心架构
Python脚本:负责IP拉取、连通性测试、生成结构化监控报告 OpenClaw Cron:负责定时调度检测任务,无需人工值守 OpenClaw消息通道:对接钉钉、企业微信、QQ等平台,实现多渠道告警 告警策略:按IP可用率分级触发告警,支持静默时段设置,避免打扰
1.2 核心价值
全自动监控:从IP拉取到告警通知,全程无需人工干预 数据可视化:实时统计IP可用率、平均延迟、失败原因,形成规范报告 多渠道告警:异常情况及时触达相关人员,降低业务风险 智能静默:合理划分告警时段,保障休息时间不被非紧急通知打扰
2. 环境准备与OpenClaw 安装
2.1 基础环境要求
Node.js:版本 ≥ v22(需提前安装并配置环境变量) Python 环境:Python 3.7及以上,需安装 requests 依赖库 终端工具:Linux/macOS 终端或Windows PowerShell(需以管理员权限运行)
2.2OpenClaw安装与初始化
bash全局安装 OpenClawnpm install -g openclaw # 初始化工作空间(按提示完成配置)openclaw init |
2.3Python依赖安装
bashpip install requests |
3.IP池测试脚本(核心执行单元)
3.1 脚本用途
3.2 脚本路径
3.3 完整脚本代码
python#!/usr/bin/env python3# -*- coding: utf-8 -*-"""代理 IP 池自动化检测脚本功能:拉取代理IP → 批量测试连通性 → 生成监控报告"""import requestsimport jsonfrom datetime import datetimeimport urllib3# 关闭SSL证书警告(避免测试时出现证书验证错误)urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)# ====================== 配置项(请自行修改) ======================# 携趣代理 API 配置XIEQU_API = "http://api.xiequ.cn/VAD/GetIp.aspx"API_PARAMS = {"act": "get","uid": "你的UID", # 替换为你的携趣账户UID"vkey": "你的VKEY", # 替换为你的携趣账户VKEY"num": 10, # 每次拉取IP数量"time": 30, # IP有效期(分钟)"plat": 1, # 平台类型(固定值1)"so": 1, # 排序方式(固定值1)"spl": 1 # 分隔符(固定值1)}# 测试配置TEST_URL = "https://www.xiequ.cn/OnlyIp.aspx" # 测试目标地址REQUEST_TIMEOUT = 5 # 请求超时时间(秒)REPORT_PATH = "workspace/ip_pool_report.json" # 报告输出路径# =================================================================def fetch_proxy_ips():"""从携趣API拉取代理IP列表"""try:resp = requests.get(XIEQU_API, params=API_PARAMS, timeout=10)resp.raise_for_status() # 触发HTTP错误(如404、500)# 处理返回结果,过滤空值,返回有效IP列表ip_list = [ip.strip() for ip in resp.text.strip().split("\n") if ip.strip()]return ip_listexcept Exception as e:print(f"拉取IP失败:{str(e)}")return []def test_single_proxy(ip: str) -> dict:"""测试单个代理IP的可用性,返回测试结果"""proxies = {"http": f"http://{ip}","https": f"http://{ip}"}try:start_time = datetime.now()# 发送测试请求resp = requests.get(TEST_URL,proxies=proxies,timeout=REQUEST_TIMEOUT,verify=False # 关闭SSL验证)# 计算响应延迟(毫秒)cost_ms = int((datetime.now() - start_time).total_seconds() * 1000)# 判断IP是否可用(状态码200且响应内容有效)if resp.status_code == 200 and "|" in resp.text:return {"ip": ip, "status": "ok", "latency_ms": cost_ms, "reason": ""}return {"ip": ip, "status": "fail", "latency_ms": -1, "reason": "响应无效"}except Exception as e:# 捕获请求异常(超时、连接失败等)return {"ip": ip, "status": "fail", "latency_ms": -1, "reason": str(e)}def generate_report(ip_list: list, test_results: list):"""根据测试结果,生成结构化监控报告并写入文件"""total_ip = len(ip_list)success_cnt = sum(1 for item in test_results if item["status"] == "ok")fail_cnt = total_ip - success_cnt# 计算可用率(避免除数为0)success_rate = (success_cnt / total_ip * 100) if total_ip > 0 else 0.0# 计算平均延迟(仅统计可用IP)valid_latency = [item["latency_ms"] for item in test_results if item["status"] == "ok"]avg_latency = int(sum(valid_latency) / len(valid_latency)) if valid_latency else 0# 构建报告内容report = {"timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),"total_ip": total_ip,"success_ip": success_cnt,"fail_ip": fail_cnt,"success_rate": f"{success_rate:.2f}%","avg_latency_ms": avg_latency,"available_ips": [item["ip"] for item in test_results if item["status"] == "ok"],"fail_details": [{"ip": item["ip"], "reason": item["reason"]} for item in test_results if item["status"] == "fail"]}# 写入JSON报告文件with open(REPORT_PATH, "w", encoding="utf-8") as f:json.dump(report, f, ensure_ascii=False, indent=2)return reportdef main():"""脚本主函数:拉取IP → 测试 → 生成报告 → 打印结果"""ip_list = fetch_proxy_ips()if not ip_list:print("未获取到任何代理IP,脚本终止")return# 批量测试所有IPtest_results = [test_single_proxy(ip) for ip in ip_list]# 生成报告report = generate_report(ip_list, test_results)# 打印测试结果(控制台可视化)print("=" * 50)print(f"检测时间:{report['timestamp']}")print(f"总IP数:{report['total_ip']}")print(f"可用IP:{report['success_ip']}")print(f"失败IP:{report['fail_ip']}")print(f"可用率:{report['success_rate']}")print(f"平均延迟:{report['avg_latency_ms']}ms")print("=" * 50)if __name__ == "__main__":main() |
4.OpenClaw定时任务配置
4.1 任务说明
4.2 创建定时任务
bashopenclaw cron add "ip-pool-monitor" "*/30 * * * *" "python3 ~/.openclaw/workspace/scripts/test_proxy_pool.py" |
"ip-pool-monitor":任务名称(可自定义) "*/30 * * * *":Cron表达式,代表每30分钟执行一次 "python3 ~/.../test_proxy_pool.py":待执行的脚本路径(需与实际路径一致)
4.3 定时任务管理命令
bash查看所有定时任务列表openclaw cron list# 启动指定定时任务(任务名称为ip-pool-monitor)openclaw cron start ip-pool-monitor# 停止指定定时任务openclaw cron stop ip-pool-monitor# 删除指定定时任务openclaw cron delete ip-pool-monitor |
5. 告警通知配置
5.1 支持告警渠道
钉钉机器人:推荐企业用户、工作群通知,适配团队协作场景 企业微信机器人:适合公司内部通知,可关联企业组织架构 QQ机器人:适合个人用户、小团队小群,配置简单便捷
5.2 通用配置步骤
5.3 智能告警策略
6. 报告与告警示例
6.1 正常状态报告(控制台输出)
Plain Text==================================================检测时间:2026-04-14 10:30:00总IP数:10可用IP:9失败IP:1可用率:90.00%平均延迟:245ms================================================== |
6.2 异常告警通知(文本格式,适配所有渠道)
Plain Text【⚠️ IP 池异常告警】检测时间:2026-04-14 02:15:00总IP数:10可用IP:5失败IP:5可用率:50.00%(低于阈值60%)平均延迟:1823ms处理建议:1. 检查携趣代理账户余额,确认是否足够2. 检查IP提取频次限制,避免触发平台限制3. 切换备用IP池,保障业务正常运行 |
7. 部署与运行
7.1 首次测试(验证脚本可用性)
bashopenclaw gateway start |
7.3 查看运行日志
bashopenclaw log |
8. 常见问题与排查
8.1 拉取IP失败
排查点1:检查API地址、uid、vkey是否正确(需与携趣账户信息一致); 排查点2:检查服务器网络连通性,确认能正常访问携趣 API 地址; 排查点3:检查携趣账户状态,确认账户余额充足、未被限制使用。
8.2 定时任务不执行
排查点1:确认 Node.js 版本 ≥ v22(版本过低会导致 Cron 功能异常); 排查点2:使用openclaw cron list检查任务状态,确认任务已启动; 排查点3:查看OpenClaw日志(openclaw log),定位任务执行失败原因。
8.3 告警未收到
排查点1:检查机器人Webhook URL是否正确,是否存在拼写错误; 排查点2:检查机器人关键词/IP 白名单配置,确保OpenClaw服务器IP在白名单内; 排查点3:确认当前时段未进入静默时段,且IP可用率达到告警阈值。
夜雨聆风