如何识别突发流量?

如何识别突发流量?

背景:我们的一台 Ubuntu 服务器随机(?)无响应,即某些连接断开,并且服务器暂时不接受新连接。至少这是我们在相关服务日志中看到的情况。该问题最多持续几分钟。这种情况每天发生 1-3 次。我们使用 munin 来监控此服务器,但标准图表中没有任何内容引起我们的注意。

初步诊断后没有发现任何问题,但我们的数据中心告诉我们,当这种情况发生时,他们的图表上会出现短暂的流量高峰。他们没有提供更多有用的信息。如何确定导致这些情况的原因?(源 IP,目标端口)

我考虑过使用 tcpdump 捕获数据包,但我不知道可以应用什么过滤器来避免生成数千兆字节的日志。也许存在一个工具来记录所有连接并打印统计信息(连接持续时间、交换的字节数、速率)?假设这些不是无连接数据包。

答案1

在收集更多数据之前,不要认为此事件的根本原因是“流量激增”。这可能是多种问题,通常属于利用率、饱和度或错误类别。查看所有指标,包括应用程序对用户请求的响应时间。阅读您的日志,包括系统日志。


如果事件对于您的监测间隔来说太短暂,请考虑尝试一些高分辨率监测。例如,Netdata 可以以 1 秒的间隔收集广泛的指标


也许存在一个工具来记录所有连接并打印统计数据(连接持续时间、交换字节数、速率)?

自然,有人破解了 BPF 跟踪脚本来实现这一点。Brendan Greg 的实现称为 tcplife。 源自 bcc repo。

# ./tcplife -t
TIME(s)   PID   COMM       LADDR           LPORT RADDR           RPORT TX_KB RX_KB MS
0.000000  5973  recordProg 127.0.0.1       47986 127.0.0.1       28527     0     0 0.25
0.000059  3277  redis-serv 127.0.0.1       28527 127.0.0.1       47986     0     0 0.29
1.022454  5996  recordProg 127.0.0.1       47988 127.0.0.1       28527     0     0 0.23
1.022513  3277  redis-serv 127.0.0.1       28527 127.0.0.1       47988     0     0 0.27
2.044868  6019  recordProg 127.0.0.1       47990 127.0.0.1       28527     0     0 0.24
2.044924  3277  redis-serv 127.0.0.1       28527 127.0.0.1       47990     0     0 0.28
3.069136  6042  recordProg 127.0.0.1       47992 127.0.0.1       28527     0     0 0.22
3.069204  3277  redis-serv 127.0.0.1       28527 127.0.0.1       47992     0     0 0.28

This shows that the recordProg process was connecting once per second.

大量免责声明:Linux 4.4 或更高版本,关闭时只有 TCP 会话,PID 检测不准确。但您可以实时显示已关闭的 TCP 会话,时间戳为微秒,无需数据包跟踪。

如果事件没有被及时报道,请尝试跟踪 TCP 连接

相关内容