基于OpenClaw的代理IP池自动化监控方案

适用场景:代理 IP 池可用性监控、定时巡检、异常告警

运行环境:Node.js ≥ 22、Python 3、Linux/macOS/Windows

1. 方案概述

本方案通过 OpenClaw(龙虾 AI 助手)实现代理IP池的自动化拉取、连通性测试、可用性统计、异常告警全流程管理,解决人工检测效率低、漏告警、无数据统计等问题,保障业务代理IP稳定可用。

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安装与初始化

打开终端/ PowerShell,执行以下命令,完成 OpenClaw 安装与初始化:

复制代码
bash
# 全局安装 OpenClaw
npm install -g openclaw

# 初始化工作空间(按提示完成配置)
openclaw init

初始化完成后,自动生成默认工作目录:~/.openclaw/workspace/(后续脚本、报告均存储在此目录下)。

2.3Python依赖安装

执行以下命令,安装脚本所需的 requests 库:

复制代码
bash
pip install requests

3.IP池测试脚本(核心执行单元)

3.1 脚本用途

定时从API拉取IP列表,批量测试每个IP的连通性、响应延迟,生成结构化JSON报告,为告警判断提供数据支撑。以下代码采用携趣代理API进行测试。

3.2 脚本路径

脚本需存储在OpenClaw工作目录下,具体路径:

~/.openclaw/workspace/scripts/test_proxy_pool.py

3.3 完整脚本代码

复制代码
python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
代理 IP 池自动化检测脚本
功能:拉取代理IP → 批量测试连通性 → 生成监控报告
"""

import requests
import json
from datetime import datetime
import 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_list
    except 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 report

def main():
    """脚本主函数:拉取IP → 测试 → 生成报告 → 打印结果"""
    ip_list = fetch_proxy_ips()
    if not ip_list:
        print("未获取到任何代理IP,脚本终止")
        return
    
    # 批量测试所有IP
    test_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 任务说明

通过OpenClaw Cron功能,设置每30分钟执行一次IP池检测任务,自动完成IP拉取、测试、报告生成,无需人工触发。

4.2 创建定时任务

打开终端/ PowerShell,执行以下命令,创建定时任务:

复制代码
bash
openclaw 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 支持告警渠道

适配不同使用场景,支持3种主流告警渠道,可根据需求选择配置:

  • 钉钉机器人:推荐企业用户、工作群通知,适配团队协作场景

  • 企业微信机器人:适合公司内部通知,可关联企业组织架构

  • QQ机器人:适合个人用户、小团队小群,配置简单便捷

5.2 通用配置步骤

无论选择哪种渠道,均遵循以下3个核心步骤:

1.在对应平台创建「自定义机器人」,获取机器人Webhook URL(关键凭证);

2.在OpenClaw中配置机器人凭证(具体操作参考对应平台机器人文档);

3.在Python脚本中添加告警判断逻辑(根据IP可用率触发通知)。

5.3 智能告警策略

为避免过度打扰,采用分级告警策略,具体规则如下表:

|----------|------|----------------------|
| 可用率 | 告警等级 | 告警规则 |
| <60% | 紧急告警 | 全天立即发送,确保异常及时处理 |
| 60%~80% | 一般告警 | 仅工作时间(09:00-18:00)发送 |
| >80% | 正常状态 | 不发送任何通知 |

静默时段:23:00~08:00不发送非紧急告警(仅可用率<60%的紧急告警正常发送)。

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 首次测试(验证脚本可用性)

执行以下命令,手动运行脚本,验证脚本是否能正常拉取IP、生成报告:

复制代码
bash
cd ~/.openclaw/workspace
python3 scripts/test_proxy_pool.py

7.3 查看运行日志

若任务未执行或告警未收到,可通过以下命令查看日志,定位问题:

复制代码
bash
openclaw 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可用率达到告警阈值。

相关推荐
蕤葳-2 小时前
理性分析:如何利用考证作为抓手,构建系统化知识体系与职业规划?
人工智能·网络协议·https
通信小呆呆3 小时前
各具神通——Vivado中不同系列的IP核差异详解
网络协议·tcp/ip·fpga开发
七夜zippoe3 小时前
OpenClaw 定时任务与自动化:Cron 详解
运维·人工智能·自动化·cron·openclaw
思麟呀3 小时前
网络层IP协议
linux·服务器·网络·网络协议·tcp/ip·计算机网络
不做菜鸟的网工3 小时前
OSPF FA地址
网络协议
香农第18代传人3 小时前
让PowerShell及CMD走代理
tcp/ip
chaofan9803 小时前
Claude 4.7 Opus 深度测评:智能体编码跑分暴涨 10%,开发者要失业了?
人工智能·自动化·api
SilentSamsara4 小时前
TLS/HTTPS 实战:证书链、握手与生产配置
网络·数据库·网络协议·http·https
bbq粉刷匠4 小时前
网络基础概念
网络·tcp/ip·计算机网络