在一台服务器上,我目前正在经历奇怪的应用程序行为,这似乎都与networking问题有关。
问题的例子:
你怎么去调查这些问题呢? 关于第一个问题,我知道应该总是有3个连接向serverB打开,所以我只是简单地进行监视,
netstat | grep IP_serverB
这可以检测到连接丢失,但我想调查为什么这些连接丢失。 你会怎么做?
你需要安装哪些工具?
我知道我们的一个合作伙伴,似乎监视所有通过其服务器的stream量,并能够提供给我们的数据包跟踪文件(.pcap文件)。
你怎么设定的? 这有助于调查问题吗?
赔率是pcap正在创build的tcpdump,我不能推荐足够的。 我无法计算其帮助我发现networking问题的次数。 所以我将在每台服务器上设置tcpdump,并将捕获限制为仅适用于服务器A,B或C:
tcpdump -i any -v "host <ip of server>" -s0 -w output.pcap
请注意,使用主机参数意味着该主机的stream量(无论是传入还是传出)都将被捕获。
另外请注意,output.pcap可能不会在您认为应该的地方结束。 (在上面的例子中就是当前目录)这是因为有些版本的tcpdump会在运行之前chroot。 如果你没有find你期望的文件,请检查/ var / lib / tcpdump
运行tcpdumps直到你满意为止,你已经捕获了每个情况的例子。 如果你想要的话,你可以通过添加额外的条件进一步限制数据包的捕获
host <ip of server> and port 80
一旦你有你的pcap文件,你可以加载到wireshark,并希望找出事情出错的地方。
如果您正在隧道连接或在途中有NAT,则可能会出现此类问题,这种方式是一种方法,但不能正确执行NAT。 路由也可能是一个问题。
最简单的方法就是检查所有3台机器的路由。 你可以这样做: netstat -rn
我不知道你的具体设置,但你应该使用适当的接口和网关,并注意networking掩码。
然后,看看NAT表:
iptables -L -n -t nat
有时防火墙可能是一个值得检查的问题:
iptables -L -n
你还没有指定你使用的协议(UDP / TCP),所以我假设TCP。 TCP连接有几种状态。 你可以让仙人掌以graphics的方式监视你,在这里看一下Cacti论坛,如何设置: http ://forums.cacti.net/viewtopic.php?f=12&t= 12787
最重要的是,你可以添加ip_conntrack模块(modprobe nf_conntrack),或者直接编译进你的内核(比较难,但是你的默认Linux内核已经支持)。 请检查:
cat /proc/net/ip_conntrack
您将看到连接列表及其状态。 你可以使用grep来过滤掉你不需要的东西,或者只是寻找你感兴趣的东西。 您可以每分钟运行一次(从crontab),并将连接状态转储到文件中,如下所示:
grep IP_serverB /proc/net/ip_conntrack > `date +%Y%m%d_%H:%M`
这将把所有连接到/从IP_serverB到一个名为:20131003_23:11的文件到当前目录中。
这样你就可以看到两台机器上发生了什么(或者其中的三台,如果你让它在其中三台上运行的话)。 维基百科有一个很好的图表说明每个TCP状态: http : //upload.wikimedia.org/wikipedia/commons/thumb/a/a2/Tcp_state_diagram_fixed.svg/796px-Tcp_state_diagram_fixed.svg.png
你也可以设置tcpdump来以这种方式logging到/来自给定机器的TCP连接:
tcpdump -i <network_interface> host <IP> and ip proto \\tcp and port <port> -l > tcpdump_logfile &
或者,如果您想实时查看并同时将其logging到文件中,请执行以下操作:
tcpdump -i <network_interface> host <IP> and ip proto \\tcp and port <port> -l | tee tcpdump_logfile
使用extra -v(vv)参数,您可以增加详细程度。 Tcpdump将loggingTCP连接的所有细节(没有数据本身)。 这也应该可以帮助您诊断电线上发生了什么。
Ettercap / wireshark / tshark可能是你的朋友,如果你想实际看到TCP数据包内的数据。