首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux网络监控

Linux网络监控
EN

Server Fault用户
提问于 2013-10-03 20:44:52
回答 2查看 259关注 0票数 0

在一台服务器上,我目前正在经历奇怪的应用程序行为,这些行为似乎都与网络问题有关。

问题的例子:

  • applicationA检测到与serverB的连接丢失,但serverB仍然将该连接视为已打开
  • applicationA对serverC进行soap nor服务调用,serverC从不接收soap请求,但applicationA不执行超时或错误。

你将如何着手调查这些问题?关于第一个问题,我知道应该有3个连接可以连接到serverB,所以我只需要设置一个监视,这样就可以执行如下操作:

代码语言:javascript
复制
netstat | grep IP_serverB

当连接丢失时,这是可以检测的,但是我想了解为什么这些连接会丢失。你会怎么做?

你需要安装哪些工具?

我认识我们的一个合作伙伴,它似乎监视通过其服务器的所有通信量,并且能够为我们提供数据包跟踪文件(.pcap文件)。

你怎么安排的?调查问题有帮助吗?

EN

回答 2

Server Fault用户

发布于 2013-10-03 21:00:39

pcaps很可能是由tcpdump创建的,我推荐的不够多。我数不清它帮助我解决网络问题的次数。因此,我将在每台服务器上设置tcpdump,并酌情将捕获限制在服务器A、B或C上:

代码语言:javascript
复制
tcpdump -i any -v "host <ip of server>" -s0 -w output.pcap

注意,使用主机参数意味着将捕获该主机的通信量(无论是传入的还是传出的)。

另外,请注意,output.pcap可能不会在您认为应该的地方结束。(在上面的示例中,当前目录),这是因为某些版本的tcpdump在运行之前会变成chroot。如果找不到所需的文件,请签入/var/lib/tcpdump

运行tcpdumps,直到您满意地捕捉到每种情况的示例。如果您需要,可以通过添加附加条件来进一步限制数据包捕获。

代码语言:javascript
复制
host <ip of server> and port 80

一旦您有了pcap,您就可以将它加载到wireshark中,并希望能够找出问题出在哪里。

票数 2
EN

Server Fault用户

发布于 2013-10-03 21:26:50

这样的问题可能会发生,如果您正在隧道连接或有一个NAT在途中的某个地方,这是一个工作方式,但没有正确地做NAT回来。路由也可能是一个问题。

最简单的开始方式是检查所有3台机器上的路由。您可以使用:netstat -rn完成此操作。

我不知道你的具体设置,但你应该使用适当的接口和网关,也要注意网络掩码。

然后,看看NAT的桌子:

代码语言:javascript
复制
iptables -L -n -t nat

有时防火墙可能也是一个值得检查的问题:

代码语言:javascript
复制
iptables -L -n

您还没有指定您使用的协议(UDP/ TCP ),所以我假设使用TCP。TCP连接有几个它们可以处于的状态。您可以让Cacti以图形的方式为您监视这些,在Cacti论坛上查看一下,如何设置它:http://forums.cacti.net/viewtopic.php?f=12&t=12787

在此基础上,您可以添加ip_conntrack模块(mod探针nf_conntrack )或将其编译到内核中(难度更大,但可能默认的Linux内核已经支持它)。向以下机构查询:

代码语言:javascript
复制
cat /proc/net/ip_conntrack

您将看到一个连接列表以及它们的状态。你可以使用grep过滤掉你不需要的东西,或者只是寻找你感兴趣的东西。您可以让它(从crontab)每分钟运行一次,并将连接状态转储到文件中,如下所示:

代码语言:javascript
复制
grep IP_serverB /proc/net/ip_conntrack > `date +%Y%m%d_%H:%M`

它将连接到/来自IP_serverB的所有连接放入一个名为: 20131003_23:11的文件中,进入当前目录。

这样,您就可以看到在这两台机器上发生了什么(或者3台机器,如果让它们在3台机器上运行)。维基百科有一个很好的图表来说明每个TCP状态:http://upload.wikimedia.org/wikipedia/commons/thumb/a/a2/Tcp_状态_图解_Fied.svg/796px-TCP_状态_图解_fixed.svg.png

还可以通过以下方式设置tcpdump以记录与给定计算机的tcp连接:

代码语言:javascript
复制
tcpdump -i <network_interface> host <IP> and ip proto \\tcp and port <port> -l > tcpdump_logfile &

或者,如果您想实时查看它并同时将其记录到文件中,请执行以下操作:

代码语言:javascript
复制
tcpdump -i <network_interface> host <IP> and ip proto \\tcp and port <port> -l | tee tcpdump_logfile

使用额外的-v(vv)参数,您可以增加详细内容。Tcpdump将记录TCP连接的所有细节(没有数据本身)。这也会帮助你诊断,发生在电线上的事情。

如果您想实际查看TCP数据包中的数据,Ettercap/wireshark/tshark可以是您的朋友。

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/543668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档