1

背景

为了更好的主动感知用户级竞品PK指标,如:是火币打开速度快还是币安打开速度快呢?是火币 WebSocket 连接快还是币安的快呢?

目前这些都是疑问句,啄木鸟感知地图里很重要一块就是竞品数据对比,现在我们依赖第三方检测平台(如:Boce、听云),但数据不能很好的满足我们需求,并且数据肯定是直接在我们自己手上最安全,正所谓《数据在手,天下我有》。

目标

  • Docker 化部署
  • 插件化管理
  • 任务调度式收集
  • 自定义指标

架构图

image

运行环境

基于 Docker 运行,运行时为 Node.js ,可以完成:

  1. 基于 Puppeteer 无头浏览器式收集数据,如:性能指标、WebSocket 指标、接口指标等
  2. 基于 Ping 完成:域名可用性、TTL、丢包率的探测

购买多个节点服务器,如:阿里云 ECS 1U1G 北京、杭州、上海等节点安装 Woodpecker Docker Agent ,其实可以理解为“肉鸡”的概念,我们在远程的 Master 里管理这些 Agent 安装的插件、状态,并在任务触发时分发到对应的节点中,由节点完成数据采集、上报的工作。

注意的是,Agent 中只是在 ECS 中运行着一个 Docker 容器,而 Master 管理/操作的也是这个容器,不会对宿主做操作,不会越权(如:SSH ECS,我们认为这些操作是 OPS 处理的范畴)。

Master

1. 插件管理

以代码形式(Node.js)分模块管理,在任务里选择插件,并配置插件所需参数,插件列表如:

  1. Ping 插件

    • 配置:域名/IP、超时、次数
  2. 网站页面性能指标插件

    • 配置:链接、视图宽高、UserAgent
  3. Huobi Global WebSocket 专测
  4. Binance WebSocket 专测
  5. 其实能做的很多很多...
2. Agent 管理

查看所有 Agent 的状态、分布,对其安装/卸载插件,并对其进行地域分布、标签等信息管理。

3. 任务管理

以任务队列式向对应 Agent 发送数据,任务配置大概如:

  • 任务名称
  • 所属 Agent ,如:bj01、sg03、hz03
  • 任务间隔:单次、1s、1m、1h、1h
  • 执行插件:

    1. Ping - { url: 'www.baidu.com', timeout: 1000, count: 5 }
    2. Web Performance - { url: 'https://www.huobi.me/zh-cn/ex...' }
    3. Web Performance - { url: 'https://www.baidu.com' }
    4. Global WebSocket
    5. Binance WebSocket

Agent

使用 Docker 后台运行一个容器,如:

docker run \\
    -d \\
    --name woodpecker-agent \\
    -p 8080:8080 \\
    -e ACCESS\_KEY\=生成的令牌 \\
    hub.Woodpecker.vip/pk/agent:v1.0.0

该 Agent 提供的 OpenAPI :

  • IP:8080/open/v1/status - 当前 Agent 状态
  • IP:8080/open/v1/plugin/install - 安装插件,上传插件数据到 Agent
  • IP:8080/open/v1/task/exec - 使用数据执行任务

Woodpecker

日志收集服务,由 Agent 采集完后推送到该服务,由该服务入库。

注意

  1. 以上均使用内网传输,如:Master -> Agent -> Woodpecker -> DB
  2. 频繁采集第三方网站时可能面临被封 IP 的风险

Raymond
4.3k 声望305 粉丝