我的生产服务器位于美国东海岸,一些支持应用程序位于欧洲阿姆斯特丹。美国东海岸也有一个 Nagios 实例在运行,它进行一些端口检查和一些通过 ssh 进行的检查。
问题是,几乎每天我都会使用 mtr(traceroute 和 ping 的组合)观察到数据包丢失以及持续约 1 分钟的轻微服务问题。我将这些 mtr 输出展示给我们在阿姆斯特丹的服务提供商,但他否认存在任何问题,称 ICMP(由 mtr 使用)不是测量数据包丢失的可靠方法,因为 ICMP 在路由器上的优先级最低。因此路由器可以丢弃 ICMP,但它们对 TCP 来说没问题。
我该如何向我的服务提供商证明他的服务确实存在问题,需要修复? 适合此目的的工具和技术有哪些?
答案1
很难明确证明数据包丢失。
如果这是你的目标,我建议的策略是:
- 设置主机 A 和主机 B 来测试之间的网络
- 在每个主机上实施
iptables
规则,以计算进入/离开的数据包数量- 这意味着没有状态跟踪规则
- 用于
iperf
进行一段时间的 TCP 测试,例如 300 秒 iptables
在两台主机上转储并比较数据包数量
另一种方法iptables
是查看两个主机上接口的 tx/rx 数据包数(例如ifconfig eth0
)-在测试开始时做记录,进行传输测试(例如使用 SCP 或 FTP)-然后计算从一台主机发送的数据包是否等于另一台主机上接收到的数据包。
任何其他技术都会给您提供错误的信息。主机和中间路由器确实会将其视为ICMP
低优先级,或者根本不响应。通常,UDP
数据包也被视为较低优先级,因此iperf
使用 UDP 流的受控测试可能会给出错误的结果。并且,TCP
没有实际计算发送的数据包和接收的数据包的测试永远不会揭示太多信息,因为底层操作系统会处理数据包丢失。
答案2
也许您可以尝试安装 smokeping 并进行一些服务检查(tcp、http、http 等)。它可以绘制漂亮的数据包丢失图表。
答案3
产品推荐:
注意:这是一项商业服务,需要花费 $。
在我的工作场所,我们使用第三方网络监控服务沃姆利。
我们主要使用它来确保网站正常运行,但我们也可以检查特定端口等。
您可以获取一个基本帐户并设置一些传感器来测试 TCP 连接,看看 ICMP 是否存在问题。
它将为您生成图表,您可以将其展示给您的提供商。
测试是在世界各地的几座塔上进行的,您可以请求支持团队将一座特定的塔设置为主塔(我们使用悉尼,以便图表能够更真实地显示我们所在地区的 ping 值)
您甚至可以指定应该出现在 TCP 响应中的特定文本或正则表达式模式,这非常酷。