过去一年中公司多个业务线时不时出现一些类似网络故障的问题,事后经过排查有些是后端服务的问题,有些是网关问题,有些是防火墙问题,也有一些确实是网络问题。
因为业务现场离研发侧太远,很多时候无法第一时间获取到故障现场的完整信息或者日志。导致每次的问题定位成本太高了,也对业务生产造成了很大影响。
使用ping检测下?
大哥,这是业务现场,用户可能小学都没毕业😂
为啥不用类似winMTR这样的工具?
这类工具是能够满足我们部分的诉求,但一个是安装和使用成本过高。必须得业务现场的IT进行安装,且在每次出问题时输入业务域名做探测。另一个是不够灵活,每次需要在问题发生后人工介入排查,我们期望能够做成时时监控,并能自动告警。
基于此,我开发了一款网络探测工具,用于实时监控业务现场的网络链路。在出问题时能第一时间告警到即时通讯,并展示网络问题的具体原因。这样就能快速的通知相关人员做修复处理。
功能说明 & 效果
检查内容 | 说明 |
---|---|
DNS | 尝试解析DNS域名,获取对应的IP,并使用获取到的IP来进行后续流程 |
Ping | 使用Ping去尝试跟对应IP的网络连通性 |
MTR | traceroute,查看网络的转发,还有网络质量 |
TCP 连接 | 尝试进行TCP连接,有时候防火墙就对此进行拦截 |
为什么将ping、tcp、mtr集成到一起
- ping使用的是ICMP协议,而TCP使用的是TCP协议,ping得通不代表业务接口链路通
- ping测试通常是MTR测试中的一部分,ping得通,不一定代表mtr能通
- 检测网络链路是否通仅仅是基础,我们期望能定位到具体是网络哪一段有问题
应用场景
- DNS解析异常
- IP被封、TCP443端口被封
- 网关配置异常
- 服务异常
- 业务站点打不开/特别慢时,使用工具快速定位是否是网络问题/具体是网络的哪一段有问题
优势
- windows在程序关闭后后台运行
- windows系统重启自动后台运行,对用户无感知
- 相比Electron打包体积动则上百M,该工具打包体积只有10M左右
下载地址
Download page
本地编译
可以基于本程序做二次开发,按照如下方式进行编译.
操作系统 | 开发构建方式 | 用户执行方式 |
---|---|---|
Windows | 项目下执行make build-windows | 安装并直接点击运行 |
MacOS | 项目下执行make build-mac | shell中执行chmod u+x network-detector && sudo ./network-detector |
Linux | 项目下执行make build-linux | shell中执行chmod u+x network-detector && sudo ./network-detector |
上报流程
该工具会在点击“探测”后,每隔30s自动做探测,并在代码中提供了上报的钩子,可将探测结果数据上报到你的服务端,做数据分析处理&大盘&告警处理.满足实时网络监控诉求。
实现
基于wails框架(Go+Vue3)实现。
探测部分基于以下几个模块实现:
- DNS:Go的net包
- Ping:Go的net包、golang.org/x/net/icmp、golang.org/x/net/ipv4
- TCP:Go的net包
- MTR:github.com/tonobo/mtr/pkg/hop、github.com/tonobo/mtr/pkg/mtr、golang.org/x/net/icmp
对于平台差异化,使用如下编译指令做兼容处理:
windows
//go:build windows
// +build windows
非windows
//go:build !windows
// +build !windows
该网络探测工具当前已开源,完整的实现可以查看我的Github,欢迎点赞和Star👏。
我是斌少,十年经验大厂全栈开发,多年一线leader,分享编程经验、技术干货,帮你少走弯路、快速成长。欢迎关注!