背景
为了更好的主动感知用户级竞品PK指标,如:是火币打开速度快还是币安打开速度快呢?是火币 WebSocket 连接快还是币安的快呢?
目前这些都是疑问句,啄木鸟感知地图里很重要一块就是竞品数据对比,现在我们依赖第三方检测平台(如:Boce、听云),但数据不能很好的满足我们需求,并且数据肯定是直接在我们自己手上最安全,正所谓《数据在手,天下我有》。
目标
- Docker 化部署
- 插件化管理
- 任务调度式收集
- 自定义指标
架构图
运行环境
基于 Docker 运行,运行时为 Node.js ,可以完成:
- 基于 Puppeteer 无头浏览器式收集数据,如:性能指标、WebSocket 指标、接口指标等
- 基于 Ping 完成:域名可用性、TTL、丢包率的探测
购买多个节点服务器,如:阿里云 ECS 1U1G 北京、杭州、上海等节点安装 Woodpecker Docker Agent ,其实可以理解为“肉鸡”的概念,我们在远程的 Master 里管理这些 Agent 安装的插件、状态,并在任务触发时分发到对应的节点中,由节点完成数据采集、上报的工作。
注意的是,Agent 中只是在 ECS 中运行着一个 Docker 容器,而 Master 管理/操作的也是这个容器,不会对宿主做操作,不会越权(如:SSH ECS,我们认为这些操作是 OPS 处理的范畴)。
Master
1. 插件管理
以代码形式(Node.js)分模块管理,在任务里选择插件,并配置插件所需参数,插件列表如:
Ping 插件
- 配置:域名/IP、超时、次数
网站页面性能指标插件
- 配置:链接、视图宽高、UserAgent
- Huobi Global WebSocket 专测
- Binance WebSocket 专测
- 其实能做的很多很多...
2. Agent 管理
查看所有 Agent 的状态、分布,对其安装/卸载插件,并对其进行地域分布、标签等信息管理。
3. 任务管理
以任务队列式向对应 Agent 发送数据,任务配置大概如:
- 任务名称
- 所属 Agent ,如:bj01、sg03、hz03
- 任务间隔:单次、1s、1m、1h、1h
执行插件:
- Ping - { url: 'www.baidu.com', timeout: 1000, count: 5 }
- Web Performance - { url: 'https://www.huobi.me/zh-cn/ex...' }
- Web Performance - { url: 'https://www.baidu.com' }
- Global WebSocket
- 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 采集完后推送到该服务,由该服务入库。
注意
- 以上均使用内网传输,如:Master -> Agent -> Woodpecker -> DB
- 频繁采集第三方网站时可能面临被封 IP 的风险
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。